aboutsummaryrefslogtreecommitdiffstats
path: root/archiva-modules/archiva-maven
diff options
context:
space:
mode:
Diffstat (limited to 'archiva-modules/archiva-maven')
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-metadata/pom.xml8
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-metadata/src/main/java/org/apache/archiva/metadata/model/maven2/MavenArtifactFacet.java144
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/pom.xml196
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/main/java/org/apache/archiva/proxy/maven/MavenRepositoryProxyHandler.java373
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/main/resources/META-INF/spring-context.xml41
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/metadata/repository/MockRepositoryArchivaTaskScheduler.java58
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/AbstractProxyTestCase.java618
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/CacheFailuresTransferTest.java185
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/ChecksumTransferTest.java555
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/ErrorHandlingTest.java661
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/HttpProxyTransferTest.java251
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/ManagedDefaultTransferTest.java466
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/MetadataTransferTest.java1405
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/MockConfiguration.java193
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/SnapshotTransferTest.java329
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/WagonDelegate.java286
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/common/WagonFactoryTest.java61
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/ArchivaIndexManagerMock.java90
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java387
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/RemoteRepositoryContentMock.java92
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/RepositoryContentProviderMock.java66
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java240
-rwxr-xr-xarchiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/create-managed-to-proxy-map.sh60
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed-to-proxy-map.txt89
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar3
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-checksum-from-managed-repo/1.0/get-checksum-from-managed-repo-1.0.jar.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-default-layout-present-with-pom/1.0/get-default-layout-present-with-pom-1.0.jar3
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-default-layout-present-with-pom/1.0/get-default-layout-present-with-pom-1.0.pom24
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar3
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar.asc7
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-default-metadata/1.0/get-default-metadata-1.0.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-default-metadata/1.0/maven-metadata.xml24
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-doubly-relocated-artefact/1.0/get-doubly-relocated-artefact-1.0.pom32
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-merged-metadata/maven-metadata.xml33
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-not-on-remotes/1.0-beta-2/get-not-on-remotes-1.0-beta-2.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-not-on-remotes/1.0-beta-2/maven-metadata.xml24
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-not-on-remotes/maven-metadata.xml28
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-on-local-on-remote/1.0.22/get-on-local-on-remote-1.0.22.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-on-local-on-remote/1.0.22/maven-metadata.xml24
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-on-local-on-remote/1.0.8/get-on-local-on-remote-1.0.8.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-on-local-on-remote/maven-metadata.xml29
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-on-multiple-repos/1.0/get-on-multiple-repos-1.0.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-on-multiple-repos/1.0/maven-metadata.xml24
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-on-multiple-repos/maven-metadata.xml28
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-present-metadata-snapshot/1.0-SNAPSHOT/get-present-metadata-snapshot-1.0-20050831.101112-1.jar2
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-present-metadata-snapshot/1.0-SNAPSHOT/maven-metadata.xml31
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-present-timestamped-snapshot/1.0-SNAPSHOT/get-present-timestamped-snapshot-1.0-SNAPSHOT.jar2
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-project-metadata/1.0/get-project-metadata-1.0.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-project-metadata/1.1/get-project-metadata-1.1.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-project-metadata/2.0/get-project-metadata-2.0.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-project-metadata/maven-metadata.xml28
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-release-metadata/2.2/get-release-metadata-2.2.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-release-metadata/2.2/maven-metadata.xml24
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-relocated-artefact-with-pom/1.0/get-relocated-artefact-with-pom-1.0.pom32
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-relocated-artefact/1.0/get-relocated-artefact-1.0.pom32
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-removed-from-proxies/1.0/get-removed-from-proxies-1.0.jar3
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-removed-metadata/1.0/maven-metadata.xml22
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-snapshot-on-local-not-remote/2.0-alpha-2-SNAPSHOT/get-snapshot-on-local-not-remote-2.0-alpha-2-20070821.123456-1.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-snapshot-on-local-not-remote/2.0-alpha-2-SNAPSHOT/get-snapshot-on-local-not-remote-2.0-alpha-2-20070821.220304-2.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-snapshot-on-local-not-remote/2.0-alpha-2-SNAPSHOT/maven-metadata.xml31
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070821.102030-1.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070821.185701-2.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070822.021008-3.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/maven-metadata.xml31
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-updated-metadata/.metadata-proxied125
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-updated-metadata/1.0-SNAPSHOT/.metadata-proxied127
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-updated-metadata/1.0-SNAPSHOT/maven-metadata.xml30
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-updated-metadata/maven-metadata.xml28
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/groups/get-not-on-remotes/maven-metadata.xml29
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/groups/get-on-local-on-remote/maven-metadata.xml34
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/groups/get-on-multiple-repos/maven-metadata.xml29
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/groups/get-project-metadata/maven-metadata.xml29
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar3
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-both-bad/1.0/get-checksum-both-bad-1.0.jar2
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-both-bad/1.0/get-checksum-both-bad-1.0.jar.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-both-bad/1.0/get-checksum-both-bad-1.0.jar.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-both-right/1.0/get-checksum-both-right-1.0.jar1
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-both-right/1.0/get-checksum-both-right-1.0.jar.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-both-right/1.0/get-checksum-both-right-1.0.jar.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-from-managed-repo/1.0/get-checksum-from-managed-repo-1.0.jar.sha12
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-md5-bad-sha1/1.0/get-checksum-md5-bad-sha1-1.0.jar2
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-md5-bad-sha1/1.0/get-checksum-md5-bad-sha1-1.0.jar.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-md5-bad-sha1/1.0/get-checksum-md5-bad-sha1-1.0.jar.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-md5-only/1.0/get-checksum-md5-only-1.0.jar2
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-md5-only/1.0/get-checksum-md5-only-1.0.jar.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-sha1-bad-md5/1.0/get-checksum-sha1-bad-md5-1.0.jar2
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-sha1-bad-md5/1.0/get-checksum-sha1-bad-md5-1.0.jar.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-sha1-bad-md5/1.0/get-checksum-sha1-bad-md5-1.0.jar.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-sha1-only/1.0/get-checksum-sha1-only-1.0.jar2
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-sha1-only/1.0/get-checksum-sha1-only-1.0.jar.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar3
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar.asc1
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar2
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar.asc7
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-default-layout/1.0/maven-metadata.xml24
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-default-layout/maven-metadata.xml28
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-default-metadata/1.0/maven-metadata.xml24
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-found-in-proxy/1.0.5/get-found-in-proxy-1.0.5-javadoc.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-found-in-proxy/maven-metadata.xml28
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-in-both-proxies/1.0/get-in-both-proxies-1.0.jar3
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-merged-metadata/maven-metadata.xml33
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-metadata-snapshot/1.0-SNAPSHOT/get-metadata-snapshot-1.0-20050831.101112-1.jar1
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-metadata-snapshot/1.0-SNAPSHOT/maven-metadata.xml31
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-on-local-on-remote/1.0.22/maven-metadata.xml24
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-on-local-on-remote/maven-metadata.xml29
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-on-multiple-repos/1.0/maven-metadata.xml24
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-on-multiple-repos/maven-metadata.xml29
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-present-metadata-snapshot/1.0-SNAPSHOT/get-present-metadata-snapshot-1.0-20050831.101112-1.jar2
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-present-metadata-snapshot/1.0-SNAPSHOT/maven-metadata.xml31
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-present-timestamped-snapshot/1.0-SNAPSHOT/get-present-timestamped-snapshot-1.0-SNAPSHOT.jar2
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070819.040004-1.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070822.145534-9.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/maven-metadata.xml31
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-20061222.034118-1.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-20061227.112101-2.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-SNAPSHOT.jar2
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/maven-metadata.xml31
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-timestamped-snapshot/1.0-SNAPSHOT/get-timestamped-snapshot-1.0-SNAPSHOT.jar1
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-updated-metadata/1.0-SNAPSHOT/maven-metadata.xml30
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-updated-metadata/maven-metadata.xml29
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/groups/get-default-layout/maven-metadata.xml29
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/groups/get-found-in-proxy/maven-metadata.xml29
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/groups/get-on-local-on-remote/maven-metadata.xml34
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/groups/get-on-multiple-repos/maven-metadata.xml34
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-default-layout/1.0.1/get-default-layout-1.0.1.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar2
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-default-layout/1.0/maven-metadata.xml24
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-default-layout/maven-metadata.xml28
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-in-both-proxies/1.0/get-in-both-proxies-1.0.jar3
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar2
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-merged-metadata/maven-metadata.xml33
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-on-multiple-repos/1.0/maven-metadata.xml24
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-on-multiple-repos/maven-metadata.xml29
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070821.102030-1.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070823.111741-5.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070823.212711-6.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/maven-metadata.xml31
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-20061222.034118-1.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-20070101.000103-2.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-SNAPSHOT.jar2
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/maven-metadata.xml31
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/groups/get-default-layout/maven-metadata.xml29
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/groups/get-on-multiple-repos/maven-metadata.xml34
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-proxy/src/test/resources/META-INF/spring-context.xml68
-rwxr-xr-xarchiva-modules/archiva-maven/archiva-maven-proxy/src/test/resources/spring-context.xml127
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/pom.xml263
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/ArchivaRepositoryConnectorFactory.java99
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/DependencyTreeBuilder.java38
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/DependencyTreeBuilderException.java32
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/Maven3DependencyTreeBuilder.java282
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/TreeDependencyNodeVisitor.java94
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/ArtifactMappingProvider.java27
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/ArtifactMetadataVersionComparator.java43
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/DefaultArtifactMappingProvider.java90
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/DummyLifecycleBindingsInjector.java40
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryPathTranslator.java345
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java976
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenArtifactFacetFactory.java45
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenProjectFacet.java164
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenProjectFacetFactory.java44
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenProjectParent.java59
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/RepositoryModelResolver.java594
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/AbstractDefaultRepositoryContent.java187
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/ArtifactExtensionMapping.java78
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/DefaultPathParser.java91
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/FilenameParser.java259
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/ManagedDefaultRepositoryContent.java505
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/MavenContentProvider.java124
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/RemoteDefaultRepositoryContent.java102
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/RepositoryRequest.java275
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenManagedRepository.java140
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRemoteRepository.java114
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java439
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenSystemManager.java119
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/resources/META-INF/spring-context.xml40
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/expected-poms/archiva-model-effective.pom804
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/expected-poms/cocoon-1.pom284
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/expected-poms/maven-parent-4.pom227
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/expected-poms/model-write-400-simple.pom9
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/expected-poms/test-project-model-effective.pom243
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/configuration/MockRepoAdmin.java328
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/configuration/TestConfiguration.java127
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/dependency/tree/maven2/DependencyTreeBuilderTestMaven3.java140
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/MockRepositoryArchivaTaskScheduler.java58
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/TestMetadataResolver.java87
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/AbstractDefaultRepositoryContentTestCase.java491
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/ManagedDefaultRepositoryContentTest.java244
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverMRM1411RepoGroupTest.java550
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverMRM1411Test.java447
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverManagedReleaseTest.java142
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverManagedSnapshotTest.java141
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverTest.java815
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/MavenRepositoryMetadataReaderTest.java128
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/MockWagon.java248
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/RemoteDefaultRepositoryContentTest.java68
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/conf/MockConfiguration.java170
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/AbstractRepositoryLayerTestCase.java94
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/RepositoryURLTest.java100
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/content/maven2/ArtifactExtensionMappingTest.java83
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/content/maven2/DefaultPathParserTest.java572
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/content/maven2/FilenameParserTest.java217
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/content/maven2/RepositoryRequestTest.java530
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/index/mock/ArchivaIndexManagerMock.java805
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/index/mock/MavenIndexContextMock.java137
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven2/MavenRepositoryProviderTest.java295
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/metadata/Maven2RepositoryStorageTest.java65
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/metadata/MetadataToolsTest.java658
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/metadata/RepositoryMetadataReaderTest.java79
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/metadata/RepositoryMetadataWriterTest.java65
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/CVS/Root1
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/KEYS1
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/invalid/invalid-1.0.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/invalid/invalid/1.0-20050611.123456-1/invalid-1.0-20050611.123456-1.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/invalid/invalid/1.0-SNAPSHOT/invalid-1.0.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/invalid/invalid/1.0/invalid-1.0b.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/invalid/invalid/1.0/invalid-2.0.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/invalid/invalid/1/invalid-10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/javax/maven-metadata.xml26
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/javax/sql/jdbc/2.0/jdbc-2.0.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/javax/sql/jdbc/2.0/maven-metadata-repository.xml25
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/javax/sql/jdbc/maven-metadata-repository.xml30
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/javax/sql/maven-metadata-repository.xml25
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/archiva/sample-parent/2.1-SNAPSHOT/sample-parent-2.1-20090807.095532-1.pom23
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/archiva/sample-parent/2.1-SNAPSHOT/sample-parent-2.1-20090808.085535-2.pom23
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/archiva/sample-project/2.1-SNAPSHOT/sample-project-2.1-SNAPSHOT.pom47
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070725.210059-1.pom300
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070725.210059-1.pom.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070725.210059-1.pom.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070725.232304-2.pom300
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070725.232304-2.pom.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070725.232304-2.pom.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070726.053327-3.pom300
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070726.053327-3.pom.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070726.053327-3.pom.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070726.173653-5.pom300
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070726.173653-5.pom.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070726.173653-5.pom.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070727.113106-7.pom300
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070727.113106-7.pom.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070727.113106-7.pom.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070728.053229-10.pom300
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070728.053229-10.pom.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070728.053229-10.pom.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070728.112043-11.pom300
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070728.112043-11.pom.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070728.112043-11.pom.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070729.171937-16.pom300
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070729.171937-16.pom.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070729.171937-16.pom.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070730.232112-20.pom300
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070730.232112-20.pom.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070730.232112-20.pom.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070731.113304-21.pom268
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070731.113304-21.pom.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070731.113304-21.pom.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070731.172936-22.pom268
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070731.172936-22.pom.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070731.172936-22.pom.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070802.113139-29.pom268
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070802.113139-29.pom.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070802.113139-29.pom.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/maven-metadata.xml12
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/maven-metadata.xml.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/maven-metadata.xml.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/cocoon/cocoon/1/cocoon-1.pom379
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/A/1.0/A-1.0.pom28
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/A/1.0/A-1.0.war1
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/B/1.0/B-1.0.pom28
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/B/2.0/B-2.0.pom28
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/C/1.0/C-1.0.pom28
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/C/1.0/C-1.0.war1
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-applet/1.0-SNAPSHOT/archiva-applet-1.0-SNAPSHOT.pom69
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-base/1.0-SNAPSHOT/archiva-base-1.0-SNAPSHOT.pom42
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-cli/1.0-SNAPSHOT/archiva-cli-1.0-SNAPSHOT.pom68
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-common/1.0-SNAPSHOT/archiva-common-1.0-SNAPSHOT.pom98
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-configuration/1.0-SNAPSHOT/archiva-configuration-1.0-SNAPSHOT.pom109
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-consumer-api/1.0-SNAPSHOT/archiva-consumer-api-1.0-SNAPSHOT.pom38
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-consumers/1.0-SNAPSHOT/archiva-consumers-1.0-SNAPSHOT.pom41
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-converter/1.0-SNAPSHOT/archiva-converter-1.0-SNAPSHOT.pom79
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-core-consumers/1.0-SNAPSHOT/archiva-core-consumers-1.0-SNAPSHOT.pom50
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-core/1.0-SNAPSHOT/archiva-core-1.0-SNAPSHOT.pom113
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-discoverer/1.0-SNAPSHOT/archiva-discoverer-1.0-SNAPSHOT.pom65
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-indexer/1.0-SNAPSHOT/archiva-indexer-1.0-SNAPSHOT.pom81
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-model/1.0-SNAPSHOT/archiva-model-1.0-SNAPSHOT.pom169
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-parent/1.0-SNAPSHOT/archiva-parent-1.0-SNAPSHOT.pom566
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-plexus-application/1.0-SNAPSHOT/archiva-plexus-application-1.0-SNAPSHOT.pom62
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-plexus-runtime/1.0-SNAPSHOT/archiva-plexus-runtime-1.0-SNAPSHOT.pom145
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-proxy/1.0-SNAPSHOT/archiva-proxy-1.0-SNAPSHOT.pom60
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-reports-standard/1.0-SNAPSHOT/archiva-reports-standard-1.0-SNAPSHOT.pom176
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-repository-layer/1.0-SNAPSHOT/archiva-repository-layer-1.0-SNAPSHOT.pom103
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-security/1.0-SNAPSHOT/archiva-security-1.0-SNAPSHOT.pom45
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-webapp/1.0-SNAPSHOT/archiva-webapp-1.0-SNAPSHOT.pom334
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-xml-tools/1.0-SNAPSHOT/archiva-xml-tools-1.0-SNAPSHOT.pom79
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva/1.0-SNAPSHOT/archiva-1.0-20061126.005254-2.pom505
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva/1.0-SNAPSHOT/archiva-1.0-SNAPSHOT-site.xml28
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva/1.0-SNAPSHOT/archiva-1.0-SNAPSHOT.pom556
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/discovery/1.0/discovery-1.0.pom28
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/maven-metadata.xml23
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/maven-parent/4/maven-parent-4-site.xml0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/maven-parent/4/maven-parent-4-site_en.xml0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/maven-parent/4/maven-parent-4.pom304
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/maven-parent/4/maven-parent-4.pom.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/samplejar/1.0/samplejar-1.0.jar1
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/samplejar/1.0/samplejar-1.0.pom29
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/samplejar/2.0/samplejar-2.0.jar1
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/samplejar/2.0/samplejar-2.0.pom29
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/samplejar/maven-metadata.xml35
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-javadoc.jarbin0 -> 38527 bytes
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-javadoc.jar.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-javadoc.jar.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-sources.jarbin0 -> 2819 bytes
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-sources.jar.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-sources.jar.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.jarbin0 -> 6480 bytes
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.jar.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.jar.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.pom56
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.pom.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.pom.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-javadoc.jarbin0 -> 38215 bytes
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-javadoc.jar.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-javadoc.jar.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-sources.jarbin0 -> 2822 bytes
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-sources.jar.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-sources.jar.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.jarbin0 -> 6478 bytes
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.jar.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.jar.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.pom56
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.pom.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.pom.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml15
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/some-ejb/1.0/maven-metadata.xml0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/some-ejb/1.0/some-ejb-1.0-client.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/test/1.0-SNAPSHOT/test-1.0-20050611.112233-1-javadoc.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/test/1.0-SNAPSHOT/test-1.0-20050611.112233-1.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/test/1.0-SNAPSHOT/wrong-artifactId-1.0-20050611.112233-1.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/test/2.0.4-SNAPSHOT/test-2.0.4-SNAPSHOT.pom143
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/testing/1.0/testing-1.0-sources.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/testing/1.0/testing-1.0-test-sources.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/testing/1.0/testing-1.0.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/testing/1.0/testing-1.0.tar.gz0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/testing/1.0/testing-1.0.zip0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/update/test-not-updated/1.0/test-not-updated-1.0.jar1
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/update/test-not-updated/1.0/test-not-updated-1.0.pom29
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/update/test-not-updated/maven-metadata.xml24
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/update/test-updated/1.0/test-updated-1.0.jar1
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/update/test-updated/1.0/test-updated-1.0.pom29
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/update/test-updated/maven-metadata.xml24
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/testgroup/discovery/1.0/discovery-1.0.pom28
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/testgroup/discovery/1.0/maven-metadata.xml25
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/testgroup/discovery/maven-metadata.xml24
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/test-project/test-project-api/2.4.4/test-project-api-2.4.4.pom39
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/test-project/test-project-broker-ejb/2.4.4/test-project-broker-ejb-2.4.4.pom77
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/test-project/test-project-broker-pom/2.4.4/test-project-broker-pom-2.4.4.pom16
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/test-project/test-project-common/2.4.4/test-project-common-2.4.4.pom119
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/test-project/test-project-endpoint-ejb/2.4.4/test-project-endpoint-ejb-2.4.4.pom75
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/test-project/test-project-endpoint-pom/2.4.4/test-project-endpoint-pom-2.4.4.pom16
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/test-project/test-project/2.4.4/test-project-2.4.4.pom161
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/bad_artifact/empty.txt2
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/include_xml/1.0/include_xml-1.0.pom25
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/include_xml/1.0/include_xml-1.0.xml2
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/include_xml/1.0/maven-metadata.xml3
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/incomplete_metadata_a/1.0/incomplete_metadata_a-1.0.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/incomplete_metadata_a/maven-metadata.xml5
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_artifact/1.0-SNAPSHOT/maven-metadata.xml13
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_artifact/1.0-SNAPSHOT/missing_artifact-1.0-20091007.132409-1.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_artifact/1.0-SNAPSHOT/missing_artifact-1.0-20091007.132409-1.pom6
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_artifact/1.2-SNAPSHOT/maven-metadata.xml11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_artifact/1.2-SNAPSHOT/missing_artifact-1.2-20091011.133751-1.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_artifact/1.2-SNAPSHOT/missing_artifact-1.2-20091011.133751-1.pom6
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_artifact/maven-metadata.xml12
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_metadata_a/1.0/missing_metadata_a-1.0.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_metadata_b/1.0.1/missing_metadata_b-1.0.1.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_metadata_b/1.0/missing_metadata_b-1.0.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_metadata_b/2.0-20070821-dev/missing_metadata_b-2.0-20070821-dev.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_metadata_b/2.0.1/missing_metadata_b-2.0.1.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_metadata_b/2.0/missing_metadata_b-2.0.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/1.0/proxied_multi-1.0.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/1.1/proxied_multi-1.1.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/2.1/proxied_multi-2.1.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/maven-metadata-central.xml16
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/maven-metadata-java.net.xml16
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/maven-metadata.xml14
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/maven-metadata-apache-snapshots.xml5
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/maven-metadata-internal-snapshots.xml5
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/maven-metadata-snapshots.codehaus.org.xml12
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/maven-metadata.xml9
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070221.194724-2-javadoc.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070221.194724-2-sources.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070221.194724-2.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070221.194724-2.war0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070302.212723-3-sources.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070302.212723-3.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070302.212723-3.war0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070303.152828-4-sources.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070303.152828-4.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070303.152828-4.war0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070305.215149-5.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070305.215149-5.pom.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070305.215149-5.war0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070305.215149-5.war.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070307.170909-6.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070307.170909-6.pom.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070307.170909-6.war0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070307.170909-6.war.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070314.211405-9.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070314.211405-9.pom.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070314.211405-9.war0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070314.211405-9.war.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070316.175232-11.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070316.175232-11.pom.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070316.175232-11.war0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070316.175232-11.war.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-SNAPSHOT-sources.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-SNAPSHOT.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-SNAPSHOT.war0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/maven-metadata.xml12
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.172940-1.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.172940-1.jar.md50
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.172940-1.jar.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.172940-1.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.172940-1.pom.md50
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.172940-1.pom.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2-sources.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2-sources.jar.md50
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2-sources.jar.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2.jar.md50
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2.jar.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2.pom.md50
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2.pom.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3-sources.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3-sources.jar.md50
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3-sources.jar.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3.jar.md50
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3.jar.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3.pom.md50
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3.pom.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4-sources.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4-sources.jar.md50
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4-sources.jar.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4.jar.md50
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4.jar.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4.pom.md50
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4.pom.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070305.215149-5.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070305.215149-5.jar.md50
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070305.215149-5.jar.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070305.215149-5.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070305.215149-5.pom.md50
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070305.215149-5.pom.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070307.170909-6.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070307.170909-6.jar.md50
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070307.170909-6.jar.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070307.170909-6.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070307.170909-6.pom.md50
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070307.170909-6.pom.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.190911-7.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.190911-7.jar.md50
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.190911-7.jar.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.190911-7.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.190911-7.pom.md50
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.190911-7.pom.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.193642-8.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.193642-8.jar.md50
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.193642-8.jar.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.193642-8.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.193642-8.pom.md50
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.193642-8.pom.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9-javadoc.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9-javadoc.jar.md50
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9-javadoc.jar.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9-sources.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9-sources.jar.md50
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9-sources.jar.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9.jar.md50
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9.jar.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9.pom.md50
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9.pom.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070316.153953-10.jar0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070316.153953-10.jar.md50
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070316.153953-10.jar.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070316.153953-10.pom0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070316.153953-10.pom.md50
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070316.153953-10.pom.sha10
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/META-INF/spring-context.xml30
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-module-a/1.0/test-artifact-module-a-1.0.pom19
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-module-a/1.0/test-artifact-module-a-1.0.pom.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-module-a/1.0/test-artifact-module-a-1.0.pom.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-module-b/1.0/test-artifact-module-b-1.0.pom20
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-module-b/1.0/test-artifact-module-b-1.0.pom.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-module-b/1.0/test-artifact-module-b-1.0.pom.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-parent/1/test-artifact-parent-1.pom41
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-parent/1/test-artifact-parent-1.pom.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-parent/1/test-artifact-parent-1.pom.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-root/1.0/test-artifact-root-1.0.pom40
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-root/1.0/test-artifact-root-1.0.pom.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-root/1.0/test-artifact-root-1.0.pom.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-snapshot-artifact-module-a/1.1-SNAPSHOT/test-snapshot-artifact-module-a-1.1-SNAPSHOT.pom18
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-snapshot-artifact-module-a/1.1-SNAPSHOT/test-snapshot-artifact-module-a-1.1-SNAPSHOT.pom.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-snapshot-artifact-module-a/1.1-SNAPSHOT/test-snapshot-artifact-module-a-1.1-SNAPSHOT.pom.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-snapshot-artifact-root/1.1-SNAPSHOT/maven-metadata.xml13
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-snapshot-artifact-root/1.1-SNAPSHOT/test-snapshot-artifact-root-1.1-20100310.014828-2.pom39
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-snapshot-artifact-root/1.1-SNAPSHOT/test-snapshot-artifact-root-1.1-20100310.014828-2.pom.md51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-snapshot-artifact-root/1.1-SNAPSHOT/test-snapshot-artifact-root-1.1-20100310.014828-2.pom.sha11
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/commons-io/commons-io/1.4/commons-io-1.4.pom419
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/m1-repo-filelist.txt6230
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/resolver-status.properties0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/scanner-archiva.xml109
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/spring-context-metadata-tools-test.xml32
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/spring-context-no-mock-conf.xml34
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/spring-context-repo-request-test.xml51
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/spring-context-storage.xml63
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/spring-context.xml64
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/test-repo/org/apache/archiva/generic-version/1.0-SNAPSHOT/generic-version-1.0-SNAPSHOT.pom9
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/test-repo/org/apache/archiva/released-version/1.0/released-version-1.0.pom9
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/test-repo/org/apache/archiva/unique-version/1.0-SNAPSHOT/unique-version-1.0-20090807.070903-1.pom9
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/test-repo/org/apache/archiva/unique-version/1.0-SNAPSHOT/unique-version-1.0-20090808.051902-2.pom9
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/test-repo/org/apache/archiva/unique-version/1.0-SNAPSHOT/unique-version-1.0-20090808.081025-3.pom9
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/test01.properties0
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-scheduler/pom.xml186
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-scheduler/src/main/java/org/apache/archiva/scheduler/indexing/maven/ArchivaIndexingTaskExecutor.java302
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-scheduler/src/main/java/org/apache/archiva/scheduler/indexing/maven/DefaultDownloadRemoteIndexScheduler.java211
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-scheduler/src/main/java/org/apache/archiva/scheduler/indexing/maven/DefaultIndexUpdateSideEffect.java47
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-scheduler/src/main/java/org/apache/archiva/scheduler/indexing/maven/DownloadRemoteIndexTask.java380
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-scheduler/src/main/java/org/apache/archiva/scheduler/indexing/maven/DownloadRemoteIndexTaskRequest.java116
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-scheduler/src/main/resources/META-INF/spring-context.xml48
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/index-updates/nexus-maven-repository-index.gzbin0 -> 95880 bytes
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/index-updates/nexus-maven-repository-index.properties36
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/index-updates/nexus-maven-repository-index.zipbin0 -> 201643 bytes
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/java/org/apache/archiva/scheduler/indexing/maven/ArchivaIndexingTaskExecutorTest.java352
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/java/org/apache/archiva/scheduler/indexing/maven/DownloadRemoteIndexTaskTest.java187
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/resources/log4j2-test.xml42
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/resources/spring-context.xml99
-rw-r--r--archiva-modules/archiva-maven/pom.xml3
548 files changed, 42647 insertions, 0 deletions
diff --git a/archiva-modules/archiva-maven/archiva-maven-metadata/pom.xml b/archiva-modules/archiva-maven/archiva-maven-metadata/pom.xml
index f1604347c..aca1c7d4b 100644
--- a/archiva-modules/archiva-maven/archiva-maven-metadata/pom.xml
+++ b/archiva-modules/archiva-maven/archiva-maven-metadata/pom.xml
@@ -44,6 +44,14 @@
<artifactId>archiva-xml-tools</artifactId>
</dependency>
<dependency>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>metadata-model</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ </dependency>
+ <dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
diff --git a/archiva-modules/archiva-maven/archiva-maven-metadata/src/main/java/org/apache/archiva/metadata/model/maven2/MavenArtifactFacet.java b/archiva-modules/archiva-maven/archiva-maven-metadata/src/main/java/org/apache/archiva/metadata/model/maven2/MavenArtifactFacet.java
new file mode 100644
index 000000000..56580f38f
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-metadata/src/main/java/org/apache/archiva/metadata/model/maven2/MavenArtifactFacet.java
@@ -0,0 +1,144 @@
+package org.apache.archiva.metadata.model.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.metadata.model.MetadataFacet;
+import org.apache.commons.lang.StringUtils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class MavenArtifactFacet
+ implements MetadataFacet
+{
+ private String classifier;
+
+ private String type;
+
+ private String timestamp;
+
+ private int buildNumber;
+
+ public static final String FACET_ID = "org.apache.archiva.metadata.repository.storage.maven2.artifact";
+
+ 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 String getTimestamp()
+ {
+ return timestamp;
+ }
+
+ public void setTimestamp( String timestamp )
+ {
+ this.timestamp = timestamp;
+ }
+
+ public int getBuildNumber()
+ {
+ return buildNumber;
+ }
+
+ public void setBuildNumber( int buildNumber )
+ {
+ this.buildNumber = buildNumber;
+ }
+
+ @Override
+ public String getFacetId()
+ {
+ return FACET_ID;
+ }
+
+ @Override
+ public String getName()
+ {
+ // TODO: not needed, perhaps artifact/version metadata facet should be separate interface?
+ return null;
+ }
+
+ @Override
+ public Map<String, String> toProperties()
+ {
+ Map<String, String> properties = new HashMap<>();
+ properties.put( "type", type );
+ if ( classifier != null )
+ {
+ properties.put( "classifier", classifier );
+ }
+ if ( timestamp != null )
+ {
+ properties.put( "timestamp", timestamp );
+ }
+ if ( buildNumber > 0 )
+ {
+ properties.put( "buildNumber", Integer.toString( buildNumber ) );
+ }
+ return properties;
+ }
+
+ @Override
+ public void fromProperties( Map<String, String> properties )
+ {
+ type = properties.get( "type" );
+ classifier = properties.get( "classifier" );
+ timestamp = properties.get( "timestamp" );
+ String buildNumber = properties.get( "buildNumber" );
+ if ( buildNumber != null )
+ {
+ this.buildNumber = Integer.parseInt( buildNumber );
+ }
+ }
+
+ @Override
+ public boolean equals( Object o )
+ {
+ if ( this == o )
+ {
+ return true;
+ }
+ if ( !( o instanceof MavenArtifactFacet ) )
+ {
+ return false;
+ }
+
+ MavenArtifactFacet that = (MavenArtifactFacet) o;
+
+ return StringUtils.equals( that.getClassifier(), this.classifier );
+ }
+
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/pom.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/pom.xml
new file mode 100644
index 000000000..1a1788a18
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/pom.xml
@@ -0,0 +1,196 @@
+<?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 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.archiva.maven</groupId>
+ <artifactId>archiva-maven</artifactId>
+ <version>3.0.0-SNAPSHOT</version>
+ </parent>
+ <artifactId>archiva-maven-proxy</artifactId>
+ <name>Archiva :: Maven :: Proxy</name>
+
+ <properties>
+ <site.staging.base>${project.parent.parent.basedir}</site.staging.base>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.archiva.maven</groupId>
+ <artifactId>archiva-maven-common</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>archiva-plexus-bridge</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>archiva-repository-admin-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archetype</groupId>
+ <artifactId>archetype-common</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>archiva-proxy</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>
+ <!-- currently these are runtime as it's declared in the spring context
+ file, but is it necessary? -->
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-http-lightweight</artifactId>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-http</artifactId>
+ <scope>runtime</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>archiva-test-utils</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.ow2.asm</groupId>
+ <artifactId>asm</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-server</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.assertj</groupId>
+ <artifactId>assertj-core</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.hsqldb</groupId>
+ <artifactId>hsqldb</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva.redback.components.registry</groupId>
+ <artifactId>spring-registry-commons</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>archiva-test-utils</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>archiva-mock</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.assertj</groupId>
+ <artifactId>assertj-core</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.hsqldb</groupId>
+ <artifactId>hsqldb</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva.redback</groupId>
+ <artifactId>redback-rbac-cached</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva.redback</groupId>
+ <artifactId>redback-common-test-resources</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+
+ </dependencies>
+
+ <build>
+
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.rat</groupId>
+ <artifactId>apache-rat-plugin</artifactId>
+ <configuration>
+ <excludes>
+ <exclude>src/test/repositories/**</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+
+ <!--
+ The jaxb dependency is needed by the enunciate plugin starting with JDK9.
+ Adding to the plugin dependency is not sufficient, so I have to add it as project dependency.
+ Using provided scope to avoid adding it to packaging.
+ -->
+ <profiles>
+ <profile>
+ <id>jdk9+</id>
+ <activation>
+ <jdk>[1.9,)</jdk>
+ </activation>
+ <dependencies>
+ <dependency>
+ <groupId>javax.xml.bind</groupId>
+ <artifactId>jaxb-api</artifactId>
+ <version>2.3.0</version>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+ </profile>
+ </profiles>
+
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/main/java/org/apache/archiva/proxy/maven/MavenRepositoryProxyHandler.java b/archiva-modules/archiva-maven/archiva-maven-proxy/src/main/java/org/apache/archiva/proxy/maven/MavenRepositoryProxyHandler.java
new file mode 100644
index 000000000..b59d99835
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/main/java/org/apache/archiva/proxy/maven/MavenRepositoryProxyHandler.java
@@ -0,0 +1,373 @@
+package org.apache.archiva.proxy.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.archiva.configuration.NetworkProxyConfiguration;
+import org.apache.archiva.model.RepositoryURL;
+import org.apache.archiva.proxy.DefaultRepositoryProxyHandler;
+import org.apache.archiva.proxy.NotFoundException;
+import org.apache.archiva.proxy.NotModifiedException;
+import org.apache.archiva.proxy.ProxyException;
+import org.apache.archiva.proxy.model.NetworkProxy;
+import org.apache.archiva.proxy.model.ProxyConnector;
+import org.apache.archiva.repository.*;
+import org.apache.commons.lang.StringUtils;
+import org.apache.maven.wagon.ConnectionException;
+import org.apache.maven.wagon.ResourceDoesNotExistException;
+import org.apache.maven.wagon.Wagon;
+import org.apache.maven.wagon.WagonException;
+import org.apache.maven.wagon.authentication.AuthenticationException;
+import org.apache.maven.wagon.authentication.AuthenticationInfo;
+import org.apache.maven.wagon.proxy.ProxyInfo;
+import org.apache.maven.wagon.repository.Repository;
+import org.springframework.stereotype.Service;
+
+import javax.inject.Inject;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * DefaultRepositoryProxyHandler
+ * TODO exception handling needs work - "not modified" is not really an exceptional case, and it has more layers than
+ * your average brown onion
+ */
+@Service("repositoryProxyConnectors#maven")
+public class MavenRepositoryProxyHandler extends DefaultRepositoryProxyHandler {
+
+ private static final List<RepositoryType> REPOSITORY_TYPES = new ArrayList<>();
+
+ static {
+ REPOSITORY_TYPES.add(RepositoryType.MAVEN);
+ }
+
+ @Inject
+ private WagonFactory wagonFactory;
+
+ private ConcurrentMap<String, ProxyInfo> networkProxyMap = new ConcurrentHashMap<>();
+
+ @Override
+ public void initialize() {
+ super.initialize();
+ }
+
+ private void updateWagonProxyInfo(Map<String, NetworkProxy> proxyList) {
+ this.networkProxyMap.clear();
+ List<NetworkProxyConfiguration> networkProxies = getArchivaConfiguration().getConfiguration().getNetworkProxies();
+ for (Map.Entry<String, NetworkProxy> proxyEntry : proxyList.entrySet()) {
+ String key = proxyEntry.getKey();
+ NetworkProxy networkProxyDef = proxyEntry.getValue();
+
+ ProxyInfo proxy = new ProxyInfo();
+
+ proxy.setType(networkProxyDef.getProtocol());
+ proxy.setHost(networkProxyDef.getHost());
+ proxy.setPort(networkProxyDef.getPort());
+ proxy.setUserName(networkProxyDef.getUsername());
+ proxy.setPassword(networkProxyDef.getPassword());
+
+ this.networkProxyMap.put(key, proxy);
+ }
+ }
+
+ @Override
+ public void setNetworkProxies(Map<String, NetworkProxy> proxies) {
+ super.setNetworkProxies(proxies);
+ updateWagonProxyInfo(proxies);
+ }
+
+ /**
+ * @param connector
+ * @param remoteRepository
+ * @param tmpMd5
+ * @param tmpSha1
+ * @param tmpResource
+ * @param url
+ * @param remotePath
+ * @param resource
+ * @param workingDirectory
+ * @param repository
+ * @throws ProxyException
+ * @throws NotModifiedException
+ */
+ protected void transferResources(ProxyConnector connector, RemoteRepositoryContent remoteRepository, Path tmpMd5,
+ Path tmpSha1, Path tmpResource, String url, String remotePath, Path resource,
+ Path workingDirectory, ManagedRepositoryContent repository)
+ throws ProxyException, NotModifiedException {
+ Wagon wagon = null;
+ try {
+ RepositoryURL repoUrl = remoteRepository.getURL();
+ String protocol = repoUrl.getProtocol();
+ NetworkProxy networkProxy = null;
+ String proxyId = connector.getProxyId();
+ if (StringUtils.isNotBlank(proxyId)) {
+
+ networkProxy = getNetworkProxy(proxyId);
+ }
+ WagonFactoryRequest wagonFactoryRequest = new WagonFactoryRequest("wagon#" + protocol,
+ remoteRepository.getRepository().getExtraHeaders());
+ if (networkProxy == null) {
+
+ log.warn("No network proxy with id {} found for connector {}->{}", proxyId,
+ connector.getSourceRepository().getId(), connector.getTargetRepository().getId());
+ } else {
+ wagonFactoryRequest = wagonFactoryRequest.networkProxy(networkProxy);
+ }
+ wagon = wagonFactory.getWagon(wagonFactoryRequest);
+ if (wagon == null) {
+ throw new ProxyException("Unsupported target repository protocol: " + protocol);
+ }
+
+ if (wagon == null) {
+ throw new ProxyException("Unsupported target repository protocol: " + protocol);
+ }
+
+ boolean connected = connectToRepository(connector, wagon, remoteRepository);
+ if (connected) {
+ transferArtifact(wagon, remoteRepository, remotePath, repository, resource, workingDirectory,
+ tmpResource);
+
+ // TODO: these should be used to validate the download based on the policies, not always downloaded
+ // to
+ // save on connections since md5 is rarely used
+ transferChecksum(wagon, remoteRepository, remotePath, repository, resource, workingDirectory, ".sha1",
+ tmpSha1);
+ transferChecksum(wagon, remoteRepository, remotePath, repository, resource, workingDirectory, ".md5",
+ tmpMd5);
+ }
+ } catch (NotFoundException e) {
+ urlFailureCache.cacheFailure(url);
+ throw e;
+ } catch (NotModifiedException e) {
+ // Do not cache url here.
+ throw e;
+ } catch (ProxyException e) {
+ urlFailureCache.cacheFailure(url);
+ throw e;
+ } catch (WagonFactoryException e) {
+ throw new ProxyException(e.getMessage(), e);
+ } finally {
+ if (wagon != null) {
+ try {
+ wagon.disconnect();
+ } catch (ConnectionException e) {
+ log.warn("Unable to disconnect wagon.", e);
+ }
+ }
+ }
+ }
+
+ protected void transferArtifact(Wagon wagon, RemoteRepositoryContent remoteRepository, String remotePath,
+ ManagedRepositoryContent repository, Path resource, Path tmpDirectory,
+ Path destFile)
+ throws ProxyException {
+ transferSimpleFile(wagon, remoteRepository, remotePath, repository, resource, destFile);
+ }
+
+ /**
+ * <p>
+ * Quietly transfer the checksum file from the remote repository to the local file.
+ * </p>
+ *
+ * @param wagon the wagon instance (should already be connected) to use.
+ * @param remoteRepository the remote repository to transfer from.
+ * @param remotePath the remote path to the resource to get.
+ * @param repository the managed repository that will hold the file
+ * @param resource the local file that should contain the downloaded contents
+ * @param tmpDirectory the temporary directory to download to
+ * @param ext the type of checksum to transfer (example: ".md5" or ".sha1")
+ * @throws ProxyException if copying the downloaded file into place did not succeed.
+ */
+ protected void transferChecksum(Wagon wagon, RemoteRepositoryContent remoteRepository, String remotePath,
+ ManagedRepositoryContent repository, Path resource, Path tmpDirectory, String ext,
+ Path destFile)
+ throws ProxyException {
+ String url = remoteRepository.getURL().getUrl() + remotePath + ext;
+
+ // Transfer checksum does not use the policy.
+ if (urlFailureCache.hasFailedBefore(url)) {
+ return;
+ }
+
+ try {
+ transferSimpleFile(wagon, remoteRepository, remotePath + ext, repository, resource, destFile);
+ log.debug("Checksum {} Downloaded: {} to move to {}", url, destFile, resource);
+ } catch (NotFoundException e) {
+ urlFailureCache.cacheFailure(url);
+ log.debug("Transfer failed, checksum not found: {}", url);
+ // Consume it, do not pass this on.
+ } catch (NotModifiedException e) {
+ log.debug("Transfer skipped, checksum not modified: {}", url);
+ // Consume it, do not pass this on.
+ } catch (ProxyException e) {
+ urlFailureCache.cacheFailure(url);
+ log.warn("Transfer failed on checksum: {} : {}", url, e.getMessage(), e);
+ // Critical issue, pass it on.
+ throw e;
+ }
+ }
+
+ /**
+ * Perform the transfer of the remote file to the local file specified.
+ *
+ * @param wagon the wagon instance to use.
+ * @param remoteRepository the remote repository to use
+ * @param remotePath the remote path to attempt to get
+ * @param repository the managed repository that will hold the file
+ * @param origFile the local file to save to
+ * @throws ProxyException if there was a problem moving the downloaded file into place.
+ */
+ protected void transferSimpleFile(Wagon wagon, RemoteRepositoryContent remoteRepository, String remotePath,
+ ManagedRepositoryContent repository, Path origFile, Path destFile)
+ throws ProxyException {
+ assert (remotePath != null);
+
+ // Transfer the file.
+ try {
+ boolean success = false;
+
+ if (!Files.exists(origFile)) {
+ log.debug("Retrieving {} from {}", remotePath, remoteRepository.getRepository().getName());
+ wagon.get(addParameters(remotePath, remoteRepository.getRepository()), destFile.toFile());
+ success = true;
+
+ // You wouldn't get here on failure, a WagonException would have been thrown.
+ log.debug("Downloaded successfully.");
+ } else {
+ log.debug("Retrieving {} from {} if updated", remotePath, remoteRepository.getRepository().getName());
+ try {
+ success = wagon.getIfNewer(addParameters(remotePath, remoteRepository.getRepository()), destFile.toFile(),
+ Files.getLastModifiedTime(origFile).toMillis());
+ } catch (IOException e) {
+ throw new ProxyException("Failed to the modification time of " + origFile.toAbsolutePath());
+ }
+ if (!success) {
+ throw new NotModifiedException(
+ "Not downloaded, as local file is newer than remote side: " + origFile.toAbsolutePath());
+ }
+
+ if (Files.exists(destFile)) {
+ log.debug("Downloaded successfully.");
+ }
+ }
+ } catch (ResourceDoesNotExistException e) {
+ throw new NotFoundException(
+ "Resource [" + remoteRepository.getURL() + "/" + remotePath + "] does not exist: " + e.getMessage(),
+ e);
+ } catch (WagonException e) {
+ // TODO: shouldn't have to drill into the cause, but TransferFailedException is often not descriptive enough
+
+ String msg =
+ "Download failure on resource [" + remoteRepository.getURL() + "/" + remotePath + "]:" + e.getMessage();
+ if (e.getCause() != null) {
+ msg += " (cause: " + e.getCause() + ")";
+ }
+ throw new ProxyException(msg, e);
+ }
+ }
+
+ /**
+ * Using wagon, connect to the remote repository.
+ *
+ * @param connector the connector configuration to utilize (for obtaining network proxy configuration from)
+ * @param wagon the wagon instance to establish the connection on.
+ * @param remoteRepository the remote repository to connect to.
+ * @return true if the connection was successful. false if not connected.
+ */
+ protected boolean connectToRepository(ProxyConnector connector, Wagon wagon,
+ RemoteRepositoryContent remoteRepository) {
+ boolean connected = false;
+
+ final ProxyInfo networkProxy =
+ connector.getProxyId() == null ? null : this.networkProxyMap.get(connector.getProxyId());
+
+ if (log.isDebugEnabled()) {
+ if (networkProxy != null) {
+ // TODO: move to proxyInfo.toString()
+ String msg = "Using network proxy " + networkProxy.getHost() + ":" + networkProxy.getPort()
+ + " to connect to remote repository " + remoteRepository.getURL();
+ if (networkProxy.getNonProxyHosts() != null) {
+ msg += "; excluding hosts: " + networkProxy.getNonProxyHosts();
+ }
+ if (StringUtils.isNotBlank(networkProxy.getUserName())) {
+ msg += "; as user: " + networkProxy.getUserName();
+ }
+ log.debug(msg);
+ }
+ }
+
+ AuthenticationInfo authInfo = null;
+ String username = "";
+ String password = "";
+ RepositoryCredentials repCred = remoteRepository.getRepository().getLoginCredentials();
+ if (repCred != null && repCred instanceof PasswordCredentials) {
+ PasswordCredentials pwdCred = (PasswordCredentials) repCred;
+ username = pwdCred.getUsername();
+ password = pwdCred.getPassword() == null ? "" : new String(pwdCred.getPassword());
+ }
+
+ if (StringUtils.isNotBlank(username) && StringUtils.isNotBlank(password)) {
+ log.debug("Using username {} to connect to remote repository {}", username, remoteRepository.getURL());
+ authInfo = new AuthenticationInfo();
+ authInfo.setUserName(username);
+ authInfo.setPassword(password);
+ }
+
+ // Convert seconds to milliseconds
+
+ long timeoutInMilliseconds = remoteRepository.getRepository().getTimeout().toMillis();
+
+ // Set timeout read and connect
+ // FIXME olamy having 2 config values
+ wagon.setReadTimeout((int) timeoutInMilliseconds);
+ wagon.setTimeout((int) timeoutInMilliseconds);
+
+ try {
+ Repository wagonRepository =
+ new Repository(remoteRepository.getId(), remoteRepository.getURL().toString());
+ wagon.connect(wagonRepository, authInfo, networkProxy);
+ connected = true;
+ } catch (ConnectionException | AuthenticationException e) {
+ log.warn("Could not connect to {}: {}", remoteRepository.getRepository().getName(), e.getMessage());
+ connected = false;
+ }
+
+ return connected;
+ }
+
+
+ public WagonFactory getWagonFactory() {
+ return wagonFactory;
+ }
+
+ public void setWagonFactory(WagonFactory wagonFactory) {
+ this.wagonFactory = wagonFactory;
+ }
+
+ @Override
+ public List<RepositoryType> supports() {
+ return REPOSITORY_TYPES;
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/main/resources/META-INF/spring-context.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/main/resources/META-INF/spring-context.xml
new file mode 100644
index 000000000..ac08cdbc3
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/main/resources/META-INF/spring-context.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.
+ -->
+
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://www.springframework.org/schema/context
+ http://www.springframework.org/schema/context/spring-context.xsd"
+ default-lazy-init="true">
+
+ <context:annotation-config/>
+ <context:component-scan base-package="org.apache.archiva.proxy.maven"/>
+
+ <bean name="wagon#http" scope="prototype" class="org.apache.maven.wagon.providers.http.HttpWagon"/>
+
+ <bean name="wagon#https" scope="prototype" class="org.apache.maven.wagon.providers.http.HttpWagon"/>
+
+ <bean name="wagon#http-ntlm" scope="prototype" class="org.apache.maven.wagon.providers.http.LightweightHttpWagon"/>
+
+ <bean name="wagon#https-ntlm" scope="prototype" class="org.apache.maven.wagon.providers.http.LightweightHttpsWagon"/>
+
+</beans> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/metadata/repository/MockRepositoryArchivaTaskScheduler.java b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/metadata/repository/MockRepositoryArchivaTaskScheduler.java
new file mode 100644
index 000000000..08bcd9640
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/metadata/repository/MockRepositoryArchivaTaskScheduler.java
@@ -0,0 +1,58 @@
+package org.apache.archiva.metadata.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.archiva.redback.components.taskqueue.TaskQueueException;
+import org.apache.archiva.scheduler.repository.model.RepositoryArchivaTaskScheduler;
+import org.apache.archiva.scheduler.repository.model.RepositoryTask;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author Olivier Lamy
+ */
+@Service ("archivaTaskScheduler#repositoryMock")
+public class MockRepositoryArchivaTaskScheduler
+ implements RepositoryArchivaTaskScheduler
+{
+ @Override
+ public boolean isProcessingRepositoryTask( String repositoryId )
+ {
+ return false;
+ }
+
+ @Override
+ public boolean isProcessingRepositoryTask( RepositoryTask task )
+ {
+ return false;
+ }
+
+ @Override
+ public void queueTask( RepositoryTask task )
+ throws TaskQueueException
+ {
+ // no op
+ }
+
+ @Override
+ public boolean unQueueTask( RepositoryTask task )
+ throws TaskQueueException
+ {
+ return false;
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/AbstractProxyTestCase.java b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/AbstractProxyTestCase.java
new file mode 100644
index 000000000..30f780c70
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/AbstractProxyTestCase.java
@@ -0,0 +1,618 @@
+package org.apache.archiva.proxy;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import net.sf.ehcache.CacheManager;
+import org.apache.archiva.configuration.ArchivaConfiguration;
+import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
+import org.apache.archiva.configuration.ProxyConnectorConfiguration;
+import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
+import org.apache.archiva.policies.CachedFailuresPolicy;
+import org.apache.archiva.policies.ChecksumPolicy;
+import org.apache.archiva.policies.PropagateErrorsDownloadPolicy;
+import org.apache.archiva.policies.PropagateErrorsOnUpdateDownloadPolicy;
+import org.apache.archiva.policies.ReleasesPolicy;
+import org.apache.archiva.policies.SnapshotsPolicy;
+import org.apache.archiva.proxy.model.RepositoryProxyHandler;
+import org.apache.archiva.repository.*;
+import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
+import org.apache.maven.wagon.Wagon;
+import org.easymock.EasyMock;
+import org.easymock.IMocksControl;
+import org.junit.Before;
+import org.junit.runner.RunWith;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.ApplicationContext;
+import org.springframework.test.context.ContextConfiguration;
+
+import javax.inject.Inject;
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.attribute.FileTime;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Locale;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+import static org.junit.Assert.*;
+
+/**
+ * AbstractProxyTestCase
+ */
+@RunWith( ArchivaSpringJUnit4ClassRunner.class )
+@ContextConfiguration( locations = { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml" } )
+public abstract class AbstractProxyTestCase
+{
+ @Inject
+ protected ApplicationContext applicationContext;
+
+ @Inject
+ RepositoryRegistry repositoryRegistry;
+
+ protected static final String ID_PROXIED1 = "proxied1";
+
+ protected static final String ID_PROXIED1_TARGET = "proxied1-target";
+
+ protected static final String ID_PROXIED2 = "proxied2";
+
+ protected static final String ID_PROXIED2_TARGET = "proxied2-target";
+
+ protected static final String ID_DEFAULT_MANAGED = "default-managed-repository";
+
+ protected static final String REPOPATH_PROXIED1 = "src/test/repositories/proxied1";
+
+ protected static final String REPOPATH_PROXIED1_TARGET = "target/test-repository/proxied1";
+
+ protected static final String REPOPATH_PROXIED2 = "src/test/repositories/proxied2";
+
+ protected static final String REPOPATH_PROXIED2_TARGET = "target/test-repository/proxied2";
+
+ protected static final String REPOPATH_DEFAULT_MANAGED = "src/test/repositories/managed";
+
+ // protected static final String REPOPATH_DEFAULT_MANAGED_TARGET = "target/test-repository/managed";
+
+ protected IMocksControl wagonMockControl;
+
+ protected Wagon wagonMock;
+
+
+ protected RepositoryProxyHandler proxyHandler;
+
+ protected ManagedRepositoryContent managedDefaultRepository;
+
+ protected Path managedDefaultDir;
+
+ protected MockConfiguration config;
+
+ protected Logger log = LoggerFactory.getLogger( getClass() );
+
+ WagonDelegate delegate;
+
+ @Before
+ public void setUp()
+ throws Exception
+ {
+ config =
+ (MockConfiguration) applicationContext.getBean( "archivaConfiguration#mock", ArchivaConfiguration.class );
+
+ config.getConfiguration().setManagedRepositories( new ArrayList<ManagedRepositoryConfiguration>() );
+ config.getConfiguration().setRemoteRepositories( new ArrayList<RemoteRepositoryConfiguration>() );
+ config.getConfiguration().setProxyConnectors( new ArrayList<ProxyConnectorConfiguration>() );
+
+ // Setup source repository (using default layout)
+ String name = getClass().getSimpleName();
+ String repoPath = "target/test-repository/managed/" + name;
+
+ managedDefaultRepository =
+ createRepository( ID_DEFAULT_MANAGED, "Default Managed Repository", repoPath, "default" );
+
+ managedDefaultDir = Paths.get( managedDefaultRepository.getRepoRoot() );
+
+ org.apache.archiva.repository.ManagedRepository repoConfig = repositoryRegistry.getManagedRepository(ID_DEFAULT_MANAGED);
+
+ applicationContext.getBean( RepositoryRegistry.class ).putRepository( repoConfig );
+
+ repositoryRegistry.setArchivaConfiguration( config );
+
+ // Setup target (proxied to) repository.
+ saveRemoteRepositoryConfig( ID_PROXIED1, "Proxied Repository 1",
+ Paths.get( REPOPATH_PROXIED1 ).toUri().toURL().toExternalForm(), "default" );
+
+ // Setup target (proxied to) repository.
+ saveRemoteRepositoryConfig( ID_PROXIED2, "Proxied Repository 2",
+ Paths.get( REPOPATH_PROXIED2 ).toUri().toURL().toExternalForm(), "default" );
+
+
+ repositoryRegistry.reload();
+
+ if ( repositoryRegistry.getManagedRepository( repoConfig.getId() ) != null )
+ {
+ org.apache.archiva.repository.ManagedRepository managedRepository = repositoryRegistry.getManagedRepository( repoConfig.getId() );
+ repositoryRegistry.removeRepository( managedRepository );
+ }
+
+ repositoryRegistry.putRepository( repoConfig );
+
+
+ // Setup the proxy handler.
+ //proxyHandler = applicationContext.getBean (RepositoryProxyHandler) lookup( RepositoryProxyHandler.class.getName() );
+
+ proxyHandler = applicationContext.getBean( "repositoryProxyConnectors#test", RepositoryProxyHandler.class );
+
+
+ // Setup the wagon mock.
+ wagonMockControl = EasyMock.createNiceControl();
+ wagonMock = wagonMockControl.createMock( Wagon.class );
+
+ delegate = (WagonDelegate) applicationContext.getBean( "wagon#test", Wagon.class );
+
+ delegate.setDelegate( wagonMock );
+
+ CacheManager.getInstance().clearAll();
+
+ log.info( "\n.\\ {}() \\._________________________________________\n", name );
+ }
+
+ protected void assertChecksums( Path expectedFile, String expectedSha1Contents, String expectedMd5Contents )
+ throws Exception
+ {
+ Path sha1File = expectedFile.toAbsolutePath().resolveSibling( expectedFile.getFileName().toString()+ ".sha1" );
+ Path md5File = expectedFile.toAbsolutePath().resolveSibling( expectedFile.getFileName().toString() + ".md5" );
+
+ if ( expectedSha1Contents == null )
+ {
+ assertFalse( "SHA1 File should NOT exist: " + sha1File.toAbsolutePath(), Files.exists(sha1File) );
+ }
+ else
+ {
+ assertTrue( "SHA1 File should exist: " + sha1File.toAbsolutePath(), Files.exists(sha1File) );
+ String actualSha1Contents = readChecksumFile( sha1File );
+ assertEquals( "SHA1 File contents: " + sha1File.toAbsolutePath(), expectedSha1Contents, actualSha1Contents );
+ }
+
+ if ( expectedMd5Contents == null )
+ {
+ assertFalse( "MD5 File should NOT exist: " + md5File.toAbsolutePath(), Files.exists(md5File) );
+ }
+ else
+ {
+ assertTrue( "MD5 File should exist: " + md5File.toAbsolutePath(), Files.exists(md5File) );
+ String actualMd5Contents = readChecksumFile( md5File );
+ assertEquals( "MD5 File contents: " + md5File.toAbsolutePath(), expectedMd5Contents, actualMd5Contents );
+ }
+ }
+
+ protected void assertFileEquals( Path expectedFile, Path actualFile, Path sourceFile )
+ throws Exception
+ {
+ assertNotNull( "Expected File should not be null.", expectedFile );
+ assertNotNull( "Actual File should not be null.", actualFile );
+
+ assertTrue( "Check actual file exists.", Files.exists(actualFile) );
+ assertTrue( "Check file is the same.", Files.isSameFile( expectedFile,
+ actualFile));
+ String expectedContents =
+ org.apache.commons.io.FileUtils.readFileToString( sourceFile.toFile(), Charset.defaultCharset() );
+ String actualContents =
+ org.apache.commons.io.FileUtils.readFileToString( actualFile.toFile(), Charset.defaultCharset() );
+ assertEquals( "Check file contents.", expectedContents, actualContents );
+ }
+
+ protected void assertNotDownloaded( Path downloadedFile )
+ {
+ assertNull( "Found file: " + downloadedFile + "; but was expecting a failure", downloadedFile );
+ }
+
+ @SuppressWarnings( "unchecked" )
+ protected void assertNoTempFiles( Path expectedFile )
+ {
+ Path workingDir = expectedFile.getParent();
+ if ( ( workingDir == null ) || !Files.isDirectory( workingDir) )
+ {
+ return;
+ }
+
+ Collection<Path> tmpFiles = null;
+ try {
+ tmpFiles = Files.list(workingDir).filter(path -> Files.isRegularFile(path) && path.getFileName().toString().endsWith(".tmp")).collect(Collectors.toList());
+ } catch (IOException e) {
+ log.error("Could not retrieve tmpFiles {}", workingDir);
+ }
+ if ( tmpFiles!=null && !tmpFiles.isEmpty() )
+ {
+ StringBuilder emsg = new StringBuilder();
+ emsg.append( "Found Temp Files in dir: " ).append( workingDir.toString() );
+ for ( Path tfile : tmpFiles )
+ {
+ emsg.append( "\n " ).append( tfile.getFileName().toString());
+ }
+ fail( emsg.toString() );
+ }
+ }
+
+ /**
+ * A faster recursive copy that omits .svn directories.
+ *
+ * @param sourceDirectory the source directory to copy
+ * @param destDirectory the target location
+ * @throws java.io.IOException if there is a copying problem
+ * @todo get back into plexus-utils, share with converter module
+ */
+ protected void copyDirectoryStructure( Path sourceDirectory, Path destDirectory )
+ throws IOException
+ {
+ if ( !Files.exists(sourceDirectory) )
+ {
+ throw new IOException( "Source directory doesn't exists (" + sourceDirectory.toAbsolutePath() + ")." );
+ }
+
+ Path[] files = Files.list(sourceDirectory).filter(path -> Files.isRegularFile(path)).toArray(Path[]::new);
+
+ String sourcePath = sourceDirectory.toAbsolutePath().toString();
+
+ for ( int i = 0; i < files.length; i++ )
+ {
+ Path file = files[i];
+
+ String dest = file.toAbsolutePath().toString();
+
+ dest = dest.substring( sourcePath.length() + 1 );
+
+ Path destination = destDirectory.resolve( dest );
+
+ if ( Files.isRegularFile(file) )
+ {
+ destination = destination.getParent();
+
+ org.apache.commons.io.FileUtils.copyFile( file.toFile(), destination.resolve( file.getFileName() ).toFile(), false );
+ // TODO: Change when there is a FileUtils.copyFileToDirectory(file, destination, boolean) option
+ //FileUtils.copyFileToDirectory( file, destination );
+ }
+ else if ( Files.isDirectory(file) )
+ {
+ if ( !".svn".equals( file.getFileName().toString() ) )
+ {
+ if ( !Files.exists(destination))
+ {
+ Files.createDirectories(destination);
+ }
+
+ copyDirectoryStructure( file, destination );
+ }
+ }
+ else
+ {
+ throw new IOException( "Unknown file type: " + file.toAbsolutePath() );
+ }
+ }
+ }
+
+
+ protected ManagedRepositoryContent createRepository( String id, String name, String path, String layout )
+ throws Exception
+ {
+ ManagedRepository repo = new BasicManagedRepository(id, name, Paths.get(path));
+ repositoryRegistry.putRepository(repo);
+ return repositoryRegistry.getManagedRepository(id).getContent();
+ }
+
+ /**
+ * Read the first line from the checksum file, and return it (trimmed).
+ */
+ protected String readChecksumFile( Path checksumFile )
+ throws Exception
+ {
+ FileReader freader = null;
+ BufferedReader buf = null;
+
+ try
+ {
+ freader = new FileReader( checksumFile.toFile() );
+ buf = new BufferedReader( freader );
+ return buf.readLine();
+ }
+ finally
+ {
+ if ( buf != null )
+ {
+ buf.close();
+ }
+
+ if ( freader != null )
+ {
+ freader.close();
+ }
+ }
+ }
+
+ protected void saveConnector( String sourceRepoId, String targetRepoId, boolean disabled )
+ {
+ saveConnector( sourceRepoId, targetRepoId, ChecksumPolicy.IGNORE, ReleasesPolicy.ALWAYS, SnapshotsPolicy.ALWAYS,
+ CachedFailuresPolicy.NO, disabled );
+ }
+
+ protected void saveConnector( String sourceRepoId, String targetRepoId, String checksumPolicy, String releasePolicy,
+ String snapshotPolicy, String cacheFailuresPolicy, boolean disabled )
+ {
+ saveConnector( sourceRepoId, targetRepoId, checksumPolicy, releasePolicy, snapshotPolicy, cacheFailuresPolicy,
+ PropagateErrorsDownloadPolicy.QUEUE, disabled );
+ }
+
+ protected void saveConnector( String sourceRepoId, String targetRepoId, String checksumPolicy, String releasePolicy,
+ String snapshotPolicy, String cacheFailuresPolicy, String errorPolicy,
+ boolean disabled )
+ {
+ saveConnector( sourceRepoId, targetRepoId, checksumPolicy, releasePolicy, snapshotPolicy, cacheFailuresPolicy,
+ errorPolicy, PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT, disabled );
+ }
+
+ protected void saveConnector( String sourceRepoId, String targetRepoId, String checksumPolicy, String releasePolicy,
+ String snapshotPolicy, String cacheFailuresPolicy, String errorPolicy,
+ String errorOnUpdatePolicy, boolean disabled )
+ {
+ ProxyConnectorConfiguration connectorConfig = new ProxyConnectorConfiguration();
+ connectorConfig.setSourceRepoId( sourceRepoId );
+ connectorConfig.setTargetRepoId( targetRepoId );
+ connectorConfig.setProxyId(sourceRepoId);
+ connectorConfig.addPolicy( ProxyConnectorConfiguration.POLICY_CHECKSUM, checksumPolicy );
+ connectorConfig.addPolicy( ProxyConnectorConfiguration.POLICY_RELEASES, releasePolicy );
+ connectorConfig.addPolicy( ProxyConnectorConfiguration.POLICY_SNAPSHOTS, snapshotPolicy );
+ connectorConfig.addPolicy( ProxyConnectorConfiguration.POLICY_CACHE_FAILURES, cacheFailuresPolicy );
+ connectorConfig.addPolicy( ProxyConnectorConfiguration.POLICY_PROPAGATE_ERRORS, errorPolicy );
+ connectorConfig.addPolicy( ProxyConnectorConfiguration.POLICY_PROPAGATE_ERRORS_ON_UPDATE, errorOnUpdatePolicy );
+ connectorConfig.setDisabled( disabled );
+
+ int count = config.getConfiguration().getProxyConnectors().size();
+ config.getConfiguration().addProxyConnector( connectorConfig );
+
+ // Proper Triggering ...
+ String prefix = "proxyConnectors.proxyConnector(" + count + ")";
+ config.triggerChange( prefix + ".sourceRepoId", connectorConfig.getSourceRepoId() );
+ config.triggerChange( prefix + ".targetRepoId", connectorConfig.getTargetRepoId() );
+ config.triggerChange( prefix + ".proxyId", connectorConfig.getProxyId() );
+ config.triggerChange( prefix + ".policies.releases", connectorConfig.getPolicy( "releases", "" ) );
+ config.triggerChange( prefix + ".policies.checksum", connectorConfig.getPolicy( "checksum", "" ) );
+ config.triggerChange( prefix + ".policies.snapshots", connectorConfig.getPolicy( "snapshots", "" ) );
+ config.triggerChange( prefix + ".policies.cache-failures", connectorConfig.getPolicy( "cache-failures", "" ) );
+ config.triggerChange( prefix + ".policies.propagate-errors",
+ connectorConfig.getPolicy( "propagate-errors", "" ) );
+ config.triggerChange( prefix + ".policies.propagate-errors-on-update",
+ connectorConfig.getPolicy( "propagate-errors-on-update", "" ) );
+ }
+
+ protected void saveManagedRepositoryConfig( String id, String name, String path, String layout )
+ {
+ ManagedRepositoryConfiguration repoConfig = new ManagedRepositoryConfiguration();
+
+ repoConfig.setId( id );
+ repoConfig.setName( name );
+ repoConfig.setLayout( layout );
+
+ repoConfig.setLocation( path );
+
+ int count = config.getConfiguration().getManagedRepositories().size();
+ config.getConfiguration().addManagedRepository( repoConfig );
+
+ String prefix = "managedRepositories.managedRepository(" + count + ")";
+ config.triggerChange( prefix + ".id", repoConfig.getId() );
+ config.triggerChange( prefix + ".name", repoConfig.getName() );
+ config.triggerChange( prefix + ".location", repoConfig.getLocation() );
+ config.triggerChange( prefix + ".layout", repoConfig.getLayout() );
+ }
+
+ protected void saveRemoteRepositoryConfig( String id, String name, String url, String layout )
+ {
+ RemoteRepositoryConfiguration repoConfig = new RemoteRepositoryConfiguration();
+
+ repoConfig.setId( id );
+ repoConfig.setName( name );
+ repoConfig.setLayout( layout );
+ repoConfig.setUrl( url );
+
+ int count = config.getConfiguration().getRemoteRepositories().size();
+ config.getConfiguration().addRemoteRepository( repoConfig );
+
+ String prefix = "remoteRepositories.remoteRepository(" + count + ")";
+ config.triggerChange( prefix + ".id", repoConfig.getId() );
+ config.triggerChange( prefix + ".name", repoConfig.getName() );
+ config.triggerChange( prefix + ".url", repoConfig.getUrl() );
+ config.triggerChange( prefix + ".layout", repoConfig.getLayout() );
+ repositoryRegistry.reload();
+ }
+
+ protected Path saveTargetedRepositoryConfig( String id, String originalPath, String targetPath, String layout )
+ throws IOException
+ {
+ Path repoLocation = Paths.get( targetPath );
+ org.apache.archiva.common.utils.FileUtils.deleteDirectory( repoLocation );
+ copyDirectoryStructure( Paths.get(originalPath) , repoLocation );
+
+ saveRemoteRepositoryConfig( id, "Target Repo-" + id, targetPath, layout );
+
+ return repoLocation;
+ }
+
+
+ /**
+ * Copy the specified resource directory from the src/test/repository/managed/ to
+ * the testable directory under target/test-repository/managed/${testName}/
+ *
+ * @param resourcePath
+ * @throws IOException
+ */
+ protected void setupTestableManagedRepository( String resourcePath )
+ throws IOException
+ {
+ String resourceDir = resourcePath;
+
+ if ( !resourcePath.endsWith( "/" ) )
+ {
+ int idx = resourcePath.lastIndexOf( '/' );
+ resourceDir = resourcePath.substring( 0, idx );
+ }
+
+ Path sourceRepoDir = Paths.get( REPOPATH_DEFAULT_MANAGED );
+ Path sourceDir = sourceRepoDir.resolve(resourceDir );
+
+ Path destRepoDir = managedDefaultDir;
+ Path destDir = destRepoDir.resolve(resourceDir );
+
+ // Cleanout destination dirs.
+ if ( Files.exists(destDir))
+ {
+ org.apache.archiva.common.utils.FileUtils.deleteDirectory( destDir );
+ }
+
+ // Make the destination dir.
+ Files.createDirectories(destDir);
+
+ // Test the source dir.
+ if ( !Files.exists(sourceDir) )
+ {
+ // This is just a warning.
+ log.error( "[WARN] Skipping setup of testable managed repository, source dir does not exist: {}", //
+ sourceDir );
+ }
+ else
+ {
+
+ // Test that the source is a dir.
+ if ( !Files.isDirectory( sourceDir) )
+ {
+ fail( "Unable to setup testable managed repository, source is not a directory: " + sourceDir );
+ }
+
+ // Copy directory structure.
+ copyDirectoryStructure( sourceDir, destDir );
+ }
+ }
+
+ protected void setManagedNewerThanRemote( Path managedFile, Path remoteFile )
+ {
+ setManagedNewerThanRemote( managedFile, remoteFile, 55000 );
+ }
+
+ protected void setManagedNewerThanRemote( Path managedFile, Path remoteFile, long time )
+ {
+ assertTrue( "Managed File should exist: ", Files.exists(managedFile) );
+ assertTrue( "Remote File should exist: ", Files.exists(remoteFile) );
+
+ try
+ {
+ Files.setLastModifiedTime( managedFile,
+ FileTime.from(Files.getLastModifiedTime( remoteFile ).toMillis() + time, TimeUnit.MILLISECONDS ));
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace( );
+ }
+
+ try
+ {
+ assertTrue( Files.getLastModifiedTime( managedFile).compareTo( Files.getLastModifiedTime( remoteFile )) > 0);
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace( );
+ }
+ }
+
+ protected void setManagedOlderThanRemote( Path managedFile, Path remoteFile )
+ {
+ setManagedOlderThanRemote( managedFile, remoteFile, 55000 );
+ }
+
+ protected void setManagedOlderThanRemote( Path managedFile, Path remoteFile, long time )
+ {
+ assertTrue( "Managed File should exist: ", Files.exists(managedFile) );
+ assertTrue( "Remote File should exist: ", Files.exists(remoteFile) );
+
+ try
+ {
+ Files.setLastModifiedTime( managedFile,
+ FileTime.from(Files.getLastModifiedTime( remoteFile ).toMillis() - time, TimeUnit.MILLISECONDS ));
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace( );
+ }
+
+ try
+ {
+ assertTrue( Files.getLastModifiedTime( managedFile ).compareTo(Files.getLastModifiedTime( remoteFile )) < 0 );
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace( );
+ }
+
+ }
+
+ protected void assertNotModified( Path file, long expectedModificationTime )
+ {
+ try
+ {
+ assertEquals( "File <" + file.toAbsolutePath() + "> not have been modified.", expectedModificationTime,
+ Files.getLastModifiedTime( file ).toMillis());
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace( );
+ }
+ }
+
+
+ protected void assertNotExistsInManagedDefaultRepo( Path testFile )
+ throws Exception
+ {
+ Path managedDefaultPath = managedDefaultDir;
+
+ assertTrue( "Unit Test Failure: File <" + testFile
+ + "> should be have been defined within the managed default path of <" + managedDefaultPath
+ + ">", testFile.startsWith( managedDefaultPath ) );
+
+ assertFalse( "File < " + testFile + "> should not exist in managed default repository.", Files.exists(testFile) );
+ }
+
+ protected static Date getFutureDate()
+ throws ParseException
+ {
+ Calendar cal = Calendar.getInstance();
+ cal.add( Calendar.YEAR, 1 );
+ return cal.getTime();
+ }
+
+ protected static Date getPastDate()
+ throws ParseException
+ {
+ return new SimpleDateFormat( "yyyy-MM-dd", Locale.US ).parse( "2000-01-01" );
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/CacheFailuresTransferTest.java b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/CacheFailuresTransferTest.java
new file mode 100644
index 000000000..0061fa732
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/CacheFailuresTransferTest.java
@@ -0,0 +1,185 @@
+package org.apache.archiva.proxy;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.common.utils.PathUtil;
+import org.apache.archiva.model.ArtifactReference;
+import org.apache.archiva.policies.CachedFailuresPolicy;
+import org.apache.archiva.policies.ChecksumPolicy;
+import org.apache.archiva.policies.ReleasesPolicy;
+import org.apache.archiva.policies.SnapshotsPolicy;
+import org.apache.archiva.policies.urlcache.UrlFailureCache;
+import org.apache.maven.wagon.ResourceDoesNotExistException;
+import org.easymock.EasyMock;
+import org.junit.Test;
+
+import javax.inject.Inject;
+import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+
+/**
+ * CacheFailuresTransferTest
+ *
+ *
+ */
+public class CacheFailuresTransferTest
+ extends AbstractProxyTestCase
+{
+ // TODO: test some hard failures (eg TransferFailedException)
+ // TODO: test the various combinations of fetchFrom* (note: need only test when caching is enabled)
+
+ @Inject
+ UrlFailureCache urlFailureCache;
+
+ @Test
+ public void testGetWithCacheFailuresOn()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar";
+ Path expectedFile = managedDefaultDir.resolve( path );
+ setupTestableManagedRepository( path );
+
+ assertNotExistsInManagedDefaultRepo( expectedFile );
+
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ // Configure Repository (usually done within archiva.xml configuration)
+ saveRemoteRepositoryConfig( "badproxied1", "Bad Proxied 1", "test://bad.machine.com/repo/", "default" );
+ saveRemoteRepositoryConfig( "badproxied2", "Bad Proxied 2", "test://bad.machine.com/anotherrepo/", "default" );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "badproxied1", ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.YES, false );
+ saveConnector( ID_DEFAULT_MANAGED, "badproxied2", ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.YES, false );
+
+ wagonMock.get( EasyMock.eq( path ), EasyMock.anyObject( File.class ));
+
+ EasyMock.expectLastCall().andThrow( new ResourceDoesNotExistException( "resource does not exist." ) ).times( 2 );
+
+
+ wagonMockControl.replay();
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ wagonMockControl.verify();
+
+ // Second attempt to download same artifact use cache
+ wagonMockControl.reset();
+ wagonMockControl.replay();
+ downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+ wagonMockControl.verify();
+
+ assertNotDownloaded( downloadedFile);
+ assertNoTempFiles( expectedFile );
+ }
+
+ @Test
+ public void testGetWithCacheFailuresOff()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar";
+ Path expectedFile = managedDefaultDir.resolve( path );
+ setupTestableManagedRepository( path );
+
+ assertNotExistsInManagedDefaultRepo( expectedFile );
+
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ // Configure Repository (usually done within archiva.xml configuration)
+ saveRemoteRepositoryConfig( "badproxied1", "Bad Proxied 1", "test://bad.machine.com/repo/", "default" );
+ saveRemoteRepositoryConfig( "badproxied2", "Bad Proxied 2", "test://bad.machine.com/anotherrepo/", "default" );
+
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "badproxied1", ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+ saveConnector( ID_DEFAULT_MANAGED, "badproxied2", ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ wagonMock.get( EasyMock.eq( path ), EasyMock.anyObject( File.class ));
+ EasyMock.expectLastCall().andThrow( new ResourceDoesNotExistException( "resource does not exist." ) ).times( 2 );
+
+ wagonMockControl.replay();
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ wagonMockControl.verify();
+
+ // Second attempt to download same artifact DOES NOT use cache
+ wagonMockControl.reset();
+
+ wagonMock.get( EasyMock.eq( path ), EasyMock.anyObject( File.class ));
+ EasyMock.expectLastCall().andThrow( new ResourceDoesNotExistException( "resource does not exist." ) ).times( 2 );
+
+ wagonMockControl.replay();
+
+ downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ wagonMockControl.verify();
+
+ assertNotDownloaded( downloadedFile );
+ assertNoTempFiles( expectedFile );
+ }
+
+ @Test
+ public void testGetWhenInBothProxiedButFirstCacheFailure()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar";
+ setupTestableManagedRepository( path );
+ Path expectedFile = managedDefaultDir.resolve(path );
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ Files.deleteIfExists(expectedFile);
+ assertFalse( Files.exists(expectedFile) );
+
+ String url = PathUtil.toUrl( REPOPATH_PROXIED1 + "/" + path );
+
+ // Intentionally set failure on url in proxied1 (for test)
+ UrlFailureCache failurlCache = lookupUrlFailureCache();
+ failurlCache.cacheFailure( url );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.YES, false );
+ saveConnector( ID_DEFAULT_MANAGED, "proxied2", ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.YES, false );
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ // Validate that file actually came from proxied2 (as intended).
+ Path proxied2File = Paths.get( REPOPATH_PROXIED2, path );
+ assertFileEquals( expectedFile, downloadedFile, proxied2File );
+ assertNoTempFiles( expectedFile );
+ }
+
+ protected UrlFailureCache lookupUrlFailureCache()
+ throws Exception
+ {
+ assertNotNull( "URL Failure Cache cannot be null.", urlFailureCache );
+ return urlFailureCache;
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/ChecksumTransferTest.java b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/ChecksumTransferTest.java
new file mode 100644
index 000000000..e9ade0479
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/ChecksumTransferTest.java
@@ -0,0 +1,555 @@
+package org.apache.archiva.proxy;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.common.utils.FileUtils;
+import org.apache.archiva.model.ArtifactReference;
+import org.apache.archiva.policies.CachedFailuresPolicy;
+import org.apache.archiva.policies.ChecksumPolicy;
+import org.apache.archiva.policies.ReleasesPolicy;
+import org.apache.archiva.policies.SnapshotsPolicy;
+import org.apache.maven.wagon.ResourceDoesNotExistException;
+import org.easymock.EasyMock;
+import org.junit.Test;
+
+import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+
+/**
+ * ChecksumTransferTest
+ *
+ *
+ */
+public class ChecksumTransferTest
+ extends AbstractProxyTestCase
+{
+ @Test
+ public void testGetChecksumWhenConnectorIsDisabled()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-checksum-both-right/1.0/get-checksum-both-right-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve( path );
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ org.apache.archiva.common.utils.FileUtils.deleteDirectory( expectedFile.getParent() );
+ assertFalse( Files.exists(expectedFile) );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.IGNORE, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, true );
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ assertNull( downloadedFile );
+ }
+
+ @Test
+ public void testGetChecksumBothCorrect()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-checksum-both-right/1.0/get-checksum-both-right-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve( path );
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ org.apache.archiva.common.utils.FileUtils.deleteDirectory( expectedFile.getParent() );
+ assertFalse( Files.exists(expectedFile) );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.IGNORE, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ Path proxied1File = Paths.get( REPOPATH_PROXIED1, path );
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ assertNoTempFiles( expectedFile );
+ assertChecksums( expectedFile, "066d76e459f7782c312c31e8a11b3c0f1e3e43a7 *get-checksum-both-right-1.0.jar",
+ "e58f30c6a150a2e843552438d18e15cb *get-checksum-both-right-1.0.jar" );
+ }
+
+ @Test
+ public void testGetChecksumCorrectSha1NoMd5()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-checksum-sha1-only/1.0/get-checksum-sha1-only-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve( path );
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ FileUtils.deleteDirectory( expectedFile.getParent() );
+ assertFalse( Files.exists(expectedFile) );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.IGNORE, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ Path proxied1File = Paths.get( REPOPATH_PROXIED1, path );
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ assertNoTempFiles( expectedFile );
+ assertChecksums( expectedFile, "748a3a013bf5eacf2bbb40a2ac7d37889b728837 *get-checksum-sha1-only-1.0.jar",
+ null );
+ }
+
+ @Test
+ public void testGetChecksumNoSha1CorrectMd5()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-checksum-md5-only/1.0/get-checksum-md5-only-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve( path );
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ FileUtils.deleteDirectory( expectedFile.getParent() );
+ assertFalse( Files.exists(expectedFile) );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.IGNORE, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ Path proxied1File = Paths.get( REPOPATH_PROXIED1, path );
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ assertNoTempFiles( expectedFile );
+ assertChecksums( expectedFile, null, "f3af5201bf8da801da37db8842846e1c *get-checksum-md5-only-1.0.jar" );
+ }
+
+ @Test
+ public void testGetWithNoChecksumsUsingIgnoredSetting()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve( path );
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ FileUtils.deleteDirectory( expectedFile.getParent() );
+ assertFalse( Files.exists(expectedFile) );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.IGNORE, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ Path proxied1File = Paths.get( REPOPATH_PROXIED1, path );
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ assertNoTempFiles( expectedFile );
+ assertChecksums( expectedFile, null, null );
+ }
+
+ @Test
+ public void testGetChecksumBadSha1BadMd5IgnoredSetting()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-checksum-both-bad/1.0/get-checksum-both-bad-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve( path );
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ FileUtils.deleteDirectory( expectedFile.getParent() );
+ assertFalse( Files.exists(expectedFile) );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.IGNORE, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ Path proxied1File = Paths.get( REPOPATH_PROXIED1, path );
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ assertNoTempFiles( expectedFile );
+ assertChecksums( expectedFile, "invalid checksum file", "invalid checksum file" );
+ }
+
+ @Test
+ public void testGetChecksumBadSha1BadMd5FailSetting()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-checksum-both-bad/1.0/get-checksum-both-bad-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve( path );
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ FileUtils.deleteDirectory( expectedFile.getParent() );
+ assertFalse( Files.exists(expectedFile) );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.FAIL, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ assertNotDownloaded( downloadedFile );
+ assertChecksums( expectedFile, null, null );
+ }
+
+ @Test
+ public void testGetChecksumBadSha1BadMd5FixSetting()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-checksum-both-bad/1.0/get-checksum-both-bad-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve( path );
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ FileUtils.deleteDirectory( expectedFile.getParent() );
+ assertFalse( Files.exists(expectedFile) );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ Path proxied1File = Paths.get( REPOPATH_PROXIED1, path );
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ assertNoTempFiles( expectedFile );
+ assertChecksums( expectedFile, "4ec20a12dc91557330bd0b39d1805be5e329ae56 get-checksum-both-bad-1.0.jar",
+ "a292491a35925465e693a44809a078b5 get-checksum-both-bad-1.0.jar" );
+ }
+
+ @Test
+ public void testGetChecksumCorrectSha1BadMd5UsingFailSetting()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-checksum-sha1-bad-md5/1.0/get-checksum-sha1-bad-md5-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ FileUtils.deleteDirectory( expectedFile.getParent() );
+ assertFalse( Files.exists(expectedFile) );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.FAIL, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ assertNotDownloaded( downloadedFile );
+ assertChecksums( expectedFile, null, null );
+ }
+
+ @Test
+ public void testGetChecksumNoSha1CorrectMd5UsingFailSetting()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-checksum-md5-only/1.0/get-checksum-md5-only-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ FileUtils.deleteDirectory( expectedFile.getParent() );
+ assertFalse( Files.exists(expectedFile) );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.FAIL, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ // This is a success situation. No SHA1 with a Good MD5.
+ Path proxied1File = Paths.get(REPOPATH_PROXIED1, path);
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ assertNoTempFiles( expectedFile );
+ assertChecksums( expectedFile, null, "f3af5201bf8da801da37db8842846e1c *get-checksum-md5-only-1.0.jar" );
+ }
+
+ @Test
+ public void testGetWithNoChecksumsUsingFailSetting()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ FileUtils.deleteDirectory( expectedFile.getParent() );
+ assertFalse( Files.exists(expectedFile) );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.FAIL, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ assertNotDownloaded( downloadedFile );
+ assertChecksums( expectedFile, null, null );
+ }
+
+ @Test
+ public void testGetChecksumCorrectSha1BadMd5UsingIgnoredSetting()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-checksum-sha1-bad-md5/1.0/get-checksum-sha1-bad-md5-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ FileUtils.deleteDirectory( expectedFile.getParent() );
+ assertFalse( Files.exists(expectedFile) );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.IGNORE, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ Path proxied1File = Paths.get(REPOPATH_PROXIED1, path);
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ assertNoTempFiles( expectedFile );
+ assertChecksums( expectedFile, "3dd1a3a57b807d3ef3fbc6013d926c891cbb8670 *get-checksum-sha1-bad-md5-1.0.jar",
+ "invalid checksum file" );
+ }
+
+ @Test
+ public void testGetChecksumCorrectSha1BadMd5UsingFixSetting()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-checksum-sha1-bad-md5/1.0/get-checksum-sha1-bad-md5-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ FileUtils.deleteDirectory( expectedFile.getParent() );
+ assertFalse( Files.exists(expectedFile) );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ Path proxied1File = Paths.get(REPOPATH_PROXIED1, path);
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ assertNoTempFiles( expectedFile );
+ assertChecksums( expectedFile, "3dd1a3a57b807d3ef3fbc6013d926c891cbb8670 *get-checksum-sha1-bad-md5-1.0.jar",
+ "c35f3b76268b73a4ba617f6f275c49ab get-checksum-sha1-bad-md5-1.0.jar" );
+ }
+
+ @Test
+ public void testGetChecksumNoSha1CorrectMd5UsingFixSetting()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-checksum-md5-only/1.0/get-checksum-md5-only-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ FileUtils.deleteDirectory( expectedFile.getParent() );
+ assertFalse( Files.exists(expectedFile) );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ Path proxied1File = Paths.get(REPOPATH_PROXIED1, path);
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ assertNoTempFiles( expectedFile );
+ assertChecksums( expectedFile, "71f7dc3f72053a3f2d9fdd6fef9db055ef957ffb get-checksum-md5-only-1.0.jar",
+ "f3af5201bf8da801da37db8842846e1c *get-checksum-md5-only-1.0.jar" );
+ }
+
+ @Test
+ public void testGetWithNoChecksumsUsingFixSetting()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ FileUtils.deleteDirectory( expectedFile.getParent() );
+ assertFalse( Files.exists(expectedFile) );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ Path proxied1File = Paths.get(REPOPATH_PROXIED1, path);
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ assertNoTempFiles( expectedFile );
+ assertChecksums( expectedFile, "1f12821c5e43e1a0b76b9564a6ddb0548ccb9486 get-default-layout-1.0.jar",
+ "3f7341545f21226b6f49a3c2704cb9be get-default-layout-1.0.jar" );
+ }
+
+ @Test
+ public void testGetChecksumNotFoundOnRemote()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-checksum-sha1-only/1.0/get-checksum-sha1-only-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve( path );
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ FileUtils.deleteDirectory( expectedFile.getParent() );
+ assertFalse( Files.exists(expectedFile.getParent()) );
+ assertFalse( Files.exists(expectedFile) );
+
+ saveRemoteRepositoryConfig( "badproxied", "Bad Proxied", "test://bad.machine.com/repo/", "default" );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "badproxied", ChecksumPolicy.IGNORE, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ wagonMock.get( EasyMock.eq( path ), EasyMock.anyObject( File.class ));
+ EasyMock.expectLastCall().once();
+
+ wagonMock.get( EasyMock.eq( path + ".sha1" ), EasyMock.anyObject( File.class ));
+ EasyMock.expectLastCall().once();
+
+ wagonMock.get( EasyMock.eq( path + ".md5" ), EasyMock.anyObject( File.class ));
+ EasyMock.expectLastCall().andThrow( new ResourceDoesNotExistException( "Resource does not exist." ) ).once();
+
+ wagonMockControl.replay();
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ wagonMockControl.verify();
+
+ // Do what the mock doesn't do.
+ Path proxyPath = Paths.get( REPOPATH_PROXIED1, path ).toAbsolutePath();
+ Path localPath = managedDefaultDir.resolve( path ).toAbsolutePath();
+ Files.copy( proxyPath, localPath, StandardCopyOption.REPLACE_EXISTING);
+ Files.copy( proxyPath.resolveSibling( proxyPath.getFileName() + ".sha1" ),
+ localPath.resolveSibling( localPath.getFileName() + ".sha1" ), StandardCopyOption.REPLACE_EXISTING );
+
+ // Test results.
+ Path proxied1File = Paths.get( REPOPATH_PROXIED1, path );
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ assertNoTempFiles( expectedFile );
+ assertChecksums( expectedFile, "748a3a013bf5eacf2bbb40a2ac7d37889b728837 *get-checksum-sha1-only-1.0.jar",
+ null );
+ }
+
+ @Test
+ public void testGetAlwaysBadChecksumPresentLocallyAbsentRemoteUsingIgnoredSetting()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve( path );
+ Path remoteFile = Paths.get( REPOPATH_PROXIED1, path );
+
+ setManagedOlderThanRemote( expectedFile, remoteFile );
+
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.IGNORE, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ Path proxied1File = Paths.get( REPOPATH_PROXIED1, path );
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ assertNoTempFiles( expectedFile );
+ // There are no hashcodes on the proxy side to download, hence the local ones should remain invalid.
+ assertChecksums( expectedFile, "invalid checksum file", "invalid checksum file" );
+ }
+
+ @Test
+ public void testGetAlwaysBadChecksumPresentLocallyAbsentRemoteUsingFailSetting()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve( path );
+ Path remoteFile = Paths.get( REPOPATH_PROXIED1, path );
+
+ setManagedOlderThanRemote( expectedFile, remoteFile );
+
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FAIL, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ assertNotDownloaded( downloadedFile );
+ assertNoTempFiles( expectedFile );
+ // There are no hashcodes on the proxy side to download.
+ // The FAIL policy will delete the checksums as bad.
+
+ assertChecksums( expectedFile, "invalid checksum file", "invalid checksum file" );
+ }
+
+ @Test
+ public void testGetAlwaysBadChecksumPresentLocallyAbsentRemoteUsingFixSetting()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+ Path remoteFile = Paths.get(REPOPATH_PROXIED1, path);
+
+ setManagedOlderThanRemote( expectedFile, remoteFile );
+
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ Path proxied1File = Paths.get(REPOPATH_PROXIED1, path);
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ assertNoTempFiles( expectedFile );
+ assertChecksums( expectedFile, "96a08dc80a108cba8efd3b20aec91b32a0b2cbd4 get-bad-local-checksum-1.0.jar",
+ "46fdd6ca55bf1d7a7eb0c858f41e0ccd get-bad-local-checksum-1.0.jar" );
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/ErrorHandlingTest.java b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/ErrorHandlingTest.java
new file mode 100644
index 000000000..cef7501b4
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/ErrorHandlingTest.java
@@ -0,0 +1,661 @@
+package org.apache.archiva.proxy;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.policies.CachedFailuresPolicy;
+import org.apache.archiva.policies.ChecksumPolicy;
+import org.apache.archiva.policies.PropagateErrorsDownloadPolicy;
+import org.apache.archiva.policies.PropagateErrorsOnUpdateDownloadPolicy;
+import org.apache.archiva.policies.ProxyDownloadException;
+import org.apache.archiva.policies.ReleasesPolicy;
+import org.apache.archiva.policies.SnapshotsPolicy;
+import org.apache.archiva.repository.LayoutException;
+import org.apache.maven.wagon.ResourceDoesNotExistException;
+import org.apache.maven.wagon.TransferFailedException;
+import org.apache.maven.wagon.authorization.AuthorizationException;
+import org.easymock.EasyMock;
+import org.junit.Test;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import static org.junit.Assert.*;
+
+/**
+ * ErrorHandlingTest
+ *
+ *
+ */
+public class ErrorHandlingTest
+ extends AbstractProxyTestCase
+{
+ private static final String PATH_IN_BOTH_REMOTES_NOT_LOCAL =
+ "org/apache/maven/test/get-in-both-proxies/1.0/get-in-both-proxies-1.0.jar";
+
+ private static final String PATH_IN_BOTH_REMOTES_AND_LOCAL =
+ "org/apache/maven/test/get-on-multiple-repos/1.0/get-on-multiple-repos-1.0.pom";
+
+ private static final String ID_MOCKED_PROXIED1 = "badproxied1";
+
+ private static final String NAME_MOCKED_PROXIED1 = "Bad Proxied 1";
+
+ private static final String ID_MOCKED_PROXIED2 = "badproxied2";
+
+ private static final String NAME_MOCKED_PROXIED2 = "Bad Proxied 2";
+
+ @Test
+ public void testPropagateErrorImmediatelyWithErrorThenSuccess()
+ throws Exception
+ {
+ String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
+ Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP );
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, false );
+
+ simulateGetError( path, expectedFile, createTransferException() );
+
+ confirmSingleFailure( path, ID_MOCKED_PROXIED1 );
+ }
+
+ @Test
+ public void testPropagateErrorImmediatelyWithNotFoundThenError()
+ throws Exception
+ {
+ String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
+ Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP );
+ createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.STOP );
+
+ simulateGetError( path, expectedFile, createResourceNotFoundException() );
+
+ simulateGetError( path, expectedFile, createTransferException() );
+
+ confirmSingleFailure( path, ID_MOCKED_PROXIED2 );
+ }
+
+ @Test
+ public void testPropagateErrorImmediatelyWithSuccessThenError()
+ throws Exception
+ {
+ String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
+ Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
+
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, false );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.STOP );
+
+ confirmSuccess( path, expectedFile, REPOPATH_PROXIED1 );
+ }
+
+ @Test
+ public void testPropagateErrorImmediatelyWithNotFoundThenSuccess()
+ throws Exception
+ {
+ String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
+ Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP );
+
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, false );
+
+ simulateGetError( path, expectedFile, createResourceNotFoundException() );
+
+ confirmSuccess( path, expectedFile, REPOPATH_PROXIED2 );
+ }
+
+ @Test
+ public void testPropagateErrorAtEndWithErrorThenSuccess()
+ throws Exception
+ {
+ String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
+ Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP );
+
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, false );
+
+ simulateGetError( path, expectedFile, createTransferException() );
+
+ confirmSingleFailure( path, ID_MOCKED_PROXIED1 );
+ }
+
+ @Test
+ public void testPropagateErrorAtEndWithSuccessThenError()
+ throws Exception
+ {
+ String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
+ Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
+
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, false );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE );
+
+ confirmSuccess( path, expectedFile, REPOPATH_PROXIED1 );
+ }
+
+ @Test
+ public void testPropagateErrorAtEndWithNotFoundThenError()
+ throws Exception
+ {
+ String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
+ Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE );
+
+ simulateGetError( path, expectedFile, createResourceNotFoundException() );
+
+ simulateGetError( path, expectedFile, createTransferException() );
+
+ confirmSingleFailure( path, ID_MOCKED_PROXIED2 );
+ }
+
+ @Test
+ public void testPropagateErrorAtEndWithErrorThenNotFound()
+ throws Exception
+ {
+ String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
+ Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE );
+
+ simulateGetError( path, expectedFile, createTransferException() );
+
+ simulateGetError( path, expectedFile, createResourceNotFoundException() );
+
+ confirmSingleFailure( path, ID_MOCKED_PROXIED1 );
+ }
+
+ @Test
+ public void testPropagateErrorAtEndWithErrorThenError()
+ throws Exception
+ {
+ String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
+ Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE );
+
+ simulateGetError( path, expectedFile, createTransferException() );
+
+ simulateGetError( path, expectedFile, createTransferException() );
+
+ confirmFailures( path, new String[]{ID_MOCKED_PROXIED1, ID_MOCKED_PROXIED2} );
+ }
+
+ @Test
+ public void testPropagateErrorAtEndWithNotFoundThenSuccess()
+ throws Exception
+ {
+ String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
+ Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE );
+
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, false );
+
+ simulateGetError( path, expectedFile, createResourceNotFoundException() );
+
+ confirmSuccess( path, expectedFile, REPOPATH_PROXIED2 );
+ }
+
+ @Test
+ public void testIgnoreErrorWithErrorThenSuccess()
+ throws Exception
+ {
+ String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
+ Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE );
+
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, false );
+
+ simulateGetError( path, expectedFile, createTransferException() );
+
+ confirmSuccess( path, expectedFile, REPOPATH_PROXIED2 );
+ }
+
+ @Test
+ public void testIgnoreErrorWithSuccessThenError()
+ throws Exception
+ {
+ String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
+ Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
+
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, false );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE );
+
+ confirmSuccess( path, expectedFile, REPOPATH_PROXIED1 );
+ }
+
+ @Test
+ public void testIgnoreErrorWithNotFoundThenError()
+ throws Exception
+ {
+ String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
+ Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE );
+
+ simulateGetError( path, expectedFile, createResourceNotFoundException() );
+
+ simulateGetError( path, expectedFile, createTransferException() );
+
+ confirmNotDownloadedNoError( path );
+ }
+
+ @Test
+ public void testIgnoreErrorWithErrorThenNotFound()
+ throws Exception
+ {
+ String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
+ Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE );
+
+ simulateGetError( path, expectedFile, createTransferException() );
+
+ simulateGetError( path, expectedFile, createResourceNotFoundException() );
+
+ confirmNotDownloadedNoError( path );
+ }
+
+ @Test
+ public void testIgnoreErrorWithErrorThenError()
+ throws Exception
+ {
+ String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
+ Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE );
+
+ simulateGetError( path, expectedFile, createTransferException() );
+
+ simulateGetError( path, expectedFile, createTransferException() );
+
+ confirmNotDownloadedNoError( path );
+ }
+
+ @Test
+ public void testPropagateOnUpdateAlwaysArtifactNotPresent()
+ throws Exception
+ {
+ String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
+ Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP,
+ PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
+ createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.STOP,
+ PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
+
+ simulateGetError( path, expectedFile, createTransferException() );
+
+ confirmSingleFailure( path, ID_MOCKED_PROXIED1 );
+ }
+
+ @Test
+ public void testPropagateOnUpdateAlwaysArtifactPresent()
+ throws Exception
+ {
+ String path = PATH_IN_BOTH_REMOTES_AND_LOCAL;
+ Path expectedFile = setupRepositoriesWithLocalFilePresent( path );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP,
+ PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
+ createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.STOP,
+ PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
+
+ simulateGetIfNewerError( path, expectedFile, createTransferException() );
+
+ confirmSingleFailure( path, ID_MOCKED_PROXIED1 );
+ }
+
+ @Test
+ public void testPropagateOnUpdateAlwaysQueueArtifactNotPresent()
+ throws Exception
+ {
+ String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
+ Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE,
+ PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
+ createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE,
+ PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
+
+ simulateGetError( path, expectedFile, createTransferException() );
+ simulateGetError( path, expectedFile, createTransferException() );
+
+ confirmFailures( path, new String[] { ID_MOCKED_PROXIED1, ID_MOCKED_PROXIED2 } );
+ }
+
+ @Test
+ public void testPropagateOnUpdateAlwaysQueueArtifactPresent()
+ throws Exception
+ {
+ String path = PATH_IN_BOTH_REMOTES_AND_LOCAL;
+ Path expectedFile = setupRepositoriesWithLocalFilePresent( path );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE,
+ PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
+ createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE,
+ PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
+
+ simulateGetIfNewerError( path, expectedFile, createTransferException() );
+ simulateGetIfNewerError( path, expectedFile, createTransferException() );
+
+ confirmFailures( path, new String[] { ID_MOCKED_PROXIED1, ID_MOCKED_PROXIED2 } );
+ }
+
+ @Test
+ public void testPropagateOnUpdateAlwaysIgnoreArtifactNotPresent()
+ throws Exception
+ {
+ String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
+ Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE,
+ PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
+ createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE,
+ PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
+
+ simulateGetError( path, expectedFile, createTransferException() );
+ simulateGetError( path, expectedFile, createTransferException() );
+
+ confirmNotDownloadedNoError( path );
+ }
+
+ @Test
+ public void testPropagateOnUpdateAlwaysIgnoreArtifactPresent()
+ throws Exception
+ {
+ String path = PATH_IN_BOTH_REMOTES_AND_LOCAL;
+ Path expectedFile = setupRepositoriesWithLocalFilePresent( path );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE,
+ PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
+ createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE,
+ PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
+
+ simulateGetIfNewerError( path, expectedFile, createTransferException() );
+ simulateGetIfNewerError( path, expectedFile, createTransferException() );
+
+ confirmNotDownloadedNoError( path );
+ assertTrue( Files.exists(expectedFile) );
+ }
+
+ @Test
+ public void testPropagateOnUpdateNotPresentArtifactNotPresent()
+ throws Exception
+ {
+ String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
+ Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP,
+ PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
+ createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.STOP,
+ PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
+
+ simulateGetError( path, expectedFile, createTransferException() );
+
+ confirmSingleFailure( path, ID_MOCKED_PROXIED1 );
+ }
+
+ @Test
+ public void testPropagateOnUpdateNotPresentArtifactPresent()
+ throws Exception
+ {
+ String path = PATH_IN_BOTH_REMOTES_AND_LOCAL;
+ Path expectedFile = setupRepositoriesWithLocalFilePresent( path );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP,
+ PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
+ createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.STOP,
+ PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
+
+ simulateGetIfNewerError( path, expectedFile, createTransferException() );
+
+ confirmNotDownloadedNoError( path );
+ assertTrue( Files.exists(expectedFile) );
+ }
+
+ @Test
+ public void testPropagateOnUpdateNotPresentQueueArtifactNotPresent()
+ throws Exception
+ {
+ String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
+ Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE,
+ PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
+ createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE,
+ PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
+
+ simulateGetError( path, expectedFile, createTransferException() );
+ simulateGetError( path, expectedFile, createTransferException() );
+
+ confirmFailures( path, new String[] { ID_MOCKED_PROXIED1, ID_MOCKED_PROXIED2 } );
+ }
+
+ @Test
+ public void testPropagateOnUpdateNotPresentQueueArtifactPresent()
+ throws Exception
+ {
+ String path = PATH_IN_BOTH_REMOTES_AND_LOCAL;
+ Path expectedFile = setupRepositoriesWithLocalFilePresent( path );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE,
+ PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
+ createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE,
+ PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
+
+ simulateGetIfNewerError( path, expectedFile, createTransferException() );
+ simulateGetIfNewerError( path, expectedFile, createTransferException() );
+
+ confirmNotDownloadedNoError( path );
+ assertTrue( Files.exists(expectedFile));
+ }
+
+ @Test
+ public void testPropagateOnUpdateNotPresentIgnoreArtifactNotPresent()
+ throws Exception
+ {
+ String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
+ Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE,
+ PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
+ createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE,
+ PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
+
+ simulateGetError( path, expectedFile, createTransferException() );
+ simulateGetError( path, expectedFile, createTransferException() );
+
+ confirmNotDownloadedNoError( path );
+ }
+
+ @Test
+ public void testPropagateOnUpdateNotPresentIgnoreArtifactPresent()
+ throws Exception
+ {
+ String path = PATH_IN_BOTH_REMOTES_AND_LOCAL;
+ Path expectedFile = setupRepositoriesWithLocalFilePresent( path );
+
+ createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE,
+ PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
+ createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE,
+ PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
+
+ simulateGetIfNewerError( path, expectedFile, createTransferException() );
+ simulateGetIfNewerError( path, expectedFile, createTransferException() );
+
+ confirmNotDownloadedNoError( path );
+ assertTrue( Files.exists(expectedFile));
+ }
+
+ // ------------------------------------------
+ // HELPER METHODS
+ // ------------------------------------------
+
+ private void createMockedProxyConnector( String id, String name, String errorPolicy )
+ {
+ saveRemoteRepositoryConfig( id, name, "test://bad.machine.com/repo/", "default" );
+ saveConnector( ID_DEFAULT_MANAGED, id, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS, SnapshotsPolicy.ALWAYS,
+ CachedFailuresPolicy.NO, errorPolicy, false );
+ }
+
+ private void createMockedProxyConnector( String id, String name, String errorPolicy, String errorOnUpdatePolicy )
+ {
+ saveRemoteRepositoryConfig( id, name, "test://bad.machine.com/repo/", "default" );
+ saveConnector( ID_DEFAULT_MANAGED, id, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS, SnapshotsPolicy.ALWAYS,
+ CachedFailuresPolicy.NO, errorPolicy, errorOnUpdatePolicy, false );
+ }
+
+ private Path setupRepositoriesWithLocalFileNotPresent( String path )
+ throws Exception
+ {
+ setupTestableManagedRepository( path );
+
+ Path file = managedDefaultDir.resolve( path );
+
+ assertNotExistsInManagedDefaultRepo( file );
+
+ return file;
+ }
+
+ private Path setupRepositoriesWithLocalFilePresent( String path )
+ throws Exception
+ {
+ setupTestableManagedRepository( path );
+
+ Path file = managedDefaultDir.resolve( path );
+
+ assertTrue( Files.exists(file) );
+
+ return file;
+ }
+
+ private void simulateGetError( String path, Path expectedFile, Exception throwable )
+ throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
+ {
+ wagonMock.get( EasyMock.eq( path ), EasyMock.anyObject( File.class ));
+ EasyMock.expectLastCall().andThrow(throwable );
+ }
+
+ private void simulateGetIfNewerError( String path, Path expectedFile, TransferFailedException exception )
+ throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException, IOException
+ {
+ wagonMock.getIfNewer( EasyMock.eq( path ), EasyMock.anyObject( File.class ), EasyMock.eq( Files.getLastModifiedTime( expectedFile ).toMillis() ));
+ EasyMock.expectLastCall().andThrow( exception );
+ }
+
+ private Path createExpectedTempFile( Path expectedFile )
+ {
+ return managedDefaultDir.resolve(expectedFile.getFileName().toString() + ".tmp" ).toAbsolutePath();
+ }
+
+ private void confirmSingleFailure( String path, String id )
+ throws LayoutException
+ {
+ confirmFailures( path, new String[]{id} );
+ }
+
+ private void confirmFailures( String path, String[] ids )
+ throws LayoutException
+ {
+ wagonMockControl.replay();
+
+ // Attempt the proxy fetch.
+ Path downloadedFile = null;
+ try
+ {
+ downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository,
+ managedDefaultRepository.toArtifactReference( path ) );
+ fail( "Proxy should not have succeeded" );
+ }
+ catch ( ProxyDownloadException e )
+ {
+ assertEquals( ids.length, e.getFailures().size() );
+ for ( String id : ids )
+ {
+ assertTrue( e.getFailures().keySet().contains( id ) );
+ }
+ }
+
+ wagonMockControl.verify();
+
+ assertNotDownloaded( downloadedFile );
+ }
+
+ private void confirmSuccess( String path, Path expectedFile, String basedir )
+ throws Exception
+ {
+ Path downloadedFile = performDownload( path );
+
+ Path proxied1File = Paths.get( basedir, path );
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ }
+
+ private void confirmNotDownloadedNoError( String path )
+ throws Exception
+ {
+ Path downloadedFile = performDownload( path );
+
+ assertNotDownloaded( downloadedFile );
+ }
+
+ private Path performDownload( String path )
+ throws ProxyDownloadException, LayoutException
+ {
+ wagonMockControl.replay();
+
+ // Attempt the proxy fetch.
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository,
+ managedDefaultRepository.toArtifactReference( path ) );
+
+ wagonMockControl.verify();
+ return downloadedFile;
+ }
+
+ private static TransferFailedException createTransferException()
+ {
+ return new TransferFailedException( "test download exception" );
+ }
+
+ private static ResourceDoesNotExistException createResourceNotFoundException()
+ {
+ return new ResourceDoesNotExistException( "test download not found" );
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/HttpProxyTransferTest.java b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/HttpProxyTransferTest.java
new file mode 100644
index 000000000..c3d7c1108
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/HttpProxyTransferTest.java
@@ -0,0 +1,251 @@
+package org.apache.archiva.proxy;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.configuration.ArchivaConfiguration;
+import org.apache.archiva.configuration.NetworkProxyConfiguration;
+import org.apache.archiva.configuration.ProxyConnectorConfiguration;
+import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
+import org.apache.archiva.model.ArtifactReference;
+import org.apache.archiva.policies.CachedFailuresPolicy;
+import org.apache.archiva.policies.ChecksumPolicy;
+import org.apache.archiva.policies.PropagateErrorsDownloadPolicy;
+import org.apache.archiva.policies.PropagateErrorsOnUpdateDownloadPolicy;
+import org.apache.archiva.policies.ReleasesPolicy;
+import org.apache.archiva.policies.SnapshotsPolicy;
+import org.apache.archiva.proxy.model.RepositoryProxyHandler;
+import org.apache.archiva.repository.*;
+import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
+import org.apache.commons.io.FileUtils;
+import org.assertj.core.api.Assertions;
+import org.eclipse.jetty.server.Handler;
+import org.eclipse.jetty.server.HttpConnectionFactory;
+import org.eclipse.jetty.server.Request;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.ServerConnector;
+import org.eclipse.jetty.server.handler.AbstractHandler;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.context.ApplicationContext;
+import org.springframework.test.context.ContextConfiguration;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import static org.junit.Assert.*;
+
+/**
+ * Integration test for connecting over a HTTP proxy.
+ *
+ *
+ */
+@RunWith( ArchivaSpringJUnit4ClassRunner.class )
+@ContextConfiguration( locations = { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml" } )
+public class HttpProxyTransferTest
+{
+ private static final String PROXY_ID = "proxy";
+
+ private static final String MANAGED_ID = "default-managed-repository";
+
+ private static final String PROXIED_ID = "proxied1";
+
+ private static final String PROXIED_BASEDIR = "src/test/repositories/proxied1";
+
+ private RepositoryProxyHandler proxyHandler;
+
+ private ArchivaConfiguration config;
+
+ private ManagedRepositoryContent managedDefaultRepository;
+
+ @Inject
+ private ApplicationContext applicationContext;
+
+ @Inject
+ private RepositoryRegistry repositoryRegistry;
+
+ private Server server;
+
+ protected ManagedRepositoryContent createRepository( String id, String name, String path, String layout )
+ throws Exception
+ {
+ ManagedRepository repo = new BasicManagedRepository(id, name, Paths.get(path));
+ repositoryRegistry.putRepository(repo);
+ return repositoryRegistry.getManagedRepository(id).getContent();
+ }
+
+ @Before
+ public void setUp()
+ throws Exception
+ {
+ proxyHandler = applicationContext.getBean( "repositoryProxyConnectors#test", RepositoryProxyHandler.class );
+
+ config = applicationContext.getBean( "archivaConfiguration#mock", ArchivaConfiguration.class );
+
+ // clear from previous tests - TODO the spring context should be initialised per test instead, or the config
+ // made a complete mock
+ config.getConfiguration().getProxyConnectors().clear();
+
+ // Setup source repository (using default layout)
+ String repoPath = "target/test-repository/managed/" + getClass().getSimpleName();
+
+ Path destRepoDir = Paths.get( repoPath );
+
+ // Cleanout destination dirs.
+ if ( Files.exists(destRepoDir))
+ {
+ FileUtils.deleteDirectory( destRepoDir.toFile() );
+ }
+
+ // Make the destination dir.
+ Files.createDirectories(destRepoDir);
+
+
+ Handler handler = new AbstractHandler()
+ {
+ @Override
+ public void handle( String s, Request request, HttpServletRequest httpServletRequest,
+ HttpServletResponse response )
+ throws IOException, ServletException
+ {
+ response.setContentType( "text/plain" );
+ response.setStatus( HttpServletResponse.SC_OK );
+ response.getWriter().print( "get-default-layout-1.0.jar\n\n" );
+ assertNotNull( request.getHeader( "Proxy-Connection" ) );
+
+ ( (Request) request ).setHandled( true );
+ }
+
+ public void handle( String target, HttpServletRequest request, HttpServletResponse response, int dispatch )
+ throws IOException, ServletException
+ {
+ response.setContentType( "text/plain" );
+ response.setStatus( HttpServletResponse.SC_OK );
+ response.getWriter().print( "get-default-layout-1.0.jar\n\n" );
+ assertNotNull( request.getHeader( "Proxy-Connection" ) );
+
+ ( (Request) request ).setHandled( true );
+ }
+ };
+
+ server = new Server( );
+ ServerConnector serverConnector = new ServerConnector( server, new HttpConnectionFactory());
+ server.addConnector( serverConnector );
+ server.setHandler( handler );
+ server.start();
+
+ int port = serverConnector.getLocalPort();
+
+ NetworkProxyConfiguration proxyConfig = new NetworkProxyConfiguration();
+ proxyConfig.setHost( "localhost" );
+ proxyConfig.setPort( port );
+ proxyConfig.setProtocol( "http" );
+ proxyConfig.setId( PROXY_ID );
+ config.getConfiguration().addNetworkProxy( proxyConfig );
+ ( (MockConfiguration) config ).triggerChange("networkProxies.networkProxy(0).host", "localhost");
+
+ // Setup target (proxied to) repository.
+ RemoteRepositoryConfiguration repoConfig = new RemoteRepositoryConfiguration();
+
+ repoConfig.setId( PROXIED_ID );
+ repoConfig.setName( "Proxied Repository 1" );
+ repoConfig.setLayout( "default" );
+ repoConfig.setUrl( "http://www.example.com/" );
+
+ config.getConfiguration().addRemoteRepository( repoConfig );
+
+ repositoryRegistry.reload();
+
+ managedDefaultRepository = createRepository(MANAGED_ID, "Default Managed Repository", repoPath, "default");
+
+ }
+
+ @After
+ public void tearDown()
+ throws Exception
+ {
+ server.stop();
+ }
+
+ @Test
+ public void testGetOverHttpProxy()
+ throws Exception
+ {
+ Assertions.assertThat( System.getProperty( "http.proxyHost", "" ) ).isEmpty();
+ Assertions.assertThat( System.getProperty( "http.proxyPort", "" ) ).isEmpty();
+
+ String path = "org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar";
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ addConnector();
+
+ Path expectedFile = Paths.get( managedDefaultRepository.getRepoRoot() ).resolve( path );
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ // Attempt the proxy fetch.
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ Path sourceFile = Paths.get( PROXIED_BASEDIR, path );
+ assertNotNull( "Expected File should not be null.", expectedFile );
+ assertNotNull( "Actual File should not be null.", downloadedFile );
+
+ assertTrue( "Check actual file exists.", Files.exists(downloadedFile));
+ assertTrue( "Check filename path is appropriate.", Files.isSameFile( expectedFile, downloadedFile));
+ assertTrue( "Check file path matches.", Files.isSameFile( expectedFile, downloadedFile));
+
+ String expectedContents = FileUtils.readFileToString( sourceFile.toFile(), Charset.defaultCharset() );
+ String actualContents = FileUtils.readFileToString( downloadedFile.toFile(), Charset.defaultCharset() );
+ assertEquals( "Check file contents.", expectedContents, actualContents );
+
+ Assertions.assertThat( System.getProperty( "http.proxyHost" , "") ).isEmpty();
+ Assertions.assertThat( System.getProperty( "http.proxyPort" , "") ).isEmpty();
+ }
+
+ private void addConnector()
+ {
+ ProxyConnectorConfiguration connectorConfig = new ProxyConnectorConfiguration();
+ connectorConfig.setProxyId( PROXY_ID );
+ connectorConfig.setSourceRepoId( MANAGED_ID );
+ connectorConfig.setTargetRepoId( PROXIED_ID );
+ connectorConfig.addPolicy( ProxyConnectorConfiguration.POLICY_CHECKSUM, ChecksumPolicy.FIX );
+ connectorConfig.addPolicy( ProxyConnectorConfiguration.POLICY_RELEASES, ReleasesPolicy.ONCE );
+ connectorConfig.addPolicy( ProxyConnectorConfiguration.POLICY_SNAPSHOTS, SnapshotsPolicy.ONCE );
+ connectorConfig.addPolicy( ProxyConnectorConfiguration.POLICY_CACHE_FAILURES, CachedFailuresPolicy.NO );
+ connectorConfig.addPolicy( ProxyConnectorConfiguration.POLICY_PROPAGATE_ERRORS,
+ PropagateErrorsDownloadPolicy.QUEUE );
+ connectorConfig.addPolicy( ProxyConnectorConfiguration.POLICY_PROPAGATE_ERRORS_ON_UPDATE,
+ PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
+
+ int count = config.getConfiguration().getProxyConnectors().size();
+ config.getConfiguration().addProxyConnector( connectorConfig );
+
+ // Proper Triggering ...
+ String prefix = "proxyConnectors.proxyConnector(" + count + ")";
+ ( (MockConfiguration) config ).triggerChange( prefix + ".sourceRepoId", connectorConfig.getSourceRepoId() );
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/ManagedDefaultTransferTest.java b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/ManagedDefaultTransferTest.java
new file mode 100644
index 000000000..017594374
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/ManagedDefaultTransferTest.java
@@ -0,0 +1,466 @@
+package org.apache.archiva.proxy;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.model.ArtifactReference;
+import org.apache.archiva.policies.CachedFailuresPolicy;
+import org.apache.archiva.policies.ChecksumPolicy;
+import org.apache.archiva.policies.ReleasesPolicy;
+import org.apache.archiva.policies.SnapshotsPolicy;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.maven.wagon.ResourceDoesNotExistException;
+import org.easymock.EasyMock;
+import org.junit.Test;
+
+import java.io.File;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.attribute.FileTime;
+import java.util.concurrent.TimeUnit;
+
+import static org.junit.Assert.*;
+
+/**
+ * ManagedDefaultTransferTest
+ */
+public class ManagedDefaultTransferTest
+ extends AbstractProxyTestCase
+{
+ @Test
+ public void testGetDefaultLayoutNotPresentConnectorOffline()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ // Ensure file isn't present first.
+ assertNotExistsInManagedDefaultRepo( expectedFile );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ONCE, SnapshotsPolicy.ONCE,
+ CachedFailuresPolicy.NO, true );
+
+ // Attempt the proxy fetch.
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+ assertNull( "File should not have been downloaded", downloadedFile );
+ }
+
+ @Test
+ public void testGetDefaultLayoutNotPresent()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ // Ensure file isn't present first.
+ assertNotExistsInManagedDefaultRepo( expectedFile );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ONCE, SnapshotsPolicy.ONCE,
+ CachedFailuresPolicy.NO, false );
+
+ // Attempt the proxy fetch.
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ Path sourceFile = Paths.get(REPOPATH_PROXIED1, path);
+ assertFileEquals( expectedFile, downloadedFile, sourceFile );
+ assertNoTempFiles( expectedFile );
+ }
+
+ @Test
+ public void testGetDefaultLayoutNotPresentPassthrough()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar.asc";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+
+ // Ensure file isn't present first.
+ assertNotExistsInManagedDefaultRepo( expectedFile );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ONCE, SnapshotsPolicy.ONCE,
+ CachedFailuresPolicy.NO, false );
+
+ // Attempt the proxy fetch.
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, path );
+
+ Path sourceFile = Paths.get(REPOPATH_PROXIED1, path);
+ assertFileEquals( expectedFile, downloadedFile, sourceFile );
+ assertFalse( Files.exists( downloadedFile.getParent().resolve(downloadedFile.getFileName() + ".sha1" )) );
+ assertFalse( Files.exists(downloadedFile.getParent().resolve(downloadedFile.getFileName() + ".md5" ) ));
+ assertFalse( Files.exists( downloadedFile.getParent().resolve(downloadedFile.getFileName() + ".asc" ) ));
+ assertNoTempFiles( expectedFile );
+ }
+
+ /**
+ * The attempt here should result in no file being transferred.
+ * <p/>
+ * The file exists locally, and the policy is ONCE.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testGetDefaultLayoutAlreadyPresentPolicyOnce()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ assertTrue( Files.exists(expectedFile) );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ONCE, SnapshotsPolicy.ONCE,
+ CachedFailuresPolicy.NO, false );
+
+ // Attempt the proxy fetch.
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ assertFileEquals( expectedFile, downloadedFile, expectedFile );
+ assertNoTempFiles( expectedFile );
+ }
+
+ /**
+ * The attempt here should result in no file being transferred.
+ * <p/>
+ * The file exists locally, and the policy is ONCE.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testGetDefaultLayoutAlreadyPresentPassthrough()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar.asc";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+ Path remoteFile = Paths.get(REPOPATH_PROXIED1, path);
+
+ assertTrue( Files.exists(expectedFile) );
+
+ // Set the managed File to be newer than local.
+ setManagedOlderThanRemote( expectedFile, remoteFile );
+ long originalModificationTime = Files.getLastModifiedTime(expectedFile).toMillis();
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ONCE, SnapshotsPolicy.ONCE,
+ CachedFailuresPolicy.NO, false );
+
+ // Attempt the proxy fetch.
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, path );
+
+ assertNotDownloaded( downloadedFile );
+ assertNotModified( expectedFile, originalModificationTime );
+ assertNoTempFiles( expectedFile );
+ }
+
+ /**
+ * <p>
+ * Request a file, that exists locally, and remotely.
+ * </p>
+ * <p>
+ * All policies are set to IGNORE.
+ * </p>
+ * <p>
+ * Managed file is newer than remote file.
+ * </p>
+ * <p>
+ * Transfer should not have occured, as managed file is newer.
+ * </p>
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testGetDefaultLayoutAlreadyPresentNewerThanRemotePolicyIgnored()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+ Path remoteFile = Paths.get(REPOPATH_PROXIED1, path);
+
+ // Set the managed File to be newer than local.
+ setManagedNewerThanRemote( expectedFile, remoteFile );
+
+ long originalModificationTime = Files.getLastModifiedTime( expectedFile).toMillis();
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ assertTrue( Files.exists(expectedFile) );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ // Attempt the proxy fetch.
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ assertNotDownloaded( downloadedFile );
+ assertNotModified( expectedFile, originalModificationTime );
+ assertNoTempFiles( expectedFile );
+ }
+
+ /**
+ * <p>
+ * Request a file, that exists locally, and remotely.
+ * </p>
+ * <p>
+ * All policies are set to IGNORE.
+ * </p>
+ * <p>
+ * Managed file is older than Remote file.
+ * </p>
+ * <p>
+ * Transfer should have occured, as managed file is older than remote.
+ * </p>
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testGetDefaultLayoutAlreadyPresentOlderThanRemotePolicyIgnored()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+ Path remoteFile = Paths.get(REPOPATH_PROXIED1, path);
+
+ // Set the managed file to be newer than remote file.
+ setManagedOlderThanRemote( expectedFile, remoteFile );
+
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ assertTrue( Files.exists(expectedFile) );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ // Attempt the proxy fetch.
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ Path proxiedFile = Paths.get(REPOPATH_PROXIED1, path);
+ assertFileEquals( expectedFile, downloadedFile, proxiedFile );
+ assertNoTempFiles( expectedFile );
+ }
+
+ /**
+ * The attempt here should result in file being transferred.
+ * <p/>
+ * The file exists locally, is over 6 years old, and the policy is DAILY.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testGetDefaultLayoutRemoteUpdate()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ assertTrue( Files.exists(expectedFile) );
+ Files.setLastModifiedTime( expectedFile, FileTime.from(getPastDate().getTime(), TimeUnit.MILLISECONDS ));
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.DAILY, SnapshotsPolicy.DAILY,
+ CachedFailuresPolicy.NO, false );
+
+ // Attempt the proxy fetch.
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ Path proxiedFile = Paths.get(REPOPATH_PROXIED1, path);
+ assertFileEquals( expectedFile, downloadedFile, proxiedFile );
+ assertNoTempFiles( expectedFile );
+ }
+
+ @Test
+ public void testGetWhenInBothProxiedRepos()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-in-both-proxies/1.0/get-in-both-proxies-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ assertNotExistsInManagedDefaultRepo( expectedFile );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, false );
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, false );
+
+ // Attempt the proxy fetch.
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ Path proxied1File = Paths.get(REPOPATH_PROXIED1, path);
+ Path proxied2File = Paths.get(REPOPATH_PROXIED2, path);
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ assertNoTempFiles( expectedFile );
+
+ // TODO: is this check even needed if it passes above?
+ String actualContents = FileUtils.readFileToString( downloadedFile.toFile(), Charset.defaultCharset() );
+ String badContents = FileUtils.readFileToString( proxied2File.toFile(), Charset.defaultCharset() );
+ assertFalse( "Downloaded file contents should not be that of proxy 2",
+ StringUtils.equals( actualContents, badContents ) );
+ }
+
+ @Test
+ public void testGetInSecondProxiedRepo()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ assertNotExistsInManagedDefaultRepo( expectedFile );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, false );
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, false );
+
+ // Attempt the proxy fetch.
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ Path proxied2File = Paths.get(REPOPATH_PROXIED2, path);
+ assertFileEquals( expectedFile, downloadedFile, proxied2File );
+ assertNoTempFiles( expectedFile );
+ }
+
+ @Test
+ public void testNotFoundInAnyProxies()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/does-not-exist/1.0/does-not-exist-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ assertNotExistsInManagedDefaultRepo( expectedFile );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, false );
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, false );
+
+ // Attempt the proxy fetch.
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ assertNull( "File returned was: " + downloadedFile + "; should have got a not found exception",
+ downloadedFile );
+ assertNoTempFiles( expectedFile );
+ }
+
+ @Test
+ public void testGetInSecondProxiedRepoFirstFails()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ assertNotExistsInManagedDefaultRepo( expectedFile );
+
+ // Configure Repository (usually done within archiva.xml configuration)
+ saveRemoteRepositoryConfig( "badproxied", "Bad Proxied", "test://bad.machine.com/repo/", "default" );
+
+ wagonMock.get( EasyMock.eq( path), EasyMock.anyObject( File.class ) );
+ EasyMock.expectLastCall().andThrow( new ResourceDoesNotExistException( "transfer failed" ) );
+ wagonMockControl.replay();
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "badproxied", false );
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, false );
+
+ // Attempt the proxy fetch.
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ wagonMockControl.verify();
+
+ Path proxied2File = Paths.get(REPOPATH_PROXIED2, path);
+ assertFileEquals( expectedFile, downloadedFile, proxied2File );
+ assertNoTempFiles( expectedFile );
+ }
+
+ @Test
+ public void testGetAllRepositoriesFail()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve( path );
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ assertNotExistsInManagedDefaultRepo( expectedFile );
+
+ // Configure Repository (usually done within archiva.xml configuration)
+ saveRemoteRepositoryConfig( "badproxied1", "Bad Proxied 1", "test://bad.machine.com/repo/", "default" );
+ saveRemoteRepositoryConfig( "badproxied2", "Bad Proxied 2", "test://dead.machine.com/repo/", "default" );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "badproxied1", false );
+ saveConnector( ID_DEFAULT_MANAGED, "badproxied2", false );
+
+ Path tmpFile = expectedFile.getParent().resolve(expectedFile.getFileName() + ".tmp" );
+
+ wagonMock.get( EasyMock.eq( path ), EasyMock.anyObject( File.class ) );
+ EasyMock.expectLastCall().andThrow( new ResourceDoesNotExistException( "Can't find resource." ) );
+
+ wagonMock.get( EasyMock.eq( path ), EasyMock.anyObject( File.class ) );
+ EasyMock.expectLastCall().andThrow( new ResourceDoesNotExistException( "Can't find resource." ) );
+
+ wagonMockControl.replay();
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ assertNotDownloaded( downloadedFile );
+
+ wagonMockControl.verify();
+ assertNoTempFiles( expectedFile );
+
+ // TODO: do not want failures to present as a not found [MRM-492]
+ // TODO: How much information on each failure should we pass back to the user vs. logging in the proxy?
+ }
+
+
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/MetadataTransferTest.java b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/MetadataTransferTest.java
new file mode 100644
index 000000000..23bfb8503
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/MetadataTransferTest.java
@@ -0,0 +1,1405 @@
+package org.apache.archiva.proxy;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.common.utils.VersionUtil;
+import org.apache.archiva.configuration.ProxyConnectorConfiguration;
+import org.apache.archiva.maven2.metadata.MavenMetadataReader;
+import org.apache.archiva.model.ArchivaRepositoryMetadata;
+import org.apache.archiva.model.Plugin;
+import org.apache.archiva.model.ProjectReference;
+import org.apache.archiva.model.SnapshotVersion;
+import org.apache.archiva.model.VersionedReference;
+import org.apache.archiva.policies.CachedFailuresPolicy;
+import org.apache.archiva.policies.ChecksumPolicy;
+import org.apache.archiva.policies.ReleasesPolicy;
+import org.apache.archiva.policies.SnapshotsPolicy;
+import org.apache.archiva.repository.metadata.MetadataTools;
+import org.apache.archiva.repository.metadata.RepositoryMetadataException;
+import org.apache.archiva.repository.metadata.RepositoryMetadataWriter;
+import org.apache.commons.lang.StringUtils;
+import org.apache.maven.wagon.TransferFailedException;
+import org.custommonkey.xmlunit.DetailedDiff;
+import org.custommonkey.xmlunit.Diff;
+import org.easymock.EasyMock;
+import org.junit.Test;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import java.io.File;
+import java.io.StringWriter;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import static org.junit.Assert.*;
+
+/**
+ * MetadataTransferTest - Tests the various fetching / merging concepts surrounding the maven-metadata.xml files
+ * present in the repository.
+ * <p/>
+ * Test Case Naming is as follows.
+ * <p/>
+ * <code>
+ * public void testGet[Release|Snapshot|Project]Metadata[Not]Proxied[Not|On]Local[Not|On|Multiple]Remote
+ * </code>
+ * <p/>
+ * <pre>
+ * Which should leave the following matrix of test cases.
+ *
+ * Metadata | Proxied | Local | Remote
+ * ----------+----------+-------+---------
+ * Release | Not | Not | n/a (1)
+ * Release | Not | On | n/a (1)
+ * Release | | Not | Not
+ * Release | | Not | On
+ * Release | | Not | Multiple
+ * Release | | On | Not
+ * Release | | On | On
+ * Release | | On | Multiple
+ * Snapshot | Not | Not | n/a (1)
+ * Snapshot | Not | On | n/a (1)
+ * Snapshot | | Not | Not
+ * Snapshot | | Not | On
+ * Snapshot | | Not | Multiple
+ * Snapshot | | On | Not
+ * Snapshot | | On | On
+ * Snapshot | | On | Multiple
+ * Project | Not | Not | n/a (1)
+ * Project | Not | On | n/a (1)
+ * Project | | Not | Not
+ * Project | | Not | On
+ * Project | | Not | Multiple
+ * Project | | On | Not
+ * Project | | On | On
+ * Project | | On | Multiple
+ *
+ * (1) If it isn't proxied, no point in having a remote.
+ * </pre>
+ *
+ *
+ */
+public class MetadataTransferTest
+ extends AbstractProxyTestCase
+{
+
+ @Inject
+ @Named(value = "metadataTools#mocked")
+ private MetadataTools metadataTools;
+
+
+ @Test
+ public void testGetProjectMetadataProxiedNotLocalOnRemoteConnectoDisabled()
+ throws Exception
+ {
+ // New project metadata that does not exist locally but exists on remote.
+ String requestedResource = "org/apache/maven/test/get-found-in-proxy/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, true );
+
+ assertResourceNotFound( requestedResource );
+ assertNoRepoMetadata( ID_PROXIED1, requestedResource );
+
+ Path expectedFile = managedDefaultDir.resolve(requestedResource);
+
+ ProjectReference metadata = createProjectReference( requestedResource );
+
+ Path downloadedFile = proxyHandler.fetchMetadataFromProxies( managedDefaultRepository,
+ managedDefaultRepository.toMetadataPath(
+ metadata ) ).getFile();
+
+ assertNull( "Should not have downloaded a file.", downloadedFile );
+ assertNoTempFiles( expectedFile );
+ }
+
+ // TODO: same test for other fetch* methods
+ @Test
+ public void testFetchFromTwoProxiesWhenFirstConnectionFails()
+ throws Exception
+ {
+ // Project metadata that does not exist locally, but has multiple versions in remote repos
+ String requestedResource = "org/apache/maven/test/get-default-layout/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ saveRemoteRepositoryConfig( "badproxied1", "Bad Proxied 1", "test://bad.machine.com/repo/", "default" );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "badproxied1", ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ assertResourceNotFound( requestedResource );
+ assertNoRepoMetadata( "badproxied1", requestedResource );
+ assertNoRepoMetadata( ID_PROXIED2, requestedResource );
+
+ // ensure that a hard failure in the first proxy connector is skipped and the second repository checked
+ Path expectedFile = managedDefaultDir.resolve(
+ metadataTools.getRepositorySpecificName( "badproxied1", requestedResource ) );
+
+ wagonMock.get( EasyMock.eq( requestedResource ), EasyMock.anyObject( File.class ));
+ EasyMock.expectLastCall().andThrow( new TransferFailedException( "can't connect" ) );
+
+
+ wagonMockControl.replay();
+
+ assertFetchProjectOrGroup( requestedResource );
+
+ wagonMockControl.verify();
+
+ assertProjectMetadataContents( requestedResource, new String[]{ "1.0.1" }, "1.0.1", "1.0.1" );
+ assertNoRepoMetadata( "badproxied1", requestedResource );
+ assertRepoProjectMetadata( ID_PROXIED2, requestedResource, new String[]{ "1.0.1" } );
+ }
+
+ /**
+ * Attempt to get the project metadata for non-existant artifact.
+ * <p/>
+ * Expected result: the maven-metadata.xml file is not created on the managed repository, nor returned
+ * to the requesting client.
+ */
+ @Test
+ public void testGetProjectMetadataNotProxiedNotLocal()
+ throws Exception
+ {
+ // The artifactId "get-default-metadata-nonexistant" does not exist (intentionally).
+ String requestedResource = "org/apache/maven/test/get-default-metadata-nonexistant/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ config.getConfiguration().setProxyConnectors( new ArrayList<ProxyConnectorConfiguration>( ) );
+
+ assertResourceNotFound( requestedResource );
+
+ // No proxy setup, nothing fetched, failure expected.
+ assertFetchProjectOrGroupFailed( requestedResource );
+
+ // No local artifactId, and no fetch, should equal no metadata file downloaded / created / updated.
+ assertResourceNotFound( requestedResource );
+ }
+
+ @Test
+ public void testGetProjectMetadataNotProxiedOnLocal()
+ throws Exception
+ {
+
+ // Project metadata that exists and has multiple versions
+ String requestedResource = "org/apache/maven/test/get-project-metadata/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ config.getConfiguration().setProxyConnectors( new ArrayList<ProxyConnectorConfiguration>( ) );
+
+ assertResourceExists( requestedResource );
+
+ // No proxy setup, nothing fetched from remote, but local exists.
+ assertFetchProjectOrGroup( requestedResource );
+
+ // Nothing fetched. Should only contain contents of what is in the repository.
+ // A metadata update is not performed in this use case. Local metadata content is only
+ // updated via the metadata updater consumer.
+ assertProjectMetadataContents( requestedResource, new String[]{ "1.0" }, null, null );
+ }
+
+ @Test
+ public void testGetProjectMetadataProxiedNotLocalMultipleRemotes()
+ throws Exception
+ {
+ // Project metadata that does not exist locally, but has multiple versions in remote repos
+ String requestedResource = "org/apache/maven/test/get-default-layout/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ assertResourceNotFound( requestedResource );
+ assertNoRepoMetadata( ID_PROXIED1, requestedResource );
+ assertNoRepoMetadata( ID_PROXIED2, requestedResource );
+
+ // Two proxies setup, metadata fetched from both remotes.
+ assertFetchProjectOrGroup( requestedResource );
+
+ // Nothing fetched. Should only contain contents of what is in the repository.
+ assertProjectMetadataContents( requestedResource, new String[]{ "1.0", "1.0.1" }, "1.0.1", "1.0.1" );
+ assertRepoProjectMetadata( ID_PROXIED1, requestedResource, new String[]{ "1.0" } );
+ assertRepoProjectMetadata( ID_PROXIED2, requestedResource, new String[]{ "1.0.1" } );
+ }
+
+ @Test
+ public void testGetProjectMetadataProxiedNotLocalNotRemote()
+ throws Exception
+ {
+ // Non-existant project metadata that does not exist locally and doesn't exist on remotes.
+ String requestedResource = "org/apache/maven/test/get-bogus-artifact/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ assertResourceNotFound( requestedResource );
+ assertNoRepoMetadata( ID_PROXIED1, requestedResource );
+ assertNoRepoMetadata( ID_PROXIED2, requestedResource );
+
+ // Two proxies setup, nothing fetched from remotes, local does not exist.
+ assertFetchProjectOrGroupFailed( requestedResource );
+
+ // Nothing fetched. Nothing should exist.
+ assertResourceNotFound( requestedResource );
+ assertNoRepoMetadata( ID_PROXIED1, requestedResource );
+ assertNoRepoMetadata( ID_PROXIED2, requestedResource );
+ }
+
+ @Test
+ public void testGetProjectMetadataProxiedNotLocalOnRemote()
+ throws Exception
+ {
+ // New project metadata that does not exist locally but exists on remote.
+ String requestedResource = "org/apache/maven/test/get-found-in-proxy/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ assertResourceNotFound( requestedResource );
+ assertNoRepoMetadata( ID_PROXIED1, requestedResource );
+
+ // One proxy setup, metadata fetched from remote, local does not exist.
+ assertFetchProjectOrGroup( requestedResource );
+
+ // Remote fetched. Local created/updated.
+ assertProjectMetadataContents( requestedResource, new String[]{ "1.0.5" }, "1.0.5", "1.0.5" );
+ assertRepoProjectMetadata( ID_PROXIED1, requestedResource, new String[]{ "1.0.5" } );
+ }
+
+ @Test
+ public void testGetProjectMetadataProxiedOnLocalMultipleRemote()
+ throws Exception
+ {
+ // Project metadata that exist locally, and has multiple versions in remote repos
+ String requestedResource = "org/apache/maven/test/get-on-multiple-repos/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ assertProjectMetadataContents( requestedResource, new String[]{ "1.0" }, null, null );
+ assertNoRepoMetadata( ID_PROXIED1, requestedResource );
+ assertNoRepoMetadata( ID_PROXIED2, requestedResource );
+
+ // Two proxies setup, metadata fetched from both remotes.
+ assertFetchProjectOrGroup( requestedResource );
+
+ // metadata fetched from both repos, and merged with local version.
+ assertProjectMetadataContents( requestedResource, new String[]{ "1.0", "1.0.1", "2.0" }, "2.0", "2.0" );
+ assertRepoProjectMetadata( ID_PROXIED1, requestedResource, new String[]{ "1.0", "2.0" } );
+ assertRepoProjectMetadata( ID_PROXIED2, requestedResource, new String[]{ "1.0", "1.0.1" } );
+ }
+
+ @Test
+ public void testGetProjectMetadataProxiedOnLocalNotRemote()
+ throws Exception
+ {
+
+ // Project metadata that exist locally, and does not exist in remote repos.
+ String requestedResource = "org/apache/maven/test/get-not-on-remotes/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+
+ config.getConfiguration().setProxyConnectors( new ArrayList<ProxyConnectorConfiguration>( ) );
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ assertProjectMetadataContents( requestedResource, new String[]{ "1.0-beta-2" }, null, null );
+ assertNoRepoMetadata( ID_PROXIED1, requestedResource );
+ assertNoRepoMetadata( ID_PROXIED2, requestedResource );
+
+ // Two proxies setup, metadata fetch from remotes fail (because they dont exist).
+ assertFetchProjectOrGroup( requestedResource );
+
+ // metadata not fetched from both repos, and local version exists.
+ // Since there was no updated metadata content from a remote/proxy, a metadata update on
+ // the local file never ran. Local only updates are performed via the metadata updater consumer.
+ assertProjectMetadataContents( requestedResource, new String[]{ "1.0-beta-2" }, null, null );
+ assertNoRepoMetadata( ID_PROXIED1, requestedResource );
+ assertNoRepoMetadata( ID_PROXIED2, requestedResource );
+ }
+
+ @Test
+ public void testGetProjectMetadataProxiedOnLocalOnRemote()
+ throws Exception
+ {
+ // Project metadata that exist locally and exists on remote.
+ String requestedResource = "org/apache/maven/test/get-on-local-on-remote/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ assertProjectMetadataContents( requestedResource, new String[]{ "1.0.8", "1.0.22" }, null, null );
+ assertNoRepoMetadata( ID_PROXIED1, requestedResource );
+
+ // One proxy setup, metadata fetched from remote, local exists.
+ assertFetchProjectOrGroup( requestedResource );
+
+ // Remote fetched. Local updated.
+ assertProjectMetadataContents( requestedResource, new String[]{ "1.0.8", "1.0.22", "2.0" }, "2.0", "2.0" );
+ assertRepoProjectMetadata( ID_PROXIED1, requestedResource, new String[]{ "1.0.22", "2.0" } );
+ }
+
+ /**
+ * A request for a release maven-metadata.xml file that does not exist locally, and the managed
+ * repository has no proxied repositories set up.
+ * <p/>
+ * Expected result: the maven-metadata.xml file is not created on the managed repository, nor returned
+ * to the requesting client.
+ */
+ @Test
+ public void testGetReleaseMetadataNotProxiedNotLocal()
+ throws Exception
+ {
+ // The artifactId "get-default-metadata-nonexistant" does not exist (intentionally).
+ String requestedResource = "org/apache/maven/test/get-default-metadata-nonexistant/1.0/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ assertNoMetadata( requestedResource );
+
+ // No proxy setup, nothing fetched, failure expected.
+ assertFetchVersionedFailed( requestedResource );
+
+ // No local artifactId, and no fetch, should equal no metadata file downloaded / created / updated.
+ assertNoMetadata( requestedResource );
+ }
+
+ /**
+ * A request for a maven-metadata.xml file that does exist locally, and the managed
+ * repository has no proxied repositories set up.
+ * <p/>
+ * Expected result: the maven-metadata.xml file is updated locally, based off of the managed repository
+ * information, and then returned to the client.
+ */
+ @Test
+ public void testGetReleaseMetadataNotProxiedOnLocal()
+ throws Exception
+ {
+ String requestedResource = "org/apache/maven/test/get-default-metadata/1.0/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ assertResourceExists( requestedResource );
+
+ assertFetchVersioned( requestedResource );
+
+ assertReleaseMetadataContents( requestedResource );
+ }
+
+ /**
+ * A request for a release maven-metadata.xml file that does not exist on the managed repository, but
+ * exists on multiple remote repositories.
+ * <p/>
+ * Expected result: the maven-metadata.xml file is downloaded from the remote into the repository specific
+ * file location on the managed repository, a merge of the contents to the requested
+ * maven-metadata.xml is performed, and then the merged maven-metadata.xml file is
+ * returned to the client.
+ */
+ @Test
+ public void testGetReleaseMetadataProxiedNotLocalMultipleRemotes()
+ throws Exception
+ {
+ String requestedResource = "org/apache/maven/test/get-default-layout/1.0/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ assertResourceNotFound( requestedResource );
+ assertNoRepoMetadata( ID_PROXIED1, requestedResource );
+ assertNoRepoMetadata( ID_PROXIED2, requestedResource );
+
+ assertFetchVersioned( requestedResource );
+
+ assertReleaseMetadataContents( requestedResource );
+ assertRepoReleaseMetadataContents( ID_PROXIED1, requestedResource );
+ assertRepoReleaseMetadataContents( ID_PROXIED2, requestedResource );
+ }
+
+ /**
+ * A request for a maven-metadata.xml file that does not exist locally, nor does it exist in a remote
+ * proxied repository.
+ * <p/>
+ * Expected result: the maven-metadata.xml file is created locally, based off of managed repository
+ * information, and then return to the client.
+ */
+ @Test
+ public void testGetReleaseMetadataProxiedNotLocalNotRemote()
+ throws Exception
+ {
+ String requestedResource = "org/apache/maven/test/get-bad-metadata/1.0/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ assertResourceNotFound( requestedResource );
+
+ assertFetchProjectOrGroupFailed( requestedResource );
+
+ assertResourceNotFound( requestedResource );
+ assertNoRepoMetadata( ID_PROXIED1, requestedResource );
+ }
+
+ /**
+ * A request for a maven-metadata.xml file that does not exist on the managed repository, but
+ * exists on 1 remote repository.
+ * <p/>
+ * Expected result: the maven-metadata.xml file is downloaded from the remote into the repository specific
+ * file location on the managed repository, a merge of the contents to the requested
+ * maven-metadata.xml is performed, and then the merged maven-metadata.xml file is
+ * returned to the client.
+ */
+ @Test
+ public void testGetReleaseMetadataProxiedNotLocalOnRemote()
+ throws Exception
+ {
+ String requestedResource = "org/apache/maven/test/get-default-layout/1.0/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ assertNoRepoMetadata( ID_PROXIED1, requestedResource );
+
+ assertFetchVersioned( requestedResource );
+
+ assertReleaseMetadataContents( requestedResource );
+ assertRepoReleaseMetadataContents( ID_PROXIED1, requestedResource );
+ }
+
+ /**
+ * A request for a maven-metadata.xml file that exists in the managed repository, but
+ * not on any remote repository.
+ * <p/>
+ * Expected result: the maven-metadata.xml file does not exist on the remote proxied repository and
+ * is not downloaded. There is no repository specific metadata file on the managed
+ * repository. The managed repository maven-metadata.xml is returned to the
+ * client as-is.
+ */
+ @Test
+ public void testGetReleaseMetadataProxiedOnLocalNotRemote()
+ throws Exception
+ {
+ String requestedResource = "org/apache/maven/test/get-not-on-remotes/1.0-beta-2/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ assertReleaseMetadataContents( requestedResource );
+
+ assertFetchVersioned( requestedResource );
+
+ assertReleaseMetadataContents( requestedResource );
+ assertNoRepoMetadata( ID_PROXIED1, requestedResource );
+ }
+
+ /**
+ * A request for a maven-metadata.xml file that exists in the managed repository, and on multiple
+ * remote repositories.
+ * <p/>
+ * Expected result: the maven-metadata.xml file on the remote proxied repository is downloaded
+ * and merged into the contents of the existing managed repository copy of
+ * the maven-metadata.xml file.
+ */
+ @Test
+ public void testGetReleaseMetadataProxiedOnLocalMultipleRemote()
+ throws Exception
+ {
+ String requestedResource = "org/apache/maven/test/get-on-multiple-repos/1.0/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ assertReleaseMetadataContents( requestedResource );
+ assertNoRepoMetadata( ID_PROXIED1, requestedResource );
+ assertNoRepoMetadata( ID_PROXIED2, requestedResource );
+
+ assertFetchVersioned( requestedResource );
+
+ assertReleaseMetadataContents( requestedResource );
+ assertRepoReleaseMetadataContents( ID_PROXIED1, requestedResource );
+ assertRepoReleaseMetadataContents( ID_PROXIED2, requestedResource );
+ }
+
+ /**
+ * A request for a maven-metadata.xml file that exists in the managed repository, and on one
+ * remote repository.
+ * <p/>
+ * Expected result: the maven-metadata.xml file on the remote proxied repository is downloaded
+ * and merged into the contents of the existing managed repository copy of
+ * the maven-metadata.xml file.
+ */
+ @Test
+ public void testGetReleaseMetadataProxiedOnLocalOnRemote()
+ throws Exception
+ {
+ String requestedResource = "org/apache/maven/test/get-on-local-on-remote/1.0.22/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ assertReleaseMetadataContents( requestedResource );
+ assertNoRepoMetadata( ID_PROXIED1, requestedResource );
+
+ assertFetchVersioned( requestedResource );
+
+ assertReleaseMetadataContents( requestedResource );
+ assertRepoReleaseMetadataContents( ID_PROXIED1, requestedResource );
+ }
+
+ @Test
+ public void testGetSnapshotMetadataNotProxiedNotLocal()
+ throws Exception
+ {
+ // The artifactId "get-default-metadata-nonexistant" does not exist (intentionally).
+ String requestedResource =
+ "org/apache/maven/test/get-default-metadata-nonexistant/1.0-SNAPSHOT/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ assertNoMetadata( requestedResource );
+
+ // No proxy setup, nothing fetched, no local file, failure expected.
+ assertFetchVersionedFailed( requestedResource );
+
+ // No local artifactId, and no fetch, should equal no metadata file downloaded / created / updated.
+ assertNoMetadata( requestedResource );
+ }
+
+ @Test
+ public void testGetSnapshotMetadataNotProxiedOnLocal()
+ throws Exception
+ {
+ // The artifactId exists locally (but not on a remote repo)
+ String requestedResource =
+ "org/apache/maven/test/get-snapshot-on-local-not-remote/2.0-alpha-2-SNAPSHOT/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ assertResourceExists( requestedResource );
+
+ // No proxy setup, nothing fetched from remote, local file exists, fetch should succeed.
+ assertFetchVersioned( requestedResource );
+
+ // Local metadata exists, should be updated to reflect the latest release.
+ assertSnapshotMetadataContents( requestedResource, "20070821", "220304", 2 );
+ }
+
+ @Test
+ public void testGetSnapshotMetadataProxiedNotLocalMultipleRemotes()
+ throws Exception
+ {
+ String requestedResource =
+ "org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ assertResourceNotFound( requestedResource );
+ assertNoRepoMetadata( ID_PROXIED1, requestedResource );
+ assertNoRepoMetadata( ID_PROXIED2, requestedResource );
+
+ // Proxying 2 repos, both have content, local file updated.
+ assertFetchVersioned( requestedResource );
+
+ assertSnapshotMetadataContents( requestedResource, "20070101", "000103", 2 );
+ assertRepoSnapshotMetadataContents( ID_PROXIED1, requestedResource, "20061227", "112101", 2 );
+ assertRepoSnapshotMetadataContents( ID_PROXIED2, requestedResource, "20070101", "000103", 2 );
+ }
+
+ @Test
+ public void testGetSnapshotMetadataProxiedNotLocalNotRemote()
+ throws Exception
+ {
+ // The artifactId "get-default-metadata-nonexistant" does not exist (intentionally).
+ String requestedResource =
+ "org/apache/maven/test/get-default-metadata-nonexistant/1.0-SNAPSHOT/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ assertNoMetadata( requestedResource );
+
+ // One proxy setup, nothing fetched, no local file, failure expected.
+ assertFetchVersionedFailed( requestedResource );
+
+ // No local artifactId, and no fetch, should equal no metadata file downloaded / created / updated.
+ assertNoMetadata( requestedResource );
+ assertNoRepoMetadata( ID_PROXIED1, requestedResource );
+ }
+
+ @Test
+ public void testGetSnapshotMetadataProxiedNotLocalOnRemote()
+ throws Exception
+ {
+ // Artifact exists only in the proxied1 location.
+ String requestedResource = "org/apache/maven/test/get-metadata-snapshot/1.0-SNAPSHOT/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ assertResourceNotFound( requestedResource );
+
+ // One proxy setup, one metadata fetched, local file created/updated.
+ assertFetchVersioned( requestedResource );
+
+ // Local artifact Id should contain latest (which in this case is from proxied download)
+ assertSnapshotMetadataContents( requestedResource, "20050831", "101112", 1 );
+ assertRepoSnapshotMetadataContents( ID_PROXIED1, requestedResource, "20050831", "101112", 1 );
+ }
+
+ @Test
+ public void testGetSnapshotMetadataProxiedOnLocalMultipleRemote()
+ throws Exception
+ {
+ String requestedResource = "org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ assertSnapshotMetadataContents( requestedResource, "20070822", "021008", 3 );
+ assertNoRepoMetadata( ID_PROXIED1, requestedResource );
+ assertNoRepoMetadata( ID_PROXIED2, requestedResource );
+
+ // Proxying 2 repos, both have content, local file updated.
+ assertFetchVersioned( requestedResource );
+
+ assertSnapshotMetadataContents( requestedResource, "20070823", "212711", 6 );
+ assertRepoSnapshotMetadataContents( ID_PROXIED1, requestedResource, "20070822", "145534", 9 );
+ assertRepoSnapshotMetadataContents( ID_PROXIED2, requestedResource, "20070823", "212711", 6 );
+ }
+
+ @Test
+ public void testGetSnapshotMetadataProxiedOnLocalNotRemote()
+ throws Exception
+ {
+ // The artifactId exists locally (but not on a remote repo)
+ String requestedResource =
+ "org/apache/maven/test/get-snapshot-on-local-not-remote/2.0-alpha-2-SNAPSHOT/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ assertResourceExists( requestedResource );
+ assertNoRepoMetadata( ID_PROXIED1, requestedResource );
+ assertNoRepoMetadata( ID_PROXIED2, requestedResource );
+
+ // two proxies setup, nothing fetched from either remote, local file exists, fetch should succeed.
+ assertFetchVersioned( requestedResource );
+
+ // Local metadata exists, repo metadatas should not exist, local file updated.
+ assertSnapshotMetadataContents( requestedResource, "20070821", "220304", 2 );
+ assertNoRepoMetadata( ID_PROXIED1, requestedResource );
+ assertNoRepoMetadata( ID_PROXIED2, requestedResource );
+ }
+
+ @Test
+ public void testGetSnapshotMetadataProxiedOnLocalOnRemote()
+ throws Exception
+ {
+ // The artifactId exists locally (but not on a remote repo)
+ String requestedResource =
+ "org/apache/maven/test/get-present-metadata-snapshot/1.0-SNAPSHOT/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ assertSnapshotMetadataContents( requestedResource, "20050831", "101112", 1 );
+ assertNoRepoMetadata( ID_PROXIED1, requestedResource );
+
+ // two proxies setup, nothing fetched from either remote, local file exists, fetch should succeed.
+ assertFetchVersioned( requestedResource );
+
+ // Local metadata exists, repo metadata exists, local file updated.
+ assertSnapshotMetadataContents( requestedResource, "20050831", "101112", 1 );
+ assertRepoSnapshotMetadataContents( ID_PROXIED1, requestedResource, "20050831", "101112", 1 );
+ }
+
+ @Test
+ public void testGetGroupMetadataNotProxiedNotLocal()
+ throws Exception
+ {
+ // The artifactId "get-default-metadata-nonexistant" does not exist (intentionally).
+ String requestedResource = "org/apache/maven/test/groups/get-default-metadata-nonexistant/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ assertResourceNotFound( requestedResource );
+
+ // No proxy setup, nothing fetched, failure expected.
+ assertFetchProjectOrGroupFailed( requestedResource );
+
+ // No local artifactId, and no fetch, should equal no metadata file downloaded / created / updated.
+ assertResourceNotFound( requestedResource );
+ }
+
+ @Test
+ public void testGetGroupMetadataNotProxiedOnLocal()
+ throws Exception
+ {
+ // Project metadata that exists and has multiple versions
+ String requestedResource = "org/apache/maven/test/groups/get-project-metadata/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ assertResourceExists( requestedResource );
+
+ // No proxy setup, nothing fetched from remote, but local exists.
+ assertFetchProjectOrGroup( requestedResource );
+
+ // Nothing fetched. Should only contain contents of what is in the repository.
+ // A metadata update is not performed in this use case. Local metadata content is only
+ // updated via the metadata updater consumer.
+ assertGroupMetadataContents( requestedResource, new String[]{ "plugin1" } );
+ }
+
+ @Test
+ public void testGetGroupMetadataProxiedNotLocalMultipleRemotes()
+ throws Exception
+ {
+ // Project metadata that does not exist locally, but has multiple versions in remote repos
+ String requestedResource = "org/apache/maven/test/groups/get-default-layout/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ assertResourceNotFound( requestedResource );
+ assertNoRepoMetadata( ID_PROXIED1, requestedResource );
+ assertNoRepoMetadata( ID_PROXIED2, requestedResource );
+
+ // Two proxies setup, metadata fetched from both remotes.
+ assertFetchProjectOrGroup( requestedResource );
+
+ // Nothing fetched. Should only contain contents of what is in the repository.
+ assertGroupMetadataContents( requestedResource, new String[]{ "plugin2", "plugin1" } );
+ assertRepoGroupMetadataContents( ID_PROXIED1, requestedResource, new String[]{ "plugin1" } );
+ assertRepoGroupMetadataContents( ID_PROXIED2, requestedResource, new String[]{ "plugin2" } );
+ }
+
+ @Test
+ public void testGetGroupsMetadataProxiedNotLocalNotRemote()
+ throws Exception
+ {
+ // Non-existant project metadata that does not exist locally and doesn't exist on remotes.
+ String requestedResource = "org/apache/maven/test/groups/get-bogus-artifact/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ assertResourceNotFound( requestedResource );
+ assertNoRepoMetadata( ID_PROXIED1, requestedResource );
+ assertNoRepoMetadata( ID_PROXIED2, requestedResource );
+
+ // Two proxies setup, nothing fetched from remotes, local does not exist.
+ assertFetchProjectOrGroupFailed( requestedResource );
+
+ // Nothing fetched. Nothing should exist.
+ assertResourceNotFound( requestedResource );
+ assertNoRepoMetadata( ID_PROXIED1, requestedResource );
+ assertNoRepoMetadata( ID_PROXIED2, requestedResource );
+ }
+
+ @Test
+ public void testGetGroupMetadataProxiedNotLocalOnRemote()
+ throws Exception
+ {
+ // New project metadata that does not exist locally but exists on remote.
+ String requestedResource = "org/apache/maven/test/groups/get-found-in-proxy/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ assertResourceNotFound( requestedResource );
+ assertNoRepoMetadata( ID_PROXIED1, requestedResource );
+
+ // One proxy setup, metadata fetched from remote, local does not exist.
+ assertFetchProjectOrGroup( requestedResource );
+
+ // Remote fetched. Local created/updated.
+ assertGroupMetadataContents( requestedResource, new String[]{ "plugin3" } );
+ assertRepoGroupMetadataContents( ID_PROXIED1, requestedResource, new String[]{ "plugin3" } );
+ }
+
+ @Test
+ public void testGetGroupMetadataProxiedOnLocalMultipleRemote()
+ throws Exception
+ {
+ // Project metadata that exist locally, and has multiple versions in remote repos
+ String requestedResource = "org/apache/maven/test/groups/get-on-multiple-repos/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ assertGroupMetadataContents( requestedResource, new String[]{ "plugin1" } );
+ assertNoRepoMetadata( ID_PROXIED1, requestedResource );
+ assertNoRepoMetadata( ID_PROXIED2, requestedResource );
+
+ // Two proxies setup, metadata fetched from both remotes.
+ assertFetchProjectOrGroup( requestedResource );
+
+ // metadata fetched from both repos, and merged with local version.
+ assertGroupMetadataContents( requestedResource, new String[]{ "plugin1", "plugin2", "plugin4" } );
+ assertRepoGroupMetadataContents( ID_PROXIED1, requestedResource, new String[]{ "plugin1", "plugin4" } );
+ assertRepoGroupMetadataContents( ID_PROXIED2, requestedResource, new String[]{ "plugin1", "plugin2" } );
+ }
+
+ @Test
+ public void testGetGroupMetadataProxiedOnLocalNotRemote()
+ throws Exception
+ {
+ // Project metadata that exist locally, and does not exist in remote repos.
+ String requestedResource = "org/apache/maven/test/groups/get-not-on-remotes/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ assertGroupMetadataContents( requestedResource, new String[]{ "plugin5" } );
+ assertNoRepoMetadata( ID_PROXIED1, requestedResource );
+ assertNoRepoMetadata( ID_PROXIED2, requestedResource );
+
+ // Two proxies setup, metadata fetch from remotes fail (because they dont exist).
+ assertFetchProjectOrGroup( requestedResource );
+
+ // metadata not fetched from both repos, and local version exists.
+ // Since there was no updated metadata content from a remote/proxy, a metadata update on
+ // the local file never ran. Local only updates are performed via the metadata updater consumer.
+ assertGroupMetadataContents( requestedResource, new String[]{ "plugin5" } );
+ assertNoRepoMetadata( ID_PROXIED1, requestedResource );
+ assertNoRepoMetadata( ID_PROXIED2, requestedResource );
+ }
+
+ @Test
+ public void testGetGroupMetadataProxiedOnLocalOnRemote()
+ throws Exception
+ {
+ // Project metadata that exist locally and exists on remote.
+ String requestedResource = "org/apache/maven/test/groups/get-on-local-on-remote/maven-metadata.xml";
+ setupTestableManagedRepository( requestedResource );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
+
+ assertGroupMetadataContents( requestedResource, new String[]{ "plugin6", "plugin7" } );
+ assertNoRepoMetadata( ID_PROXIED1, requestedResource );
+
+ // One proxy setup, metadata fetched from remote, local exists.
+ assertFetchProjectOrGroup( requestedResource );
+
+ // Remote fetched. Local updated.
+ assertGroupMetadataContents( requestedResource, new String[]{ "plugin6", "plugin7", "plugin4" } );
+ assertRepoGroupMetadataContents( ID_PROXIED1, requestedResource, new String[]{ "plugin7", "plugin4" } );
+ }
+
+ /**
+ * Transfer the metadata file.
+ *
+ * @param requestedResource the requested resource
+ * @throws Exception
+ */
+ private void assertFetchProjectOrGroup( String requestedResource )
+ throws Exception
+ {
+ Path expectedFile = managedDefaultDir.resolve(requestedResource);
+
+ ProjectReference metadata = createProjectReference( requestedResource );
+
+ Path downloadedFile = proxyHandler.fetchMetadataFromProxies( managedDefaultRepository,
+ managedDefaultRepository.toMetadataPath(
+ metadata ) ).getFile();
+
+ assertNotNull( "Should have downloaded a file.", downloadedFile );
+ assertNoTempFiles( expectedFile );
+ }
+
+ private ProjectReference createProjectReference( String path )
+ throws RepositoryMetadataException
+ {
+ return metadataTools.toProjectReference( path );
+ }
+
+ /**
+ * Transfer the metadata file, not expected to succeed.
+ *
+ * @param requestedResource the requested resource
+ * @throws Exception
+ */
+ private void assertFetchProjectOrGroupFailed( String requestedResource )
+ throws Exception
+ {
+ Path expectedFile = managedDefaultDir.resolve(requestedResource);
+ ProjectReference metadata = createProjectReference( requestedResource );
+
+ Path downloadedFile = proxyHandler.fetchMetadataFromProxies( managedDefaultRepository,
+ managedDefaultRepository.toMetadataPath(
+ metadata ) ).getFile();
+
+ assertNull( downloadedFile );
+ assertNoTempFiles( expectedFile );
+ }
+
+ /**
+ * Transfer the metadata file.
+ *
+ * @param requestedResource the requested resource
+ * @throws Exception
+ */
+ private void assertFetchVersioned( String requestedResource )
+ throws Exception
+ {
+ Path expectedFile = managedDefaultDir.resolve(requestedResource);
+
+ VersionedReference metadata = createVersionedReference( requestedResource );
+
+ Path downloadedFile = proxyHandler.fetchMetadataFromProxies( managedDefaultRepository,
+ managedDefaultRepository.toMetadataPath(
+ metadata ) ).getFile();
+
+ assertNotNull( "Should have downloaded a file.", downloadedFile );
+ assertNoTempFiles( expectedFile );
+ }
+
+ private VersionedReference createVersionedReference( String path )
+ throws RepositoryMetadataException
+ {
+ return metadataTools.toVersionedReference( path );
+ }
+
+ /**
+ * Transfer the metadata file, not expected to succeed.
+ *
+ * @param requestedResource the requested resource
+ * @throws Exception
+ */
+ private void assertFetchVersionedFailed( String requestedResource )
+ throws Exception
+ {
+ Path expectedFile = managedDefaultDir.resolve(requestedResource);
+ VersionedReference metadata = createVersionedReference( requestedResource );
+
+ Path downloadedFile = proxyHandler.fetchMetadataFromProxies( managedDefaultRepository,
+ managedDefaultRepository.toMetadataPath(
+ metadata ) ).getFile();
+
+ assertNull( downloadedFile );
+ assertNoTempFiles( expectedFile );
+ }
+
+ /**
+ * Test for the existance of the requestedResource in the default managed repository.
+ *
+ * @param requestedResource the requested resource
+ * @throws Exception
+ */
+ private void assertResourceExists( String requestedResource )
+ throws Exception
+ {
+ Path actualFile = managedDefaultDir.resolve(requestedResource);
+ assertTrue( "Resource should exist: " + requestedResource, Files.exists(actualFile) );
+ }
+
+ private void assertMetadataEquals( String expectedMetadataXml, Path actualFile )
+ throws Exception
+ {
+ assertNotNull( "Actual File should not be null.", actualFile );
+
+ assertTrue( "Actual file exists.", Files.exists(actualFile) );
+
+ StringWriter actualContents = new StringWriter();
+ ArchivaRepositoryMetadata metadata = MavenMetadataReader.read( actualFile );
+ RepositoryMetadataWriter.write( metadata, actualContents );
+
+ DetailedDiff detailedDiff = new DetailedDiff( new Diff( expectedMetadataXml, actualContents.toString() ) );
+ if ( !detailedDiff.similar() )
+ {
+ assertEquals( expectedMetadataXml, actualContents );
+ }
+
+ // assertEquals( "Check file contents.", expectedMetadataXml, actualContents );
+ }
+
+ /**
+ * Ensures that the requested resource is not present in the managed repository.
+ *
+ * @param requestedResource the requested resource
+ * @throws Exception
+ */
+ private void assertNoMetadata( String requestedResource )
+ throws Exception
+ {
+ Path expectedFile = managedDefaultDir.resolve(requestedResource);
+ assertFalse( "metadata should not exist: " + expectedFile, Files.exists(expectedFile) );
+ }
+
+ /**
+ * Ensures that the proxied repository specific maven metadata file does NOT exist in the
+ * managed repository.
+ *
+ * @param proxiedRepoId the proxied repository id to validate with.
+ * @param requestedResource the resource requested.
+ */
+ private void assertNoRepoMetadata( String proxiedRepoId, String requestedResource )
+ {
+ String proxiedFile = metadataTools.getRepositorySpecificName( proxiedRepoId, requestedResource );
+
+ Path actualFile = managedDefaultDir.resolve(proxiedFile);
+ assertFalse( "Repo specific metadata should not exist: " + actualFile, Files.exists(actualFile) );
+ }
+
+ private void assertGroupMetadataContents( String requestedResource, String expectedPlugins[] )
+ throws Exception
+ {
+ Path actualFile = managedDefaultDir.resolve(requestedResource);
+ assertTrue( "Snapshot Metadata should exist: " + requestedResource, Files.exists(actualFile) );
+
+ ProjectReference actualMetadata = createGroupReference( requestedResource );
+
+ assertGroupMetadata( actualFile, actualMetadata, expectedPlugins );
+ }
+
+ private ProjectReference createGroupReference( String requestedResource )
+ throws RepositoryMetadataException
+ {
+ ProjectReference projectReference = createProjectReference( requestedResource );
+ projectReference.setGroupId( projectReference.getGroupId() + "." + projectReference.getArtifactId() );
+ projectReference.setArtifactId( null );
+ return projectReference;
+ }
+
+ private void assertRepoGroupMetadataContents( String proxiedRepoId, String requestedResource,
+ String expectedPlugins[] )
+ throws Exception
+ {
+ String proxiedFile = metadataTools.getRepositorySpecificName( proxiedRepoId, requestedResource );
+
+ Path actualFile = managedDefaultDir.resolve(proxiedFile);
+ assertTrue( "Repo Specific Group Metadata should exist: " + requestedResource, Files.exists(actualFile) );
+
+ ProjectReference actualMetadata = createGroupReference( requestedResource );
+
+ assertGroupMetadata( actualFile, actualMetadata, expectedPlugins );
+ }
+
+ private void assertGroupMetadata( Path actualFile, ProjectReference actualMetadata, String expectedPlugins[] )
+ throws Exception
+ {
+ // Build expected metadata XML
+ StringWriter expectedMetadataXml = new StringWriter();
+ ArchivaRepositoryMetadata m = new ArchivaRepositoryMetadata();
+ m.setGroupId( actualMetadata.getGroupId() );
+
+ for ( String pluginId : expectedPlugins )
+ {
+ Plugin p = new Plugin();
+ p.setPrefix( pluginId );
+ p.setArtifactId( pluginId + "-maven-plugin" );
+ p.setName( "The " + pluginId + " Plugin" );
+ m.getPlugins().add( p );
+ }
+
+ RepositoryMetadataWriter.write( m, expectedMetadataXml );
+
+ // Compare the file to the actual contents.
+ assertMetadataEquals( expectedMetadataXml.toString(), actualFile );
+ }
+
+ /**
+ * Test for the existance of the requestedResource in the default managed repository, and if it exists,
+ * does it contain the specified list of expected versions?
+ *
+ * @param requestedResource the requested resource
+ * @throws Exception
+ */
+ private void assertProjectMetadataContents( String requestedResource, String expectedVersions[],
+ String latestVersion, String releaseVersion )
+ throws Exception
+ {
+ Path actualFile = managedDefaultDir.resolve(requestedResource);
+ assertTrue( Files.exists(actualFile) );
+
+ ProjectReference metadata = createProjectReference( requestedResource );
+
+ // Build expected metadata XML
+ StringWriter expectedMetadataXml = new StringWriter();
+ ArchivaRepositoryMetadata m = new ArchivaRepositoryMetadata();
+ m.setGroupId( metadata.getGroupId() );
+ m.setArtifactId( metadata.getArtifactId() );
+ m.setLatestVersion( latestVersion );
+ m.setReleasedVersion( releaseVersion );
+
+ if ( expectedVersions != null )
+ {
+ m.getAvailableVersions().addAll( Arrays.asList( expectedVersions ) );
+ }
+
+ RepositoryMetadataWriter.write( m, expectedMetadataXml );
+
+ // Compare the file to the actual contents.
+ assertMetadataEquals( expectedMetadataXml.toString(), actualFile );
+ }
+
+ /**
+ * Test for the existance of the requestedResource in the default managed repository, and if it exists,
+ * does it contain the expected release maven-metadata.xml contents?
+ *
+ * @param requestedResource the requested resource
+ * @throws Exception
+ */
+ private void assertReleaseMetadataContents( String requestedResource )
+ throws Exception
+ {
+ Path actualFile = managedDefaultDir.resolve(requestedResource);
+ assertTrue( "Release Metadata should exist: " + requestedResource, Files.exists(actualFile) );
+
+ VersionedReference metadata = createVersionedReference( requestedResource );
+
+ // Build expected metadata XML
+ StringWriter expectedMetadataXml = new StringWriter();
+ ArchivaRepositoryMetadata m = new ArchivaRepositoryMetadata();
+ m.setGroupId( metadata.getGroupId() );
+ m.setArtifactId( metadata.getArtifactId() );
+ m.setVersion( metadata.getVersion() );
+ RepositoryMetadataWriter.write( m, expectedMetadataXml );
+
+ // Compare the file to the actual contents.
+ assertMetadataEquals( expectedMetadataXml.toString(), actualFile );
+ }
+
+ /**
+ * Test for the existance of the snapshot metadata in the default managed repository, and if it exists,
+ * does it contain the expected release maven-metadata.xml contents?
+ *
+ * @param requestedResource the requested resource
+ * @param expectedDate the date in "yyyyMMdd" format
+ * @param expectedTime the time in "hhmmss" format
+ * @param expectedBuildnumber the build number
+ * @throws Exception
+ */
+ private void assertSnapshotMetadataContents( String requestedResource, String expectedDate, String expectedTime,
+ int expectedBuildnumber )
+ throws Exception
+ {
+ Path actualFile = managedDefaultDir.resolve(requestedResource);
+ assertTrue( "Snapshot Metadata should exist: " + requestedResource, Files.exists(actualFile) );
+
+ VersionedReference actualMetadata = createVersionedReference( requestedResource );
+
+ assertSnapshotMetadata( actualFile, actualMetadata, expectedDate, expectedTime, expectedBuildnumber );
+ }
+
+ /**
+ * Test for the existance of the proxied repository specific snapshot metadata in the default managed
+ * repository, and if it exists, does it contain the expected release maven-metadata.xml contents?
+ *
+ * @param proxiedRepoId the repository id of the proxied repository.
+ * @param requestedResource the requested resource
+ * @param expectedDate the date in "yyyyMMdd" format
+ * @param expectedTime the time in "hhmmss" format
+ * @param expectedBuildnumber the build number
+ * @throws Exception
+ */
+ private void assertRepoSnapshotMetadataContents( String proxiedRepoId, String requestedResource,
+ String expectedDate, String expectedTime, int expectedBuildnumber )
+ throws Exception
+ {
+ String proxiedFile = metadataTools.getRepositorySpecificName( proxiedRepoId, requestedResource );
+
+ Path actualFile = managedDefaultDir.resolve(proxiedFile);
+ assertTrue( "Repo Specific Snapshot Metadata should exist: " + requestedResource, Files.exists(actualFile) );
+
+ VersionedReference actualMetadata = createVersionedReference( requestedResource );
+
+ assertSnapshotMetadata( actualFile, actualMetadata, expectedDate, expectedTime, expectedBuildnumber );
+ }
+
+ private void assertSnapshotMetadata( Path actualFile, VersionedReference actualMetadata, String expectedDate,
+ String expectedTime, int expectedBuildnumber )
+ throws RepositoryMetadataException, Exception
+ {
+ // Build expected metadata XML
+ StringWriter expectedMetadataXml = new StringWriter();
+ ArchivaRepositoryMetadata m = new ArchivaRepositoryMetadata();
+ m.setGroupId( actualMetadata.getGroupId() );
+ m.setArtifactId( actualMetadata.getArtifactId() );
+ m.setVersion( VersionUtil.getBaseVersion( actualMetadata.getVersion() ) );
+
+ m.setSnapshotVersion( new SnapshotVersion() );
+
+ if ( StringUtils.isNotBlank( expectedDate ) && StringUtils.isNotBlank( expectedTime ) )
+ {
+ m.getSnapshotVersion().setTimestamp( expectedDate + "." + expectedTime );
+ }
+
+ m.getSnapshotVersion().setBuildNumber( expectedBuildnumber );
+
+ m.setLastUpdated( expectedDate + expectedTime );
+
+ RepositoryMetadataWriter.write( m, expectedMetadataXml );
+
+ // Compare the file to the actual contents.
+ assertMetadataEquals( expectedMetadataXml.toString(), actualFile );
+ }
+
+ /**
+ * Ensures that the repository specific maven metadata file exists, and contains the appropriate
+ * list of expected versions within.
+ *
+ * @param proxiedRepoId
+ * @param requestedResource
+ * @param expectedProxyVersions
+ */
+ private void assertRepoProjectMetadata( String proxiedRepoId, String requestedResource,
+ String[] expectedProxyVersions )
+ throws Exception
+ {
+ String proxiedFile = metadataTools.getRepositorySpecificName( proxiedRepoId, requestedResource );
+
+ Path actualFile = managedDefaultDir.resolve(proxiedFile);
+ assertTrue( Files.exists(actualFile) );
+
+ ProjectReference metadata = createProjectReference( requestedResource );
+
+ // Build expected metadata XML
+ StringWriter expectedMetadataXml = new StringWriter();
+ ArchivaRepositoryMetadata m = new ArchivaRepositoryMetadata();
+ m.setGroupId( metadata.getGroupId() );
+ m.setArtifactId( metadata.getArtifactId() );
+
+ if ( expectedProxyVersions != null )
+ {
+ m.getAvailableVersions().addAll( Arrays.asList( expectedProxyVersions ) );
+ }
+
+ RepositoryMetadataWriter.write( m, expectedMetadataXml );
+
+ // Compare the file to the actual contents.
+ assertMetadataEquals( expectedMetadataXml.toString(), actualFile );
+ }
+
+ /**
+ * Ensures that the repository specific maven metadata file exists, and contains the appropriate
+ * list of expected versions within.
+ *
+ * @param proxiedRepoId
+ * @param requestedResource
+ */
+ private void assertRepoReleaseMetadataContents( String proxiedRepoId, String requestedResource )
+ throws Exception
+ {
+ String proxiedFile = metadataTools.getRepositorySpecificName( proxiedRepoId, requestedResource );
+
+ Path actualFile = managedDefaultDir.resolve(proxiedFile);
+ assertTrue( "Release metadata for repo should exist: " + actualFile, Files.exists(actualFile) );
+
+ VersionedReference metadata = createVersionedReference( requestedResource );
+
+ // Build expected metadata XML
+ StringWriter expectedMetadataXml = new StringWriter();
+ ArchivaRepositoryMetadata m = new ArchivaRepositoryMetadata();
+ m.setGroupId( metadata.getGroupId() );
+ m.setArtifactId( metadata.getArtifactId() );
+ m.setVersion( metadata.getVersion() );
+ RepositoryMetadataWriter.write( m, expectedMetadataXml );
+
+ // Compare the file to the actual contents.
+ assertMetadataEquals( expectedMetadataXml.toString(), actualFile );
+ }
+
+ /**
+ * Test for the non-existance of the requestedResource in the default managed repository.
+ *
+ * @param requestedResource the requested resource
+ * @throws Exception
+ */
+ private void assertResourceNotFound( String requestedResource )
+ throws Exception
+ {
+ Path actualFile = managedDefaultDir.resolve(requestedResource);
+ assertFalse( "Resource should not exist: " + requestedResource, Files.exists(actualFile) );
+ }
+
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/MockConfiguration.java b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/MockConfiguration.java
new file mode 100644
index 000000000..fd6e66eb2
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/MockConfiguration.java
@@ -0,0 +1,193 @@
+package org.apache.archiva.proxy;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.configuration.ArchivaConfiguration;
+import org.apache.archiva.configuration.Configuration;
+import org.apache.archiva.configuration.ConfigurationListener;
+import org.apache.archiva.configuration.FileType;
+import org.apache.archiva.configuration.FileTypes;
+import org.apache.archiva.configuration.RepositoryScanningConfiguration;
+import org.apache.archiva.redback.components.registry.Registry;
+import org.apache.archiva.redback.components.registry.RegistryException;
+import org.apache.archiva.redback.components.registry.RegistryListener;
+import org.apache.commons.lang.StringUtils;
+import org.easymock.EasyMock;
+import org.easymock.IMocksControl;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
+
+/**
+ * MockConfiguration
+ *
+ *
+ */
+@Service( "archivaConfiguration#mock" )
+public class MockConfiguration
+ implements ArchivaConfiguration
+{
+
+ private Configuration configuration = new Configuration();
+
+ private Set<RegistryListener> registryListeners = new HashSet<RegistryListener>();
+
+ private Set<ConfigurationListener> configListeners = new HashSet<ConfigurationListener>();
+
+ private IMocksControl registryControl;
+
+ private Registry registryMock;
+
+ public MockConfiguration()
+ {
+ registryControl = EasyMock.createNiceControl( );
+ registryMock = registryControl.createMock( Registry.class );
+ }
+
+ @PostConstruct
+ public void initialize()
+ throws Exception
+ {
+
+ configuration.setRepositoryScanning( new RepositoryScanningConfiguration()
+ {
+ @Override
+ public List<FileType> getFileTypes()
+ {
+ FileType fileType = new FileType();
+ fileType.setId( FileTypes.ARTIFACTS );
+ fileType.setPatterns( Collections.singletonList( "**/*" ) );
+ return Collections.singletonList( fileType );
+ }
+ } );
+ }
+
+ @Override
+ public void addChangeListener( org.apache.archiva.redback.components.registry.RegistryListener listener )
+ {
+ registryListeners.add( listener );
+ }
+
+ @Override
+ public void removeChangeListener( RegistryListener listener )
+ {
+ registryListeners.remove( listener );
+ }
+
+ @Override
+ public Configuration getConfiguration()
+ {
+ return configuration;
+ }
+
+ @Override
+ public void save( Configuration configuration )
+ throws RegistryException
+ {
+ /* do nothing */
+ }
+
+ public void triggerChange( String name, String value )
+ {
+ for ( org.apache.archiva.redback.components.registry.RegistryListener listener : registryListeners )
+ {
+ try
+ {
+ listener.afterConfigurationChange( registryMock, name, value );
+ }
+ catch ( Exception e )
+ {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ @Override
+ public void addListener( ConfigurationListener listener )
+ {
+ configListeners.add( listener );
+ }
+
+ @Override
+ public void removeListener( ConfigurationListener listener )
+ {
+ configListeners.remove( listener );
+ }
+
+ @Override
+ public boolean isDefaulted()
+ {
+ return false;
+ }
+
+ @Override
+ public void reload()
+ {
+ // no op
+ }
+
+ @Override
+ public Locale getDefaultLocale( )
+ {
+ return Locale.getDefault();
+ }
+
+ @Override
+ public List<Locale.LanguageRange> getLanguagePriorities( )
+ {
+ return Locale.LanguageRange.parse( "en,fr,de" );
+ }
+
+ @Override
+ public Path getAppServerBaseDir() {
+ if (System.getProperties().containsKey("appserver.base")) {
+ return Paths.get(System.getProperty("appserver.base"));
+ } else {
+ return Paths.get("");
+ }
+ }
+
+
+ @Override
+ public Path getRepositoryBaseDir() {
+ return getDataDirectory().resolve("repositories");
+ }
+
+ @Override
+ public Path getRemoteRepositoryBaseDir() {
+ return getDataDirectory().resolve("remotes");
+ }
+
+ @Override
+ public Path getDataDirectory() {
+ if (configuration!=null && StringUtils.isNotEmpty(configuration.getArchivaRuntimeConfiguration().getDataDirectory())) {
+ return Paths.get(configuration.getArchivaRuntimeConfiguration().getDataDirectory());
+ } else {
+ return getAppServerBaseDir().resolve("data");
+ }
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/SnapshotTransferTest.java b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/SnapshotTransferTest.java
new file mode 100644
index 000000000..9ab0585bf
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/SnapshotTransferTest.java
@@ -0,0 +1,329 @@
+package org.apache.archiva.proxy;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.model.ArtifactReference;
+import org.apache.archiva.policies.CachedFailuresPolicy;
+import org.apache.archiva.policies.ChecksumPolicy;
+import org.apache.archiva.policies.ReleasesPolicy;
+import org.apache.archiva.policies.SnapshotsPolicy;
+import org.junit.Test;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.attribute.FileTime;
+import java.util.concurrent.TimeUnit;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * SnapshotTransferTest
+ *
+ *
+ */
+public class SnapshotTransferTest
+ extends AbstractProxyTestCase
+{
+ @Test
+ public void testSnapshotNonExistant()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/does-not-exist/1.0-SNAPSHOT/does-not-exist-1.0-SNAPSHOT.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ Files.deleteIfExists(expectedFile);
+ assertFalse( Files.exists(expectedFile) );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, false);
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+ assertNotDownloaded( downloadedFile );
+ assertNoTempFiles( expectedFile );
+ }
+
+ @Test
+ public void testTimestampDrivenSnapshotNotPresentAlready()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-timestamped-snapshot/1.0-SNAPSHOT/get-timestamped-snapshot-1.0-SNAPSHOT.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ Files.deleteIfExists(expectedFile);
+ assertFalse( Files.exists(expectedFile) );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, false);
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ Path proxiedFile = Paths.get(REPOPATH_PROXIED1, path);
+ assertFileEquals( expectedFile, downloadedFile, proxiedFile );
+ assertNoTempFiles( expectedFile );
+ }
+
+ @Test
+ public void testNewerTimestampDrivenSnapshotOnFirstRepo()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-present-timestamped-snapshot/1.0-SNAPSHOT/get-present-timestamped-snapshot-1.0-SNAPSHOT.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ assertTrue( Files.exists(expectedFile) );
+ Files.setLastModifiedTime( expectedFile, FileTime.from( getPastDate().getTime(), TimeUnit.MILLISECONDS ));
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, false);
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ Path proxiedFile = Paths.get(REPOPATH_PROXIED1, path);
+ assertFileEquals( expectedFile, downloadedFile, proxiedFile );
+ assertNoTempFiles( expectedFile );
+ }
+
+ @Test
+ public void testOlderTimestampDrivenSnapshotOnFirstRepo()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-present-timestamped-snapshot/1.0-SNAPSHOT/get-present-timestamped-snapshot-1.0-SNAPSHOT.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+ Path remoteFile = Paths.get(REPOPATH_PROXIED1, path);
+
+ setManagedNewerThanRemote( expectedFile, remoteFile );
+
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, false );
+
+ // Attempt to download.
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ // Should not have downloaded as managed is newer than remote.
+ assertNotDownloaded( downloadedFile );
+ assertNoTempFiles( expectedFile );
+ }
+
+ /**
+ * TODO: Has problems with wagon implementation not preserving timestamp.
+ */
+ /*
+ public void testNewerTimestampDrivenSnapshotOnSecondRepoThanFirstNotPresentAlready()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-SNAPSHOT.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+ ArtifactReference artifact = createArtifactReference( "default", path );
+
+ Files.delete(expectedFile);
+ assertFalse( Files.exists(expectedFile) );
+
+ // Create customized proxy / target repository
+ File targetProxyDir = saveTargetedRepositoryConfig( ID_PROXIED1_TARGET, REPOPATH_PROXIED1,
+ REPOPATH_PROXIED1_TARGET, "default" );
+
+ new File( targetProxyDir, path ).setLastModified( getPastDate().getTime() );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1_TARGET, ChecksumPolicy.IGNORED, ReleasesPolicy.IGNORED,
+ SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, ChecksumPolicy.IGNORED, ReleasesPolicy.IGNORED,
+ SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
+
+ File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ // Should have downloaded the content from proxy2, as proxy1 has an old (by file.lastModified check) version.
+ Path proxiedFile = Paths.get(REPOPATH_PROXIED2, path);
+ assertFileEquals( expectedFile, downloadedFile, proxiedFile );
+ assertNoTempFiles( expectedFile );
+ }
+
+ public void testOlderTimestampDrivenSnapshotOnSecondRepoThanFirstNotPresentAlready()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-SNAPSHOT.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+ ArtifactReference artifact = createArtifactReference( "default", path );
+
+ Files.delete(expectedFile);
+ assertFalse( Files.exists(expectedFile) );
+
+ // Create customized proxy / target repository
+ File targetProxyDir = saveTargetedRepositoryConfig( ID_PROXIED2_TARGET, REPOPATH_PROXIED2,
+ REPOPATH_PROXIED2_TARGET, "default" );
+
+ new File( targetProxyDir, path ).setLastModified( getPastDate().getTime() );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.IGNORED, ReleasesPolicy.IGNORED,
+ SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2_TARGET, ChecksumPolicy.IGNORED, ReleasesPolicy.IGNORED,
+ SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
+
+ File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ File proxiedFile = new File( REPOPATH_PROXIED1_TARGET, path );
+ assertFileEquals( expectedFile, downloadedFile, proxiedFile );
+ assertNoTempFiles( expectedFile );
+ } */
+
+ @Test
+ public void testTimestampDrivenSnapshotNotExpired()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-present-timestamped-snapshot/1.0-SNAPSHOT/get-present-timestamped-snapshot-1.0-SNAPSHOT.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ assertTrue( Files.exists(expectedFile) );
+
+ Path proxiedFile = Paths.get(REPOPATH_PROXIED1, path);
+ Files.setLastModifiedTime( proxiedFile, FileTime.from( getFutureDate().getTime(), TimeUnit.MILLISECONDS ));
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, false);
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ assertFileEquals( expectedFile, downloadedFile, proxiedFile );
+ assertNoTempFiles( expectedFile );
+ }
+
+ @Test
+ public void testTimestampDrivenSnapshotNotUpdated()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-present-timestamped-snapshot/1.0-SNAPSHOT/get-present-timestamped-snapshot-1.0-SNAPSHOT.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+ Path remoteFile = Paths.get(REPOPATH_PROXIED1, path);
+
+ setManagedNewerThanRemote( expectedFile, remoteFile, 12000000 );
+ long expectedTimestamp = Files.getLastModifiedTime( expectedFile ).toMillis();
+
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, false);
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ assertNotDownloaded( downloadedFile );
+ assertNotModified( expectedFile, expectedTimestamp );
+ assertNoTempFiles( expectedFile );
+ }
+
+ @Test
+ public void testTimestampDrivenSnapshotNotPresentAlreadyExpiredCacheFailure()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-timestamped-snapshot/1.0-SNAPSHOT/get-timestamped-snapshot-1.0-SNAPSHOT.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ Files.deleteIfExists(expectedFile);
+ assertFalse( Files.exists(expectedFile) );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.IGNORE, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.YES , false);
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, ChecksumPolicy.IGNORE, ReleasesPolicy.ALWAYS,
+ SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.YES , false);
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ Path proxiedFile = Paths.get(REPOPATH_PROXIED1, path);
+ assertFileEquals( expectedFile, downloadedFile, proxiedFile );
+ assertNoTempFiles( expectedFile );
+ }
+
+ @Test
+ public void testMetadataDrivenSnapshotNotPresentAlready()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-metadata-snapshot/1.0-SNAPSHOT/get-metadata-snapshot-1.0-20050831.101112-1.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ Files.deleteIfExists(expectedFile);
+ assertFalse( Files.exists(expectedFile) );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, false);
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ Path proxiedFile = Paths.get(REPOPATH_PROXIED1, path);
+ assertFileEquals( expectedFile, downloadedFile, proxiedFile );
+ assertNoTempFiles( expectedFile );
+ }
+
+ @Test
+ public void testGetMetadataDrivenSnapshotRemoteUpdate()
+ throws Exception
+ {
+ // Metadata driven snapshots (using a full timestamp) are treated like a release. It is the timing of the
+ // updates to the metadata files that triggers which will be downloaded
+
+ String path = "org/apache/maven/test/get-present-metadata-snapshot/1.0-SNAPSHOT/get-present-metadata-snapshot-1.0-20050831.101112-1.jar";
+ setupTestableManagedRepository( path );
+
+ Path expectedFile = managedDefaultDir.resolve(path);
+ ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
+
+ assertTrue( Files.exists(expectedFile) );
+
+ Files.setLastModifiedTime( expectedFile, FileTime.from( getPastDate().getTime(), TimeUnit.MILLISECONDS ));
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, false);
+
+ Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ Path proxiedFile = Paths.get(REPOPATH_PROXIED1, path);
+ assertFileEquals( expectedFile, downloadedFile, proxiedFile );
+ assertNoTempFiles( expectedFile );
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/WagonDelegate.java b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/WagonDelegate.java
new file mode 100644
index 000000000..702fe99c7
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/WagonDelegate.java
@@ -0,0 +1,286 @@
+package org.apache.archiva.proxy;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.ConnectionException;
+import org.apache.maven.wagon.ResourceDoesNotExistException;
+import org.apache.maven.wagon.TransferFailedException;
+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.SessionListener;
+import org.apache.maven.wagon.events.TransferListener;
+import org.apache.maven.wagon.proxy.ProxyInfo;
+import org.apache.maven.wagon.proxy.ProxyInfoProvider;
+import org.apache.maven.wagon.repository.Repository;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.List;
+
+/**
+ * A dummy wagon implementation
+ */
+@Service ("wagon#test")
+public class WagonDelegate
+ implements Wagon
+{
+ private Logger log = LoggerFactory.getLogger( WagonDelegate.class );
+
+ private Wagon delegate;
+
+ private String contentToGet;
+
+ @Override
+ public void get( String resourceName, File destination )
+ throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
+ {
+ log.debug( ".get({}, {})", resourceName, destination );
+ delegate.get( resourceName, destination );
+ create( destination.toPath() );
+ }
+
+ @Override
+ public boolean getIfNewer( String resourceName, File destination, long timestamp )
+ throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
+ {
+ log.info( ".getIfNewer({}, {}, {})", resourceName, destination, timestamp );
+
+ boolean result = delegate.getIfNewer( resourceName, destination, timestamp );
+ createIfMissing( destination.toPath() );
+ return result;
+ }
+
+ @Override
+ public void put( File source, String destination )
+ throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
+ {
+ delegate.put( source, destination );
+ }
+
+ @Override
+ public void putDirectory( File sourceDirectory, String destinationDirectory )
+ throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
+ {
+ delegate.putDirectory( sourceDirectory, destinationDirectory );
+ }
+
+ @Override
+ public boolean resourceExists( String resourceName )
+ throws TransferFailedException, AuthorizationException
+ {
+ return delegate.resourceExists( resourceName );
+ }
+
+ @SuppressWarnings ("unchecked")
+ @Override
+ public List<String> getFileList( String destinationDirectory )
+ throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
+ {
+ return delegate.getFileList( destinationDirectory );
+ }
+
+ @Override
+ public boolean supportsDirectoryCopy()
+ {
+ return delegate.supportsDirectoryCopy();
+ }
+
+ @Override
+ public void setTimeout( int val )
+ {
+ // ignore
+ }
+
+ @Override
+ public int getTimeout()
+ {
+ return 0;
+ }
+
+ @Override
+ public void setReadTimeout( int timeoutValue )
+ {
+ // ignore
+ }
+
+ @Override
+ public int getReadTimeout()
+ {
+ return 0;
+ }
+
+ @Override
+ public Repository getRepository()
+ {
+ return delegate.getRepository();
+ }
+
+ @Override
+ public void connect( Repository source )
+ throws ConnectionException, AuthenticationException
+ {
+ delegate.connect( source );
+ }
+
+ @Override
+ public void connect( Repository source, ProxyInfo proxyInfo )
+ throws ConnectionException, AuthenticationException
+ {
+ delegate.connect( source, proxyInfo );
+ }
+
+ @Override
+ public void connect( Repository source, ProxyInfoProvider proxyInfoProvider )
+ throws ConnectionException, AuthenticationException
+ {
+ delegate.connect( source, proxyInfoProvider );
+ }
+
+ @Override
+ public void connect( Repository source, AuthenticationInfo authenticationInfo )
+ throws ConnectionException, AuthenticationException
+ {
+ delegate.connect( source, authenticationInfo );
+ }
+
+ @Override
+ public void connect( Repository source, AuthenticationInfo authenticationInfo, ProxyInfo proxyInfo )
+ throws ConnectionException, AuthenticationException
+ {
+ delegate.connect( source, authenticationInfo, proxyInfo );
+ }
+
+ @Override
+ public void connect( Repository source, AuthenticationInfo authenticationInfo, ProxyInfoProvider proxyInfoProvider )
+ throws ConnectionException, AuthenticationException
+ {
+ delegate.connect( source, authenticationInfo, proxyInfoProvider );
+ }
+
+ @SuppressWarnings ("deprecation")
+ @Override
+ public void openConnection()
+ throws ConnectionException, AuthenticationException
+ {
+ delegate.openConnection();
+ }
+
+ @Override
+ public void disconnect()
+ throws ConnectionException
+ {
+ delegate.disconnect();
+ }
+
+ @Override
+ public void addSessionListener( SessionListener listener )
+ {
+ delegate.addSessionListener( listener );
+ }
+
+ @Override
+ public void removeSessionListener( SessionListener listener )
+ {
+ delegate.removeSessionListener( listener );
+ }
+
+ @Override
+ public boolean hasSessionListener( SessionListener listener )
+ {
+ return delegate.hasSessionListener( listener );
+ }
+
+ @Override
+ public void addTransferListener( TransferListener listener )
+ {
+ delegate.addTransferListener( listener );
+ }
+
+ @Override
+ public void removeTransferListener( TransferListener listener )
+ {
+ delegate.removeTransferListener( listener );
+ }
+
+ @Override
+ public boolean hasTransferListener( TransferListener listener )
+ {
+ return delegate.hasTransferListener( listener );
+ }
+
+ @Override
+ public boolean isInteractive()
+ {
+ return delegate.isInteractive();
+ }
+
+ @Override
+ public void setInteractive( boolean interactive )
+ {
+ delegate.setInteractive( interactive );
+ }
+
+ public void setDelegate( Wagon delegate )
+ {
+ this.delegate = delegate;
+ }
+
+ void setContentToGet( String content )
+ {
+ contentToGet = content;
+ }
+
+ private void createIfMissing( Path destination )
+ {
+ // since the mock won't actually copy a file, create an empty one to simulate file existence
+ if ( !Files.exists(destination) )
+ {
+ create( destination );
+ }
+ }
+
+ private void create( Path destination )
+ {
+ try
+ {
+ Files.createDirectories(destination.getParent());
+ if ( contentToGet == null )
+ {
+ Files.createFile(destination);
+ }
+ else
+ {
+ org.apache.archiva.common.utils.FileUtils.writeStringToFile(destination, Charset.defaultCharset(), contentToGet);
+ }
+ }
+ catch ( IOException e )
+ {
+ throw new RuntimeException( e.getMessage(), e );
+ }
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/common/WagonFactoryTest.java b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/common/WagonFactoryTest.java
new file mode 100644
index 000000000..f7289383c
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/common/WagonFactoryTest.java
@@ -0,0 +1,61 @@
+package org.apache.archiva.proxy.common;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.proxy.maven.WagonFactory;
+import org.apache.archiva.proxy.maven.WagonFactoryRequest;
+import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
+import org.apache.maven.wagon.Wagon;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.test.context.ContextConfiguration;
+
+import javax.inject.Inject;
+
+/**
+ * Test the WagonFactory works through Spring to be bound into the RepositoryProxyHandler implementation.
+ */
+@RunWith ( ArchivaSpringJUnit4ClassRunner.class )
+@ContextConfiguration ( locations = { "classpath*:/META-INF/spring-context.xml" } )
+public class WagonFactoryTest
+ extends TestCase
+{
+
+ @Inject
+ WagonFactory factory;
+
+ @Test
+ public void testLookupSuccessiveWagons()
+ throws Exception
+ {
+
+ Wagon first = factory.getWagon( new org.apache.archiva.proxy.maven.WagonFactoryRequest().protocol( "wagon#file" ) );
+
+ Wagon second = factory.getWagon( new org.apache.archiva.proxy.maven.WagonFactoryRequest().protocol( "wagon#file" ) );
+
+ // ensure we support only protocol name too
+ Wagon third = factory.getWagon( new WagonFactoryRequest().protocol( "file" ) );
+
+ assertNotSame( first, second );
+
+ assertNotSame( first, third );
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/ArchivaIndexManagerMock.java b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/ArchivaIndexManagerMock.java
new file mode 100644
index 000000000..65d8196b9
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/ArchivaIndexManagerMock.java
@@ -0,0 +1,90 @@
+package org.apache.archiva.repository.mock;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.indexer.ArchivaIndexManager;
+import org.apache.archiva.indexer.ArchivaIndexingContext;
+import org.apache.archiva.indexer.IndexCreationFailedException;
+import org.apache.archiva.indexer.IndexUpdateFailedException;
+import org.apache.archiva.repository.Repository;
+import org.apache.archiva.repository.RepositoryType;
+import org.springframework.stereotype.Service;
+
+import java.net.URI;
+import java.util.Collection;
+
+/**
+ * @author Martin Stockhammer <martin_s@apache.org>
+ */
+@Service("archivaIndexManager#maven")
+public class ArchivaIndexManagerMock implements ArchivaIndexManager {
+
+
+
+ @Override
+ public void pack(ArchivaIndexingContext context) throws IndexUpdateFailedException {
+
+ }
+
+ @Override
+ public void scan(ArchivaIndexingContext context) throws IndexUpdateFailedException {
+
+ }
+
+ @Override
+ public void update(ArchivaIndexingContext context, boolean fullUpdate) throws IndexUpdateFailedException {
+
+ }
+
+ @Override
+ public void addArtifactsToIndex(ArchivaIndexingContext context, Collection<URI> artifactReference) throws IndexUpdateFailedException {
+
+ }
+
+ @Override
+ public void removeArtifactsFromIndex(ArchivaIndexingContext context, Collection<URI> artifactReference) throws IndexUpdateFailedException {
+
+ }
+
+ @Override
+ public boolean supportsRepository(RepositoryType type) {
+ return true;
+ }
+
+ @Override
+ public ArchivaIndexingContext createContext(Repository repository) throws IndexCreationFailedException {
+ return null;
+ }
+
+ @Override
+ public ArchivaIndexingContext reset(ArchivaIndexingContext context) throws IndexUpdateFailedException {
+ return null;
+ }
+
+ @Override
+ public ArchivaIndexingContext move(ArchivaIndexingContext context, Repository repo) throws IndexCreationFailedException {
+ return null;
+ }
+
+ @Override
+ public void updateLocalIndexPath(Repository repo) {
+
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
new file mode 100644
index 000000000..e185c3e73
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
@@ -0,0 +1,387 @@
+package org.apache.archiva.repository.mock;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.common.utils.VersionUtil;
+import org.apache.archiva.metadata.model.ArtifactMetadata;
+import org.apache.archiva.metadata.model.maven2.MavenArtifactFacet;
+import org.apache.archiva.model.ArchivaArtifact;
+import org.apache.archiva.model.ArtifactReference;
+import org.apache.archiva.model.ProjectReference;
+import org.apache.archiva.model.VersionedReference;
+import org.apache.archiva.repository.*;
+import org.apache.archiva.repository.content.PathParser;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.stereotype.Service;
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @author Martin Stockhammer <martin_s@apache.org>
+ */
+@Service("managedRepositoryContent#mock")
+public class ManagedRepositoryContentMock implements ManagedRepositoryContent
+{
+ private static final String PATH_SEPARATOR = "/";
+ private static final String GROUP_SEPARATOR = ".";
+ public static final String MAVEN_METADATA = "maven-metadata.xml";
+
+
+ private ManagedRepository repository;
+
+ ManagedRepositoryContentMock(ManagedRepository repo) {
+ this.repository = repo;
+ }
+
+ @Override
+ public void deleteVersion( VersionedReference reference ) throws ContentNotFoundException
+ {
+
+ }
+
+ @Override
+ public void deleteArtifact( ArtifactReference artifactReference ) throws ContentNotFoundException
+ {
+
+ }
+
+ @Override
+ public void deleteGroupId( String groupId ) throws ContentNotFoundException
+ {
+
+ }
+
+ @Override
+ public void deleteProject( String namespace, String projectId ) throws RepositoryException
+ {
+
+ }
+
+ @Override
+ public String getId( )
+ {
+ return repository.getId();
+ }
+
+ @Override
+ public Set<ArtifactReference> getRelatedArtifacts( ArtifactReference reference ) throws ContentNotFoundException
+ {
+ return null;
+ }
+
+ @Override
+ public String getRepoRoot( )
+ {
+ return Paths.get("", "target", "test-repository", "managed").toString();
+ }
+
+ @Override
+ public ManagedRepository getRepository( )
+ {
+ return repository;
+ }
+
+ @Override
+ public Set<String> getVersions( ProjectReference reference ) throws ContentNotFoundException, LayoutException
+ {
+ return null;
+ }
+
+ @Override
+ public Set<String> getVersions( VersionedReference reference ) throws ContentNotFoundException
+ {
+ return null;
+ }
+
+ @Override
+ public boolean hasContent( ArtifactReference reference )
+ {
+ return false;
+ }
+
+ @Override
+ public boolean hasContent( ProjectReference reference )
+ {
+ return false;
+ }
+
+ @Override
+ public boolean hasContent( VersionedReference reference )
+ {
+ return false;
+ }
+
+ @Override
+ public void setRepository( ManagedRepository repo )
+ {
+ this.repository = repo;
+ }
+
+ private Map<ArtifactReference, String> refs = new HashMap<>();
+
+ @Override
+ public ArtifactReference toArtifactReference( String path ) throws LayoutException
+ {
+ if ( StringUtils.isBlank( path ) )
+ {
+ throw new LayoutException( "Unable to convert blank path." );
+ }
+
+ ArtifactMetadata metadata = getArtifactForPath("test-repository", path);
+
+ ArtifactReference artifact = new ArtifactReference();
+ artifact.setGroupId( metadata.getNamespace() );
+ artifact.setArtifactId( metadata.getProject() );
+ artifact.setVersion( metadata.getVersion() );
+ MavenArtifactFacet facet = (MavenArtifactFacet) metadata.getFacet( MavenArtifactFacet.FACET_ID );
+ if ( facet != null )
+ {
+ artifact.setClassifier( facet.getClassifier() );
+ artifact.setType( facet.getType() );
+ }
+ refs.put(artifact, path);
+ return artifact;
+ }
+
+ public ArtifactMetadata getArtifactForPath( String repoId, String relativePath )
+ {
+ String[] parts = relativePath.replace( '\\', '/' ).split( "/" );
+
+ int len = parts.length;
+ if ( len < 4 )
+ {
+ throw new IllegalArgumentException(
+ "Not a valid artifact path in a Maven 2 repository, not enough directories: " + relativePath );
+ }
+
+ String id = parts[--len];
+ String baseVersion = parts[--len];
+ String artifactId = parts[--len];
+ StringBuilder groupIdBuilder = new StringBuilder();
+ for ( int i = 0; i < len - 1; i++ )
+ {
+ groupIdBuilder.append( parts[i] );
+ groupIdBuilder.append( '.' );
+ }
+ groupIdBuilder.append( parts[len - 1] );
+
+ return getArtifactFromId( repoId, groupIdBuilder.toString(), artifactId, baseVersion, id );
+ }
+
+ private static final Pattern TIMESTAMP_PATTERN = Pattern.compile( "([0-9]{8}.[0-9]{6})-([0-9]+).*" );
+
+
+
+ public ArtifactMetadata getArtifactFromId( String repoId, String namespace, String projectId, String projectVersion,
+ String id )
+ {
+ if ( !id.startsWith( projectId + "-" ) )
+ {
+ throw new IllegalArgumentException( "Not a valid artifact path in a Maven 2 repository, filename '" + id
+ + "' doesn't start with artifact ID '" + projectId + "'" );
+ }
+
+ MavenArtifactFacet facet = new MavenArtifactFacet();
+
+ int index = projectId.length() + 1;
+ String version;
+ String idSubStrFromVersion = id.substring( index );
+ if ( idSubStrFromVersion.startsWith( projectVersion ) && !VersionUtil.isUniqueSnapshot( projectVersion ) )
+ {
+ // non-snapshot versions, or non-timestamped snapshot versions
+ version = projectVersion;
+ }
+ else if ( VersionUtil.isGenericSnapshot( projectVersion ) )
+ {
+ // timestamped snapshots
+ try
+ {
+ int mainVersionLength = projectVersion.length() - 8; // 8 is length of "SNAPSHOT"
+ if ( mainVersionLength == 0 )
+ {
+ throw new IllegalArgumentException(
+ "Timestamped snapshots must contain the main version, filename was '" + id + "'" );
+ }
+
+ Matcher m = TIMESTAMP_PATTERN.matcher( idSubStrFromVersion.substring( mainVersionLength ) );
+ m.matches();
+ String timestamp = m.group( 1 );
+ String buildNumber = m.group( 2 );
+ facet.setTimestamp( timestamp );
+ facet.setBuildNumber( Integer.parseInt( buildNumber ) );
+ version = idSubStrFromVersion.substring( 0, mainVersionLength ) + timestamp + "-" + buildNumber;
+ }
+ catch ( IllegalStateException e )
+ {
+ throw new IllegalArgumentException( "Not a valid artifact path in a Maven 2 repository, filename '" + id
+ + "' doesn't contain a timestamped version matching snapshot '"
+ + projectVersion + "'", e);
+ }
+ }
+ else
+ {
+ // invalid
+ throw new IllegalArgumentException(
+ "Not a valid artifact path in a Maven 2 repository, filename '" + id + "' doesn't contain version '"
+ + projectVersion + "'" );
+ }
+
+ String classifier;
+ String ext;
+ index += version.length();
+ if ( index == id.length() )
+ {
+ // no classifier or extension
+ classifier = null;
+ ext = null;
+ }
+ else
+ {
+ char c = id.charAt( index );
+ if ( c == '-' )
+ {
+ // classifier up until '.'
+ int extIndex = id.indexOf( '.', index );
+ if ( extIndex >= 0 )
+ {
+ classifier = id.substring( index + 1, extIndex );
+ ext = id.substring( extIndex + 1 );
+ }
+ else
+ {
+ classifier = id.substring( index + 1 );
+ ext = null;
+ }
+ }
+ else if ( c == '.' )
+ {
+ // rest is the extension
+ classifier = null;
+ ext = id.substring( index + 1 );
+ }
+ else
+ {
+ throw new IllegalArgumentException( "Not a valid artifact path in a Maven 2 repository, filename '" + id
+ + "' expected classifier or extension but got '"
+ + id.substring( index ) + "'" );
+ }
+ }
+
+ ArtifactMetadata metadata = new ArtifactMetadata();
+ metadata.setId( id );
+ metadata.setNamespace( namespace );
+ metadata.setProject( projectId );
+ metadata.setRepositoryId( repoId );
+ metadata.setProjectVersion( projectVersion );
+ metadata.setVersion( version );
+
+ facet.setClassifier( classifier );
+
+ // we use our own provider here instead of directly accessing Maven's artifact handlers as it has no way
+ // to select the correct order to apply multiple extensions mappings to a preferred type
+ // TODO: this won't allow the user to decide order to apply them if there are conflicts or desired changes -
+ // perhaps the plugins could register missing entries in configuration, then we just use configuration
+ // here?
+
+ String type = null;
+
+
+ // use extension as default
+ if ( type == null )
+ {
+ type = ext;
+ }
+
+ // TODO: should we allow this instead?
+ if ( type == null )
+ {
+ throw new IllegalArgumentException(
+ "Not a valid artifact path in a Maven 2 repository, filename '" + id + "' does not have a type" );
+ }
+
+ facet.setType( type );
+ metadata.addFacet( facet );
+
+ return metadata;
+ }
+
+
+ @Override
+ public Path toFile( ArtifactReference reference )
+ {
+ return Paths.get(getRepoRoot(), refs.get(reference));
+ }
+
+ @Override
+ public Path toFile( ArchivaArtifact reference )
+ {
+ return null;
+ }
+
+ private String formatAsDirectory( String directory )
+ {
+ return directory.replace( GROUP_SEPARATOR, PATH_SEPARATOR );
+ }
+
+ public String toMetadataPath( ProjectReference reference )
+ {
+ StringBuilder path = new StringBuilder();
+
+ path.append( formatAsDirectory( reference.getGroupId() ) ).append( PATH_SEPARATOR );
+ path.append( reference.getArtifactId() ).append( PATH_SEPARATOR );
+ path.append( MAVEN_METADATA );
+
+ return path.toString();
+ }
+
+ public String toMetadataPath( VersionedReference reference )
+ {
+ StringBuilder path = new StringBuilder();
+
+ path.append( formatAsDirectory( reference.getGroupId() ) ).append( PATH_SEPARATOR );
+ path.append( reference.getArtifactId() ).append( PATH_SEPARATOR );
+ if ( reference.getVersion() != null )
+ {
+ // add the version only if it is present
+ path.append( VersionUtil.getBaseVersion( reference.getVersion() ) ).append( PATH_SEPARATOR );
+ }
+ path.append( MAVEN_METADATA );
+
+ return path.toString();
+ }
+
+ @Override
+ public String toPath( ArtifactReference reference )
+ {
+ return null;
+ }
+
+ @Override
+ public String toPath( ArchivaArtifact reference )
+ {
+ return null;
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/RemoteRepositoryContentMock.java b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/RemoteRepositoryContentMock.java
new file mode 100644
index 000000000..4ab4a5aae
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/RemoteRepositoryContentMock.java
@@ -0,0 +1,92 @@
+package org.apache.archiva.repository.mock;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.common.utils.VersionUtil;
+import org.apache.archiva.model.ArtifactReference;
+import org.apache.archiva.model.RepositoryURL;
+import org.apache.archiva.repository.LayoutException;
+import org.apache.archiva.repository.RemoteRepository;
+import org.apache.archiva.repository.RemoteRepositoryContent;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author Martin Stockhammer <martin_s@apache.org>
+ */
+@Service("remoteRepositoryContent#mock")
+public class RemoteRepositoryContentMock implements RemoteRepositoryContent
+{
+ RemoteRepository repository;
+
+ RemoteRepositoryContentMock(RemoteRepository repo) {
+ this.repository = repo;
+ }
+
+ @Override
+ public String getId( )
+ {
+ return repository.getId();
+ }
+
+ @Override
+ public RemoteRepository getRepository( )
+ {
+ return repository;
+ }
+
+ @Override
+ public RepositoryURL getURL( )
+ {
+ return new RepositoryURL(repository.getLocation().toString());
+ }
+
+ @Override
+ public void setRepository( RemoteRepository repo )
+ {
+ this.repository = repo;
+ }
+
+ @Override
+ public ArtifactReference toArtifactReference( String path ) throws LayoutException
+ {
+ return null;
+ }
+
+ @Override
+ public String toPath( ArtifactReference reference )
+ {
+ String baseVersion;
+ if (VersionUtil.isSnapshot(reference.getVersion())) {
+ baseVersion=VersionUtil.getBaseVersion(reference.getVersion());
+ } else {
+ baseVersion=reference.getVersion();
+ }
+ return reference.getGroupId().replaceAll("\\.", "/")+"/"+reference.getArtifactId()+"/"+baseVersion+"/"
+ +reference.getArtifactId()+"-"+reference.getVersion()+(
+ StringUtils.isNotEmpty(reference.getClassifier()) ? "-"+reference.getClassifier() : "")+"."+reference.getType();
+ }
+
+ @Override
+ public RepositoryURL toURL( ArtifactReference reference )
+ {
+ return null;
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/RepositoryContentProviderMock.java b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/RepositoryContentProviderMock.java
new file mode 100644
index 000000000..2822ae976
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/RepositoryContentProviderMock.java
@@ -0,0 +1,66 @@
+package org.apache.archiva.repository.mock;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.repository.*;
+import org.springframework.stereotype.Service;
+
+import java.util.HashSet;
+import java.util.Set;
+
+@Service("repositoryContentProvider#mock")
+public class RepositoryContentProviderMock implements RepositoryContentProvider {
+
+ private static final Set<RepositoryType> REPOSITORY_TYPES = new HashSet<>();
+ static {
+ REPOSITORY_TYPES.add(RepositoryType.MAVEN);
+ REPOSITORY_TYPES.add(RepositoryType.NPM);
+ }
+
+ @Override
+ public boolean supportsLayout(String layout) {
+ return true;
+ }
+
+ @Override
+ public Set<RepositoryType> getSupportedRepositoryTypes() {
+ return REPOSITORY_TYPES;
+ }
+
+ @Override
+ public boolean supports(RepositoryType type) {
+ return true;
+ }
+
+ @Override
+ public RemoteRepositoryContent createRemoteContent(RemoteRepository repository) throws RepositoryException {
+ return new RemoteRepositoryContentMock(repository);
+ }
+
+ @Override
+ public ManagedRepositoryContent createManagedContent(ManagedRepository repository) throws RepositoryException {
+ return new ManagedRepositoryContentMock(repository);
+ }
+
+ @Override
+ public <T extends RepositoryContent, V extends Repository> T createContent(Class<T> clazz, V repository) throws RepositoryException {
+ return null;
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java
new file mode 100644
index 000000000..691d7eefa
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java
@@ -0,0 +1,240 @@
+package org.apache.archiva.repository.mock;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.configuration.ManagedRepositoryConfiguration;
+import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
+import org.apache.archiva.repository.BasicManagedRepository;
+import org.apache.archiva.repository.BasicRemoteRepository;
+import org.apache.archiva.repository.EditableManagedRepository;
+import org.apache.archiva.repository.EditableRemoteRepository;
+import org.apache.archiva.repository.ManagedRepository;
+import org.apache.archiva.repository.PasswordCredentials;
+import org.apache.archiva.repository.ReleaseScheme;
+import org.apache.archiva.repository.RemoteRepository;
+import org.apache.archiva.repository.RepositoryCredentials;
+import org.apache.archiva.repository.RepositoryEvent;
+import org.apache.archiva.repository.RepositoryException;
+import org.apache.archiva.repository.RepositoryProvider;
+import org.apache.archiva.repository.RepositoryType;
+import org.apache.archiva.repository.features.ArtifactCleanupFeature;
+import org.apache.archiva.repository.features.IndexCreationFeature;
+import org.apache.archiva.repository.features.RemoteIndexFeature;
+import org.apache.archiva.repository.features.StagingRepositoryFeature;
+import org.springframework.stereotype.Service;
+
+import java.net.URI;
+import java.nio.file.Paths;
+import java.time.Duration;
+import java.time.Period;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Just a simple mock class for the repository provider
+ */
+@Service("mockRepositoryProvider")
+public class RepositoryProviderMock implements RepositoryProvider
+{
+
+ private static final Set<RepositoryType> TYPES = new HashSet<>( );
+
+ static
+ {
+ TYPES.add( RepositoryType.MAVEN );
+ TYPES.add( RepositoryType.NPM );
+ }
+
+ @Override
+ public Set<RepositoryType> provides( )
+ {
+ return TYPES;
+ }
+
+ @Override
+ public EditableManagedRepository createManagedInstance( String id, String name )
+ {
+ return new BasicManagedRepository( id, name , Paths.get("target/repositories"));
+ }
+
+ @Override
+ public EditableRemoteRepository createRemoteInstance( String id, String name )
+ {
+ return new BasicRemoteRepository( id, name, Paths.get("target/remotes") );
+ }
+
+ @Override
+ public ManagedRepository createManagedInstance( ManagedRepositoryConfiguration configuration ) throws RepositoryException
+ {
+ BasicManagedRepository managedRepository = new BasicManagedRepository( configuration.getId( ), configuration.getName( ) , Paths.get("target/repositories"));
+ updateManagedInstance( managedRepository, configuration );
+ return managedRepository;
+ }
+
+
+ @Override
+ public void updateManagedInstance( EditableManagedRepository managedRepository, ManagedRepositoryConfiguration configuration ) throws RepositoryException
+ {
+ try
+ {
+ managedRepository.setName( managedRepository.getPrimaryLocale(), configuration.getName( ) );
+ managedRepository.setLocation( new URI( configuration.getLocation( )==null ?"" : configuration.getLocation() ) );
+ managedRepository.setBaseUri( new URI( "" ) );
+ managedRepository.setBlocksRedeployment( configuration.isBlockRedeployments( ) );
+ managedRepository.setDescription( managedRepository.getPrimaryLocale(), configuration.getDescription( ) );
+ managedRepository.setLayout( configuration.getLayout( ) );
+ managedRepository.setScanned( configuration.isScanned( ) );
+ managedRepository.setSchedulingDefinition( configuration.getRefreshCronExpression( ) );
+ if (configuration.isReleases()) {
+ managedRepository.addActiveReleaseScheme( ReleaseScheme.RELEASE );
+ }
+ if (configuration.isSnapshots()) {
+ managedRepository.addActiveReleaseScheme( ReleaseScheme.SNAPSHOT );
+ }
+ ArtifactCleanupFeature acf = managedRepository.getFeature( ArtifactCleanupFeature.class ).get( );
+ acf.setRetentionPeriod( Period.ofDays( configuration.getRetentionPeriod( ) ) );
+ acf.setDeleteReleasedSnapshots( configuration.isDeleteReleasedSnapshots( ) );
+ acf.setRetentionCount( configuration.getRetentionCount( ) );
+ IndexCreationFeature icf = managedRepository.getFeature( IndexCreationFeature.class ).get( );
+ icf.setIndexPath( new URI( configuration.getIndexDir( ) ) );
+ icf.setSkipPackedIndexCreation( configuration.isSkipPackedIndexCreation( ) );
+ StagingRepositoryFeature srf = managedRepository.getFeature( StagingRepositoryFeature.class ).get( );
+ srf.setStageRepoNeeded( configuration.isStageRepoNeeded( ) );
+ }
+ catch ( Exception e )
+ {
+ throw new RepositoryException( "Error", e );
+ }
+
+ }
+
+
+ @Override
+ public ManagedRepository createStagingInstance( ManagedRepositoryConfiguration configuration ) throws RepositoryException
+ {
+ String id = configuration.getId( ) + StagingRepositoryFeature.STAGING_REPO_POSTFIX;
+ BasicManagedRepository managedRepository = new BasicManagedRepository( id, configuration.getName( ), Paths.get("target/repositories") );
+ updateManagedInstance( managedRepository, configuration );
+ return managedRepository;
+ }
+
+ @Override
+ public RemoteRepository createRemoteInstance( RemoteRepositoryConfiguration configuration ) throws RepositoryException
+ {
+ BasicRemoteRepository remoteRepository = new BasicRemoteRepository( configuration.getId( ), configuration.getName( ), Paths.get("target/remotes") );
+ updateRemoteInstance( remoteRepository, configuration );
+ return remoteRepository;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public void updateRemoteInstance( EditableRemoteRepository remoteRepository, RemoteRepositoryConfiguration configuration ) throws RepositoryException
+ {
+ try
+ {
+ remoteRepository.setName( remoteRepository.getPrimaryLocale(), configuration.getName( ) );
+ remoteRepository.setBaseUri( new URI( "" ) );
+ remoteRepository.setDescription( remoteRepository.getPrimaryLocale(), configuration.getDescription( ) );
+ remoteRepository.setLayout( configuration.getLayout( ) );
+ remoteRepository.setSchedulingDefinition( configuration.getRefreshCronExpression( ) );
+ remoteRepository.setCheckPath( configuration.getCheckPath( ) );
+ remoteRepository.setExtraHeaders( configuration.getExtraHeaders( ) );
+ remoteRepository.setExtraParameters( configuration.getExtraParameters( ) );
+ remoteRepository.setTimeout( Duration.ofSeconds( configuration.getTimeout( ) ) );
+ char[] pwd = configuration.getPassword()==null ? "".toCharArray() : configuration.getPassword().toCharArray();
+ remoteRepository.setCredentials( new PasswordCredentials( configuration.getUsername( ), pwd ) );
+ remoteRepository.setLocation( new URI( configuration.getUrl( )==null ? "" : configuration.getUrl() ) );
+ RemoteIndexFeature rif = remoteRepository.getFeature( RemoteIndexFeature.class ).get( );
+ rif.setDownloadRemoteIndexOnStartup( configuration.isDownloadRemoteIndexOnStartup( ) );
+ rif.setDownloadRemoteIndex( configuration.isDownloadRemoteIndex( ) );
+ rif.setIndexUri( new URI( configuration.getIndexDir( ) ) );
+ rif.setDownloadTimeout( Duration.ofSeconds( configuration.getRemoteDownloadTimeout( ) ) );
+ rif.setProxyId( configuration.getRemoteDownloadNetworkProxyId( ) );
+ IndexCreationFeature icf = remoteRepository.getFeature(IndexCreationFeature.class).get();
+ icf.setIndexPath(new URI(".index" ));
+ }
+ catch ( Exception e )
+ {
+ throw new RepositoryException( "Error", e );
+ }
+
+ }
+
+ @Override
+ public ManagedRepositoryConfiguration getManagedConfiguration( ManagedRepository managedRepository ) throws RepositoryException
+ {
+ ManagedRepositoryConfiguration configuration = new ManagedRepositoryConfiguration( );
+ configuration.setId( managedRepository.getId( ) );
+ configuration.setName(managedRepository.getName());
+ configuration.setLocation( managedRepository.getLocation( ) == null ? "" : managedRepository.getLocation().toString( ) );
+ configuration.setBlockRedeployments( managedRepository.blocksRedeployments( ) );
+ configuration.setDescription( managedRepository.getDescription( ) );
+ configuration.setLayout( managedRepository.getLayout( ) );
+ configuration.setScanned( managedRepository.isScanned( ) );
+ configuration.setRefreshCronExpression( managedRepository.getSchedulingDefinition( ) );
+ configuration.setReleases( managedRepository.getActiveReleaseSchemes().contains(ReleaseScheme.RELEASE) );
+ configuration.setSnapshots( managedRepository.getActiveReleaseSchemes().contains(ReleaseScheme.SNAPSHOT) );
+ ArtifactCleanupFeature acf = managedRepository.getFeature( ArtifactCleanupFeature.class ).get( );
+ configuration.setRetentionPeriod( acf.getRetentionPeriod( ).getDays( ) );
+ configuration.setDeleteReleasedSnapshots( acf.isDeleteReleasedSnapshots( ) );
+ configuration.setRetentionCount( acf.getRetentionCount( ) );
+ IndexCreationFeature icf = managedRepository.getFeature( IndexCreationFeature.class ).get( );
+ configuration.setSkipPackedIndexCreation( icf.isSkipPackedIndexCreation( ) );
+ configuration.setIndexDir( icf.getIndexPath( ) == null ? "" : icf.getIndexPath().toString( ) );
+ StagingRepositoryFeature srf = managedRepository.getFeature( StagingRepositoryFeature.class ).get( );
+ configuration.setStageRepoNeeded( srf.isStageRepoNeeded( ) );
+ return configuration;
+ }
+
+
+ @Override
+ public RemoteRepositoryConfiguration getRemoteConfiguration( RemoteRepository remoteRepository ) throws RepositoryException
+ {
+ RemoteRepositoryConfiguration configuration = new RemoteRepositoryConfiguration( );
+ configuration.setId( remoteRepository.getId( ) );
+ configuration.setName( remoteRepository.getName( ) );
+ configuration.setDescription( remoteRepository.getDescription( ) );
+ configuration.setLayout( remoteRepository.getLayout( ) );
+ configuration.setRefreshCronExpression( remoteRepository.getSchedulingDefinition( ) );
+ configuration.setCheckPath( remoteRepository.getCheckPath( ) );
+ configuration.setExtraHeaders( remoteRepository.getExtraHeaders( ) );
+ configuration.setExtraParameters( remoteRepository.getExtraParameters( ) );
+ configuration.setTimeout( (int) remoteRepository.getTimeout( ).getSeconds( ) );
+ RepositoryCredentials creds = remoteRepository.getLoginCredentials( );
+ if (creds!=null)
+ {
+ PasswordCredentials pwdCreds = (PasswordCredentials) creds;
+ configuration.setUsername( pwdCreds.getUsername( ) );
+ configuration.setPassword( new String( pwdCreds.getPassword( ) ) );
+ }
+ configuration.setUrl( remoteRepository.getLocation( ) == null ? "" : remoteRepository.getLocation().toString( ) );
+ RemoteIndexFeature rif = remoteRepository.getFeature( RemoteIndexFeature.class ).get( );
+ configuration.setDownloadRemoteIndex( rif.isDownloadRemoteIndex( ) );
+ configuration.setDownloadRemoteIndexOnStartup( rif.isDownloadRemoteIndexOnStartup( ) );
+ configuration.setIndexDir( rif.getIndexUri( )==null ? "" : rif.getIndexUri().toString( ) );
+ configuration.setRemoteDownloadNetworkProxyId( rif.getProxyId( ) );
+ return configuration;
+ }
+
+ @Override
+ public <T> void raise(RepositoryEvent<T> event) {
+
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/create-managed-to-proxy-map.sh b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/create-managed-to-proxy-map.sh
new file mode 100755
index 000000000..ffaaa584b
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/create-managed-to-proxy-map.sh
@@ -0,0 +1,60 @@
+#!/bin/bash
+
+
+MYWD=`pwd`
+
+function makeListing()
+{
+ LISTID=$1
+
+ cd $MYWD/$LISTID
+ find . -type f -not -wholename "*/\.*" | sort > $MYWD/$LISTID.tmp
+}
+
+function isInRepo()
+{
+ LISTID=$1
+ FILEID=$2
+
+ grep -q "$FILEID" $MYWD/$LISTID.tmp
+ RETCODE=$?
+ if [ $RETCODE -eq 0 ] ; then
+ LISTID=${LISTID/proxied/}
+ echo "[${LISTID:0:1}]"
+ else
+ echo " "
+ fi
+}
+
+makeListing "managed"
+makeListing "proxied1"
+makeListing "proxied2"
+
+cd $MYWD
+
+TS=`date`
+
+echo "$0 - executed on $TS"
+echo ""
+echo "Determining location of files."
+echo " Key: [m] == managed"
+echo " [1] == proxy 1 (proxied1)"
+echo " [2] == proxy 2 (proxied2)"
+echo ""
+echo " -m- -1- -2- | -------------------------------------------- "
+
+FILELIST=`cat managed.tmp proxied1.tmp proxied2.tmp | sort -u`
+
+for FF in $FILELIST
+do
+ INMANAGED=`isInRepo "managed" "$FF"`
+ INPROXY1=`isInRepo "proxied1" "$FF"`
+ INPROXY2=`isInRepo "proxied2" "$FF"`
+
+ echo " $INMANAGED $INPROXY1 $INPROXY2 | $FF"
+done
+
+echo " --- --- --- | -------------------------------------------- "
+
+rm -f managed.tmp proxied1.tmp proxied2.tmp
+
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed-to-proxy-map.txt b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed-to-proxy-map.txt
new file mode 100644
index 000000000..3b4967824
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed-to-proxy-map.txt
@@ -0,0 +1,89 @@
+./create-managed-to-proxy-map.sh - executed on Wed Aug 29 18:17:23 MST 2007
+
+Determining location of files.
+ Key: [m] == managed
+ [1] == proxy 1 (proxied1)
+ [2] == proxy 2 (proxied2)
+
+ -m- -1- -2- | --------------------------------------------
+ [m] [1] | ./org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar
+ [m] | ./org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar.md5
+ [m] | ./org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar.sha1
+ [1] | ./org/apache/maven/test/get-checksum-both-bad/1.0/get-checksum-both-bad-1.0.jar
+ [1] | ./org/apache/maven/test/get-checksum-both-bad/1.0/get-checksum-both-bad-1.0.jar.md5
+ [1] | ./org/apache/maven/test/get-checksum-both-bad/1.0/get-checksum-both-bad-1.0.jar.sha1
+ [1] | ./org/apache/maven/test/get-checksum-both-right/1.0/get-checksum-both-right-1.0.jar
+ [1] | ./org/apache/maven/test/get-checksum-both-right/1.0/get-checksum-both-right-1.0.jar.md5
+ [1] | ./org/apache/maven/test/get-checksum-both-right/1.0/get-checksum-both-right-1.0.jar.sha1
+ [m] [1] | ./org/apache/maven/test/get-checksum-from-managed-repo/1.0/get-checksum-from-managed-repo-1.0.jar.sha1
+ [1] | ./org/apache/maven/test/get-checksum-md5-bad-sha1/1.0/get-checksum-md5-bad-sha1-1.0.jar
+ [1] | ./org/apache/maven/test/get-checksum-md5-bad-sha1/1.0/get-checksum-md5-bad-sha1-1.0.jar.md5
+ [1] | ./org/apache/maven/test/get-checksum-md5-bad-sha1/1.0/get-checksum-md5-bad-sha1-1.0.jar.sha1
+ [1] | ./org/apache/maven/test/get-checksum-md5-only/1.0/get-checksum-md5-only-1.0.jar
+ [1] | ./org/apache/maven/test/get-checksum-md5-only/1.0/get-checksum-md5-only-1.0.jar.md5
+ [1] | ./org/apache/maven/test/get-checksum-sha1-bad-md5/1.0/get-checksum-sha1-bad-md5-1.0.jar
+ [1] | ./org/apache/maven/test/get-checksum-sha1-bad-md5/1.0/get-checksum-sha1-bad-md5-1.0.jar.md5
+ [1] | ./org/apache/maven/test/get-checksum-sha1-bad-md5/1.0/get-checksum-sha1-bad-md5-1.0.jar.sha1
+ [1] | ./org/apache/maven/test/get-checksum-sha1-only/1.0/get-checksum-sha1-only-1.0.jar
+ [1] | ./org/apache/maven/test/get-checksum-sha1-only/1.0/get-checksum-sha1-only-1.0.jar.sha1
+ [2] | ./org/apache/maven/test/get-default-layout/1.0.1/get-default-layout-1.0.1.pom
+ [1] [2] | ./org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar
+ [1] [2] | ./org/apache/maven/test/get-default-layout/1.0/maven-metadata.xml
+ [1] [2] | ./org/apache/maven/test/get-default-layout/maven-metadata.xml
+ [m] [1] | ./org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar
+ [m] | ./org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar.md5
+ [m] | ./org/apache/maven/test/get-default-layout-present-with-pom/1.0/get-default-layout-present-with-pom-1.0.jar
+ [m] | ./org/apache/maven/test/get-default-layout-present-with-pom/1.0/get-default-layout-present-with-pom-1.0.pom
+ [m] | ./org/apache/maven/test/get-default-metadata/1.0/get-default-metadata-1.0.jar
+ [m] [1] | ./org/apache/maven/test/get-default-metadata/1.0/maven-metadata.xml
+ [m] | ./org/apache/maven/test/get-doubly-relocated-artefact/1.0/get-doubly-relocated-artefact-1.0.pom
+ [1] | ./org/apache/maven/test/get-found-in-proxy/1.0.5/get-found-in-proxy-1.0.5-javadoc.jar
+ [1] | ./org/apache/maven/test/get-found-in-proxy/maven-metadata.xml
+ [1] [2] | ./org/apache/maven/test/get-in-both-proxies/1.0/get-in-both-proxies-1.0.jar
+ [2] | ./org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar
+ [m] [1] [2] | ./org/apache/maven/test/get-merged-metadata/maven-metadata.xml
+ [1] | ./org/apache/maven/test/get-metadata-snapshot/1.0-SNAPSHOT/get-metadata-snapshot-1.0-20050831.101112-1.jar
+ [1] | ./org/apache/maven/test/get-metadata-snapshot/1.0-SNAPSHOT/maven-metadata.xml
+ [m] | ./org/apache/maven/test/get-not-on-remotes/1.0-beta-2/get-not-on-remotes-1.0-beta-2.jar
+ [m] | ./org/apache/maven/test/get-not-on-remotes/1.0-beta-2/maven-metadata.xml
+ [m] | ./org/apache/maven/test/get-not-on-remotes/maven-metadata.xml
+ [m] | ./org/apache/maven/test/get-on-local-on-remote/1.0.22/get-on-local-on-remote-1.0.22.pom
+ [m] [1] | ./org/apache/maven/test/get-on-local-on-remote/1.0.22/maven-metadata.xml
+ [m] | ./org/apache/maven/test/get-on-local-on-remote/1.0.8/get-on-local-on-remote-1.0.8.pom
+ [m] [1] | ./org/apache/maven/test/get-on-local-on-remote/maven-metadata.xml
+ [m] | ./org/apache/maven/test/get-on-multiple-repos/1.0/get-on-multiple-repos-1.0.pom
+ [m] [1] [2] | ./org/apache/maven/test/get-on-multiple-repos/1.0/maven-metadata.xml
+ [m] [1] [2] | ./org/apache/maven/test/get-on-multiple-repos/maven-metadata.xml
+ [m] [1] | ./org/apache/maven/test/get-present-metadata-snapshot/1.0-SNAPSHOT/get-present-metadata-snapshot-1.0-20050831.101112-1.jar
+ [m] [1] | ./org/apache/maven/test/get-present-metadata-snapshot/1.0-SNAPSHOT/maven-metadata.xml
+ [m] [1] | ./org/apache/maven/test/get-present-timestamped-snapshot/1.0-SNAPSHOT/get-present-timestamped-snapshot-1.0-SNAPSHOT.jar
+ [m] | ./org/apache/maven/test/get-project-metadata/1.0/get-project-metadata-1.0.jar
+ [m] | ./org/apache/maven/test/get-project-metadata/1.1/get-project-metadata-1.1.jar
+ [m] | ./org/apache/maven/test/get-project-metadata/2.0/get-project-metadata-2.0.pom
+ [m] | ./org/apache/maven/test/get-project-metadata/maven-metadata.xml
+ [m] | ./org/apache/maven/test/get-release-metadata/2.2/get-release-metadata-2.2.jar
+ [m] | ./org/apache/maven/test/get-release-metadata/2.2/maven-metadata.xml
+ [m] | ./org/apache/maven/test/get-relocated-artefact/1.0/get-relocated-artefact-1.0.pom
+ [m] | ./org/apache/maven/test/get-relocated-artefact-with-pom/1.0/get-relocated-artefact-with-pom-1.0.pom
+ [m] | ./org/apache/maven/test/get-removed-from-proxies/1.0/get-removed-from-proxies-1.0.jar
+ [m] | ./org/apache/maven/test/get-removed-metadata/1.0/maven-metadata.xml
+ [m] | ./org/apache/maven/test/get-snapshot-on-local-not-remote/2.0-alpha-2-SNAPSHOT/get-snapshot-on-local-not-remote-2.0-alpha-2-20070821.123456-1.jar
+ [m] | ./org/apache/maven/test/get-snapshot-on-local-not-remote/2.0-alpha-2-SNAPSHOT/get-snapshot-on-local-not-remote-2.0-alpha-2-20070821.220304-2.jar
+ [m] | ./org/apache/maven/test/get-snapshot-on-local-not-remote/2.0-alpha-2-SNAPSHOT/maven-metadata.xml
+ [1] | ./org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070819.040004-1.jar
+ [m] [2] | ./org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070821.102030-1.jar
+ [m] | ./org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070821.185701-2.jar
+ [m] | ./org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070822.021008-3.jar
+ [1] | ./org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070822.145534-9.jar
+ [2] | ./org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070823.111741-5.jar
+ [2] | ./org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070823.212711-6.jar
+ [m] [1] [2] | ./org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/maven-metadata.xml
+ [1] | ./org/apache/maven/test/get-timestamped-snapshot/1.0-SNAPSHOT/get-timestamped-snapshot-1.0-SNAPSHOT.jar
+ [1] [2] | ./org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-20061222.034118-1.jar
+ [1] | ./org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-20061227.112101-2.jar
+ [2] | ./org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-20070101.000103-2.jar
+ [1] [2] | ./org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-SNAPSHOT.jar
+ [1] [2] | ./org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/maven-metadata.xml
+ [m] [1] | ./org/apache/maven/test/get-updated-metadata/1.0-SNAPSHOT/maven-metadata.xml
+ [m] [1] | ./org/apache/maven/test/get-updated-metadata/maven-metadata.xml
+ --- --- --- | --------------------------------------------
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar
new file mode 100644
index 000000000..62a1e1c71
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar
@@ -0,0 +1,3 @@
+get-bad-local-checksum-1.0.jar
+(managed)
+
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar.md5 b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar.md5
new file mode 100644
index 000000000..5fd0ae2b7
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar.md5
@@ -0,0 +1 @@
+invalid checksum file \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar.sha1 b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar.sha1
new file mode 100644
index 000000000..5fd0ae2b7
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar.sha1
@@ -0,0 +1 @@
+invalid checksum file \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-checksum-from-managed-repo/1.0/get-checksum-from-managed-repo-1.0.jar.sha1 b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-checksum-from-managed-repo/1.0/get-checksum-from-managed-repo-1.0.jar.sha1
new file mode 100644
index 000000000..5558e53ee
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-checksum-from-managed-repo/1.0/get-checksum-from-managed-repo-1.0.jar.sha1
@@ -0,0 +1 @@
+066d76e459f7782c312c31e8a11b3c0f1e3e43a7 *get-checksum-from-managed-repo-1.0.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-default-layout-present-with-pom/1.0/get-default-layout-present-with-pom-1.0.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-default-layout-present-with-pom/1.0/get-default-layout-present-with-pom-1.0.jar
new file mode 100644
index 000000000..a3b38382c
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-default-layout-present-with-pom/1.0/get-default-layout-present-with-pom-1.0.jar
@@ -0,0 +1,3 @@
+get-default-layout-present-1.0.jar
+(managed)
+
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-default-layout-present-with-pom/1.0/get-default-layout-present-with-pom-1.0.pom b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-default-layout-present-with-pom/1.0/get-default-layout-present-with-pom-1.0.pom
new file mode 100644
index 000000000..b2f94e307
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-default-layout-present-with-pom/1.0/get-default-layout-present-with-pom-1.0.pom
@@ -0,0 +1,24 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES 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>org.apache.maven.test</groupId>
+ <artifactId>get-default-layout-present-with-pom</artifactId>
+ <version>1.0</version>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar
new file mode 100644
index 000000000..a3b38382c
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar
@@ -0,0 +1,3 @@
+get-default-layout-present-1.0.jar
+(managed)
+
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar.asc b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar.asc
new file mode 100644
index 000000000..c3f4c234e
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar.asc
@@ -0,0 +1,7 @@
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.8 (Darwin)
+
+iEYEABECAAYFAkiAQxIACgkQTusOMqfRa9T2xACfcvI2fjAXoAHGwJm0zXPJ2rWW
+OPoAn23dSOEJhyNUY2hgUlH2wSQiADeP
+=ZOwh
+-----END PGP SIGNATURE-----
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar.md5 b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar.md5
new file mode 100644
index 000000000..b597d8ce4
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar.md5
@@ -0,0 +1 @@
+7dfb7ade9a8fa90bfbfac52d3090b8c2 *get-default-layout-present-1.0.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-default-metadata/1.0/get-default-metadata-1.0.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-default-metadata/1.0/get-default-metadata-1.0.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-default-metadata/1.0/get-default-metadata-1.0.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-default-metadata/1.0/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-default-metadata/1.0/maven-metadata.xml
new file mode 100644
index 000000000..e008e501c
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-default-metadata/1.0/maven-metadata.xml
@@ -0,0 +1,24 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT 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>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-default-metadata</artifactId>
+ <version>1.0</version>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-doubly-relocated-artefact/1.0/get-doubly-relocated-artefact-1.0.pom b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-doubly-relocated-artefact/1.0/get-doubly-relocated-artefact-1.0.pom
new file mode 100644
index 000000000..f8c149eb6
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-doubly-relocated-artefact/1.0/get-doubly-relocated-artefact-1.0.pom
@@ -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>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-doubly-relocated-artefact</artifactId>
+ <version>1.0</version>
+
+ <distributionManagement>
+ <relocation>
+ <artifactId>get-relocated-artefact</artifactId>
+ </relocation>
+ </distributionManagement>
+
+</project> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-merged-metadata/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-merged-metadata/maven-metadata.xml
new file mode 100644
index 000000000..00af1a181
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-merged-metadata/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-merged-metadata</artifactId>
+ <versioning>
+ <versions>
+ <version>0.9</version>
+ <!-- unique -->
+ <version>1.0</version>
+ <!-- merged with proxied2 -->
+ <version>2.0</version>
+ <!-- merged with proxied1 -->
+ </versions>
+ </versioning>
+</metadata> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-not-on-remotes/1.0-beta-2/get-not-on-remotes-1.0-beta-2.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-not-on-remotes/1.0-beta-2/get-not-on-remotes-1.0-beta-2.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-not-on-remotes/1.0-beta-2/get-not-on-remotes-1.0-beta-2.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-not-on-remotes/1.0-beta-2/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-not-on-remotes/1.0-beta-2/maven-metadata.xml
new file mode 100644
index 000000000..965b836c0
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-not-on-remotes/1.0-beta-2/maven-metadata.xml
@@ -0,0 +1,24 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT 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>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-not-on-remotes</artifactId>
+ <version>1.0-beta-2</version>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-not-on-remotes/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-not-on-remotes/maven-metadata.xml
new file mode 100644
index 000000000..4eef73fd4
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-not-on-remotes/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-not-on-remotes</artifactId>
+ <versioning>
+ <versions>
+ <version>1.0-beta-2</version>
+ </versions>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-on-local-on-remote/1.0.22/get-on-local-on-remote-1.0.22.pom b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-on-local-on-remote/1.0.22/get-on-local-on-remote-1.0.22.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-on-local-on-remote/1.0.22/get-on-local-on-remote-1.0.22.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-on-local-on-remote/1.0.22/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-on-local-on-remote/1.0.22/maven-metadata.xml
new file mode 100644
index 000000000..6fece769d
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-on-local-on-remote/1.0.22/maven-metadata.xml
@@ -0,0 +1,24 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT 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>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-on-local-on-remote</artifactId>
+ <version>1.0.22</version>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-on-local-on-remote/1.0.8/get-on-local-on-remote-1.0.8.pom b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-on-local-on-remote/1.0.8/get-on-local-on-remote-1.0.8.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-on-local-on-remote/1.0.8/get-on-local-on-remote-1.0.8.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-on-local-on-remote/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-on-local-on-remote/maven-metadata.xml
new file mode 100644
index 000000000..9ae11e4d7
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-on-local-on-remote/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-on-local-on-remote</artifactId>
+ <versioning>
+ <versions>
+ <version>1.0.8</version>
+ <version>1.0.22</version>
+ </versions>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-on-multiple-repos/1.0/get-on-multiple-repos-1.0.pom b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-on-multiple-repos/1.0/get-on-multiple-repos-1.0.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-on-multiple-repos/1.0/get-on-multiple-repos-1.0.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-on-multiple-repos/1.0/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-on-multiple-repos/1.0/maven-metadata.xml
new file mode 100644
index 000000000..6bfd5dd9a
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-on-multiple-repos/1.0/maven-metadata.xml
@@ -0,0 +1,24 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT 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>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-on-multiple-repos</artifactId>
+ <version>1.0</version>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-on-multiple-repos/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-on-multiple-repos/maven-metadata.xml
new file mode 100644
index 000000000..04b49855d
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-on-multiple-repos/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-on-multiple-repos</artifactId>
+ <versioning>
+ <versions>
+ <version>1.0</version>
+ </versions>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-present-metadata-snapshot/1.0-SNAPSHOT/get-present-metadata-snapshot-1.0-20050831.101112-1.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-present-metadata-snapshot/1.0-SNAPSHOT/get-present-metadata-snapshot-1.0-20050831.101112-1.jar
new file mode 100644
index 000000000..b71eb7b74
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-present-metadata-snapshot/1.0-SNAPSHOT/get-present-metadata-snapshot-1.0-20050831.101112-1.jar
@@ -0,0 +1,2 @@
+get-present-metadata-snapshot-1.0-20050831.101112-1.jar
+(managed) \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-present-metadata-snapshot/1.0-SNAPSHOT/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-present-metadata-snapshot/1.0-SNAPSHOT/maven-metadata.xml
new file mode 100644
index 000000000..dd7496af5
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-present-metadata-snapshot/1.0-SNAPSHOT/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-present-metadata-snapshot</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <versioning>
+ <snapshot>
+ <timestamp>20050831.101112</timestamp>
+ <buildNumber>1</buildNumber>
+ </snapshot>
+ <lastUpdated>20050831101112</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-present-timestamped-snapshot/1.0-SNAPSHOT/get-present-timestamped-snapshot-1.0-SNAPSHOT.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-present-timestamped-snapshot/1.0-SNAPSHOT/get-present-timestamped-snapshot-1.0-SNAPSHOT.jar
new file mode 100644
index 000000000..0c2d93e3c
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-present-timestamped-snapshot/1.0-SNAPSHOT/get-present-timestamped-snapshot-1.0-SNAPSHOT.jar
@@ -0,0 +1,2 @@
+get-present-timestamped-snapshot-1.0-SNAPSHOT.jar
+(managed) \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-project-metadata/1.0/get-project-metadata-1.0.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-project-metadata/1.0/get-project-metadata-1.0.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-project-metadata/1.0/get-project-metadata-1.0.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-project-metadata/1.1/get-project-metadata-1.1.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-project-metadata/1.1/get-project-metadata-1.1.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-project-metadata/1.1/get-project-metadata-1.1.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-project-metadata/2.0/get-project-metadata-2.0.pom b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-project-metadata/2.0/get-project-metadata-2.0.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-project-metadata/2.0/get-project-metadata-2.0.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-project-metadata/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-project-metadata/maven-metadata.xml
new file mode 100644
index 000000000..a9fd6ef34
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-project-metadata/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-project-metadata</artifactId>
+ <versioning>
+ <versions>
+ <version>1.0</version>
+ </versions>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-release-metadata/2.2/get-release-metadata-2.2.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-release-metadata/2.2/get-release-metadata-2.2.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-release-metadata/2.2/get-release-metadata-2.2.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-release-metadata/2.2/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-release-metadata/2.2/maven-metadata.xml
new file mode 100644
index 000000000..8fc2a153f
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-release-metadata/2.2/maven-metadata.xml
@@ -0,0 +1,24 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT 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>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-release-metadata</artifactId>
+ <version>2.2</version>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-relocated-artefact-with-pom/1.0/get-relocated-artefact-with-pom-1.0.pom b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-relocated-artefact-with-pom/1.0/get-relocated-artefact-with-pom-1.0.pom
new file mode 100644
index 000000000..384f369f5
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-relocated-artefact-with-pom/1.0/get-relocated-artefact-with-pom-1.0.pom
@@ -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>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-relocated-artefact-with-pom</artifactId>
+ <version>1.0</version>
+
+ <distributionManagement>
+ <relocation>
+ <artifactId>get-default-layout-present-with-pom</artifactId>
+ </relocation>
+ </distributionManagement>
+
+</project> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-relocated-artefact/1.0/get-relocated-artefact-1.0.pom b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-relocated-artefact/1.0/get-relocated-artefact-1.0.pom
new file mode 100644
index 000000000..ae50586ec
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-relocated-artefact/1.0/get-relocated-artefact-1.0.pom
@@ -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>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-relocated-artefact</artifactId>
+ <version>1.0</version>
+
+ <distributionManagement>
+ <relocation>
+ <artifactId>get-default-layout-present</artifactId>
+ </relocation>
+ </distributionManagement>
+
+</project> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-removed-from-proxies/1.0/get-removed-from-proxies-1.0.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-removed-from-proxies/1.0/get-removed-from-proxies-1.0.jar
new file mode 100644
index 000000000..54dc5ee86
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-removed-from-proxies/1.0/get-removed-from-proxies-1.0.jar
@@ -0,0 +1,3 @@
+get-removed-from-proxies-1.0.jar
+(managed)
+
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-removed-metadata/1.0/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-removed-metadata/1.0/maven-metadata.xml
new file mode 100644
index 000000000..f2c41db2e
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-removed-metadata/1.0/maven-metadata.xml
@@ -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.
+ -->
+
+<metadata>
+
+</metadata> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-snapshot-on-local-not-remote/2.0-alpha-2-SNAPSHOT/get-snapshot-on-local-not-remote-2.0-alpha-2-20070821.123456-1.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-snapshot-on-local-not-remote/2.0-alpha-2-SNAPSHOT/get-snapshot-on-local-not-remote-2.0-alpha-2-20070821.123456-1.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-snapshot-on-local-not-remote/2.0-alpha-2-SNAPSHOT/get-snapshot-on-local-not-remote-2.0-alpha-2-20070821.123456-1.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-snapshot-on-local-not-remote/2.0-alpha-2-SNAPSHOT/get-snapshot-on-local-not-remote-2.0-alpha-2-20070821.220304-2.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-snapshot-on-local-not-remote/2.0-alpha-2-SNAPSHOT/get-snapshot-on-local-not-remote-2.0-alpha-2-20070821.220304-2.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-snapshot-on-local-not-remote/2.0-alpha-2-SNAPSHOT/get-snapshot-on-local-not-remote-2.0-alpha-2-20070821.220304-2.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-snapshot-on-local-not-remote/2.0-alpha-2-SNAPSHOT/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-snapshot-on-local-not-remote/2.0-alpha-2-SNAPSHOT/maven-metadata.xml
new file mode 100644
index 000000000..55e1f3039
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-snapshot-on-local-not-remote/2.0-alpha-2-SNAPSHOT/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-snapshot-on-local-not-remote</artifactId>
+ <version>2.0-alpha-2-SNAPSHOT</version>
+ <versioning>
+ <snapshot>
+ <timestamp>20070821.220304</timestamp>
+ <buildNumber>2</buildNumber>
+ </snapshot>
+ <lastUpdated>20070821220304</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070821.102030-1.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070821.102030-1.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070821.102030-1.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070821.185701-2.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070821.185701-2.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070821.185701-2.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070822.021008-3.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070822.021008-3.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070822.021008-3.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/maven-metadata.xml
new file mode 100644
index 000000000..55e253e89
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-snapshot-popular</artifactId>
+ <version>2.0-SNAPSHOT</version>
+ <versioning>
+ <snapshot>
+ <timestamp>20070822.021008</timestamp>
+ <buildNumber>3</buildNumber>
+ </snapshot>
+ <lastUpdated>20070822021008</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-updated-metadata/.metadata-proxied1 b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-updated-metadata/.metadata-proxied1
new file mode 100644
index 000000000..2a83df1ce
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-updated-metadata/.metadata-proxied1
@@ -0,0 +1,25 @@
+<!--
+ ~ 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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-updated-metadata</artifactId>
+ <versioning>
+ <versions>
+ <version>1.0</version>
+ </versions>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-updated-metadata/1.0-SNAPSHOT/.metadata-proxied1 b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-updated-metadata/1.0-SNAPSHOT/.metadata-proxied1
new file mode 100644
index 000000000..cd7216a64
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-updated-metadata/1.0-SNAPSHOT/.metadata-proxied1
@@ -0,0 +1,27 @@
+<!--
+ ~ 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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-updated-metadata</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <versioning>
+ <snapshot>
+ <timestamp>20050831.1011112</timestamp>
+ <buildNumber>1</buildNumber>
+ </snapshot>
+ </versioning>
+</metadata> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-updated-metadata/1.0-SNAPSHOT/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-updated-metadata/1.0-SNAPSHOT/maven-metadata.xml
new file mode 100644
index 000000000..e9830b0fb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-updated-metadata/1.0-SNAPSHOT/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-updated-metadata</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <versioning>
+ <snapshot>
+ <timestamp>20050831.1011112</timestamp>
+ <buildNumber>1</buildNumber>
+ </snapshot>
+ </versioning>
+</metadata> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-updated-metadata/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-updated-metadata/maven-metadata.xml
new file mode 100644
index 000000000..242873e10
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/get-updated-metadata/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-updated-metadata</artifactId>
+ <versioning>
+ <versions>
+ <version>1.0</version>
+ </versions>
+ </versioning>
+</metadata> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/groups/get-not-on-remotes/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/groups/get-not-on-remotes/maven-metadata.xml
new file mode 100644
index 000000000..6053adcf4
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/groups/get-not-on-remotes/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test.groups.get-not-on-remotes</groupId>
+ <plugins>
+ <plugin>
+ <prefix>plugin5</prefix>
+ <artifactId>plugin5-maven-plugin</artifactId>
+ <name>The plugin5 Plugin</name>
+ </plugin>
+ </plugins>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/groups/get-on-local-on-remote/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/groups/get-on-local-on-remote/maven-metadata.xml
new file mode 100644
index 000000000..14196bdc1
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/groups/get-on-local-on-remote/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test.groups.get-on-local-on-remote</groupId>
+ <plugins>
+ <plugin>
+ <prefix>plugin6</prefix>
+ <artifactId>plugin6-maven-plugin</artifactId>
+ <name>The plugin6 Plugin</name>
+ </plugin>
+ <plugin>
+ <prefix>plugin7</prefix>
+ <artifactId>plugin7-maven-plugin</artifactId>
+ <name>The plugin7 Plugin</name>
+ </plugin>
+ </plugins>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/groups/get-on-multiple-repos/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/groups/get-on-multiple-repos/maven-metadata.xml
new file mode 100644
index 000000000..a04428913
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/groups/get-on-multiple-repos/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test.groups.get-on-multiple-repos</groupId>
+ <plugins>
+ <plugin>
+ <prefix>plugin1</prefix>
+ <artifactId>plugin1-maven-plugin</artifactId>
+ <name>The plugin1 Plugin</name>
+ </plugin>
+ </plugins>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/groups/get-project-metadata/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/groups/get-project-metadata/maven-metadata.xml
new file mode 100644
index 000000000..e0829c112
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/managed/org/apache/maven/test/groups/get-project-metadata/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test.groups.get-project-metadata</groupId>
+ <plugins>
+ <plugin>
+ <prefix>plugin1</prefix>
+ <artifactId>plugin1-maven-plugin</artifactId>
+ <name>The plugin1 Plugin</name>
+ </plugin>
+ </plugins>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar
new file mode 100644
index 000000000..b5d8045c9
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar
@@ -0,0 +1,3 @@
+get-bad-local-checksum-1.0.jar
+(proxied 1)
+
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-both-bad/1.0/get-checksum-both-bad-1.0.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-both-bad/1.0/get-checksum-both-bad-1.0.jar
new file mode 100644
index 000000000..98fae8093
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-both-bad/1.0/get-checksum-both-bad-1.0.jar
@@ -0,0 +1,2 @@
+get-checksum-both-bad-1.0.jar
+
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-both-bad/1.0/get-checksum-both-bad-1.0.jar.md5 b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-both-bad/1.0/get-checksum-both-bad-1.0.jar.md5
new file mode 100644
index 000000000..5fd0ae2b7
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-both-bad/1.0/get-checksum-both-bad-1.0.jar.md5
@@ -0,0 +1 @@
+invalid checksum file \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-both-bad/1.0/get-checksum-both-bad-1.0.jar.sha1 b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-both-bad/1.0/get-checksum-both-bad-1.0.jar.sha1
new file mode 100644
index 000000000..cf3e1ef62
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-both-bad/1.0/get-checksum-both-bad-1.0.jar.sha1
@@ -0,0 +1 @@
+invalid checksum file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-both-right/1.0/get-checksum-both-right-1.0.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-both-right/1.0/get-checksum-both-right-1.0.jar
new file mode 100644
index 000000000..7fa9ec4a0
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-both-right/1.0/get-checksum-both-right-1.0.jar
@@ -0,0 +1 @@
+get-checksum-both-right-1.0.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-both-right/1.0/get-checksum-both-right-1.0.jar.md5 b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-both-right/1.0/get-checksum-both-right-1.0.jar.md5
new file mode 100644
index 000000000..9b9e3374c
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-both-right/1.0/get-checksum-both-right-1.0.jar.md5
@@ -0,0 +1 @@
+e58f30c6a150a2e843552438d18e15cb *get-checksum-both-right-1.0.jar \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-both-right/1.0/get-checksum-both-right-1.0.jar.sha1 b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-both-right/1.0/get-checksum-both-right-1.0.jar.sha1
new file mode 100644
index 000000000..6661b7da5
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-both-right/1.0/get-checksum-both-right-1.0.jar.sha1
@@ -0,0 +1 @@
+066d76e459f7782c312c31e8a11b3c0f1e3e43a7 *get-checksum-both-right-1.0.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-from-managed-repo/1.0/get-checksum-from-managed-repo-1.0.jar.sha1 b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-from-managed-repo/1.0/get-checksum-from-managed-repo-1.0.jar.sha1
new file mode 100644
index 000000000..c2fea5868
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-from-managed-repo/1.0/get-checksum-from-managed-repo-1.0.jar.sha1
@@ -0,0 +1,2 @@
+066d76e459f7782c312c31e8a11b3c0f1e3e43a7 *get-checksum-from-managed-repo-1.0.jar
+(proxied 1)
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-md5-bad-sha1/1.0/get-checksum-md5-bad-sha1-1.0.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-md5-bad-sha1/1.0/get-checksum-md5-bad-sha1-1.0.jar
new file mode 100644
index 000000000..68e3480fc
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-md5-bad-sha1/1.0/get-checksum-md5-bad-sha1-1.0.jar
@@ -0,0 +1,2 @@
+get-checksum-md5-bad-sha1-1.0.jar
+
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-md5-bad-sha1/1.0/get-checksum-md5-bad-sha1-1.0.jar.md5 b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-md5-bad-sha1/1.0/get-checksum-md5-bad-sha1-1.0.jar.md5
new file mode 100644
index 000000000..d785caa7f
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-md5-bad-sha1/1.0/get-checksum-md5-bad-sha1-1.0.jar.md5
@@ -0,0 +1 @@
+8a02aa67549d27b2a03cd4547439c6d3 *get-checksum-md5-bad-sha1-1.0.jar \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-md5-bad-sha1/1.0/get-checksum-md5-bad-sha1-1.0.jar.sha1 b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-md5-bad-sha1/1.0/get-checksum-md5-bad-sha1-1.0.jar.sha1
new file mode 100644
index 000000000..cf3e1ef62
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-md5-bad-sha1/1.0/get-checksum-md5-bad-sha1-1.0.jar.sha1
@@ -0,0 +1 @@
+invalid checksum file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-md5-only/1.0/get-checksum-md5-only-1.0.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-md5-only/1.0/get-checksum-md5-only-1.0.jar
new file mode 100644
index 000000000..915323d0e
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-md5-only/1.0/get-checksum-md5-only-1.0.jar
@@ -0,0 +1,2 @@
+get-checksum-md5-only-1.0.jar
+
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-md5-only/1.0/get-checksum-md5-only-1.0.jar.md5 b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-md5-only/1.0/get-checksum-md5-only-1.0.jar.md5
new file mode 100644
index 000000000..0e8431f4b
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-md5-only/1.0/get-checksum-md5-only-1.0.jar.md5
@@ -0,0 +1 @@
+f3af5201bf8da801da37db8842846e1c *get-checksum-md5-only-1.0.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-sha1-bad-md5/1.0/get-checksum-sha1-bad-md5-1.0.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-sha1-bad-md5/1.0/get-checksum-sha1-bad-md5-1.0.jar
new file mode 100644
index 000000000..f02c91843
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-sha1-bad-md5/1.0/get-checksum-sha1-bad-md5-1.0.jar
@@ -0,0 +1,2 @@
+get-checksum-sha1-bad-md5-1.0.jar
+
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-sha1-bad-md5/1.0/get-checksum-sha1-bad-md5-1.0.jar.md5 b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-sha1-bad-md5/1.0/get-checksum-sha1-bad-md5-1.0.jar.md5
new file mode 100644
index 000000000..cf3e1ef62
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-sha1-bad-md5/1.0/get-checksum-sha1-bad-md5-1.0.jar.md5
@@ -0,0 +1 @@
+invalid checksum file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-sha1-bad-md5/1.0/get-checksum-sha1-bad-md5-1.0.jar.sha1 b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-sha1-bad-md5/1.0/get-checksum-sha1-bad-md5-1.0.jar.sha1
new file mode 100644
index 000000000..3e2d43198
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-sha1-bad-md5/1.0/get-checksum-sha1-bad-md5-1.0.jar.sha1
@@ -0,0 +1 @@
+3dd1a3a57b807d3ef3fbc6013d926c891cbb8670 *get-checksum-sha1-bad-md5-1.0.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-sha1-only/1.0/get-checksum-sha1-only-1.0.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-sha1-only/1.0/get-checksum-sha1-only-1.0.jar
new file mode 100644
index 000000000..efd9ed015
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-sha1-only/1.0/get-checksum-sha1-only-1.0.jar
@@ -0,0 +1,2 @@
+get-checksum-sha1-only-1.0.jar
+
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-sha1-only/1.0/get-checksum-sha1-only-1.0.jar.sha1 b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-sha1-only/1.0/get-checksum-sha1-only-1.0.jar.sha1
new file mode 100644
index 000000000..e64dccfd8
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-checksum-sha1-only/1.0/get-checksum-sha1-only-1.0.jar.sha1
@@ -0,0 +1 @@
+748a3a013bf5eacf2bbb40a2ac7d37889b728837 *get-checksum-sha1-only-1.0.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar
new file mode 100644
index 000000000..15fd36d5d
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar
@@ -0,0 +1,3 @@
+get-default-layout-present-1.0.jar
+(proxied 1)
+
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar.asc b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar.asc
new file mode 100644
index 000000000..07bf0cfd6
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar.asc
@@ -0,0 +1 @@
+THIS IS THE WRONG CONTENT!
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar
new file mode 100644
index 000000000..a129891a7
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar
@@ -0,0 +1,2 @@
+get-default-layout-1.0.jar
+
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar.asc b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar.asc
new file mode 100644
index 000000000..bf07c716d
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar.asc
@@ -0,0 +1,7 @@
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.8 (Darwin)
+
+iEUEABECAAYFAkiAKPMACgkQTusOMqfRa9RpcQCfUsvdYGZ7P97TYXzQ0MclsV2r
+ASkAmJNCpmKjersaTXmsCupNGAJu38c=
+=/yRo
+-----END PGP SIGNATURE-----
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-default-layout/1.0/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-default-layout/1.0/maven-metadata.xml
new file mode 100644
index 000000000..22dc39c2d
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-default-layout/1.0/maven-metadata.xml
@@ -0,0 +1,24 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT 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>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-default-layout</artifactId>
+ <version>1.0</version>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-default-layout/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-default-layout/maven-metadata.xml
new file mode 100644
index 000000000..65d343154
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-default-layout/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-default-layout</artifactId>
+ <versioning>
+ <versions>
+ <version>1.0</version>
+ </versions>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-default-metadata/1.0/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-default-metadata/1.0/maven-metadata.xml
new file mode 100644
index 000000000..f53003c56
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-default-metadata/1.0/maven-metadata.xml
@@ -0,0 +1,24 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT 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>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-default-metadata</artifactId>
+ <version>1.0</version>
+</metadata> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-found-in-proxy/1.0.5/get-found-in-proxy-1.0.5-javadoc.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-found-in-proxy/1.0.5/get-found-in-proxy-1.0.5-javadoc.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-found-in-proxy/1.0.5/get-found-in-proxy-1.0.5-javadoc.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-found-in-proxy/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-found-in-proxy/maven-metadata.xml
new file mode 100644
index 000000000..10e06230c
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-found-in-proxy/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-found-in-proxy</artifactId>
+ <versioning>
+ <versions>
+ <version>1.0.5</version>
+ </versions>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-in-both-proxies/1.0/get-in-both-proxies-1.0.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-in-both-proxies/1.0/get-in-both-proxies-1.0.jar
new file mode 100644
index 000000000..3cc35fa29
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-in-both-proxies/1.0/get-in-both-proxies-1.0.jar
@@ -0,0 +1,3 @@
+get-in-both-proxies-1.0.jar
+(proxied 1)
+
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-merged-metadata/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-merged-metadata/maven-metadata.xml
new file mode 100644
index 000000000..6f9ac0f52
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-merged-metadata/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-merged-metadata</artifactId>
+ <versioning>
+ <versions>
+ <version>2.0</version>
+ <!-- merge with managed -->
+ <version>3.0</version>
+ <!-- merge with proxied2 -->
+ <version>5.0</version>
+ <!-- unique -->
+ </versions>
+ </versioning>
+</metadata> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-metadata-snapshot/1.0-SNAPSHOT/get-metadata-snapshot-1.0-20050831.101112-1.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-metadata-snapshot/1.0-SNAPSHOT/get-metadata-snapshot-1.0-20050831.101112-1.jar
new file mode 100644
index 000000000..139c17b97
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-metadata-snapshot/1.0-SNAPSHOT/get-metadata-snapshot-1.0-20050831.101112-1.jar
@@ -0,0 +1 @@
+get-metadata-snapshot-1.0-SNAPSHOT.jar \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-metadata-snapshot/1.0-SNAPSHOT/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-metadata-snapshot/1.0-SNAPSHOT/maven-metadata.xml
new file mode 100644
index 000000000..7ac63f44a
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-metadata-snapshot/1.0-SNAPSHOT/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-metadata-snapshot</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <versioning>
+ <snapshot>
+ <timestamp>20050831.101112</timestamp>
+ <buildNumber>1</buildNumber>
+ </snapshot>
+ <lastUpdated>20050831101112</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-on-local-on-remote/1.0.22/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-on-local-on-remote/1.0.22/maven-metadata.xml
new file mode 100644
index 000000000..6fece769d
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-on-local-on-remote/1.0.22/maven-metadata.xml
@@ -0,0 +1,24 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT 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>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-on-local-on-remote</artifactId>
+ <version>1.0.22</version>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-on-local-on-remote/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-on-local-on-remote/maven-metadata.xml
new file mode 100644
index 000000000..583a5e1cf
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-on-local-on-remote/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-on-local-on-remote</artifactId>
+ <versioning>
+ <versions>
+ <version>1.0.22</version>
+ <version>2.0</version>
+ </versions>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-on-multiple-repos/1.0/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-on-multiple-repos/1.0/maven-metadata.xml
new file mode 100644
index 000000000..6bfd5dd9a
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-on-multiple-repos/1.0/maven-metadata.xml
@@ -0,0 +1,24 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT 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>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-on-multiple-repos</artifactId>
+ <version>1.0</version>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-on-multiple-repos/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-on-multiple-repos/maven-metadata.xml
new file mode 100644
index 000000000..0f4e941e8
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-on-multiple-repos/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-on-multiple-repos</artifactId>
+ <versioning>
+ <versions>
+ <version>1.0</version>
+ <version>2.0</version>
+ </versions>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-present-metadata-snapshot/1.0-SNAPSHOT/get-present-metadata-snapshot-1.0-20050831.101112-1.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-present-metadata-snapshot/1.0-SNAPSHOT/get-present-metadata-snapshot-1.0-20050831.101112-1.jar
new file mode 100644
index 000000000..8bbffa00f
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-present-metadata-snapshot/1.0-SNAPSHOT/get-present-metadata-snapshot-1.0-20050831.101112-1.jar
@@ -0,0 +1,2 @@
+get-present-metadata-snapshot-1.0-20050831.101112-1.jar
+(proxied 1) \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-present-metadata-snapshot/1.0-SNAPSHOT/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-present-metadata-snapshot/1.0-SNAPSHOT/maven-metadata.xml
new file mode 100644
index 000000000..dd7496af5
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-present-metadata-snapshot/1.0-SNAPSHOT/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-present-metadata-snapshot</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <versioning>
+ <snapshot>
+ <timestamp>20050831.101112</timestamp>
+ <buildNumber>1</buildNumber>
+ </snapshot>
+ <lastUpdated>20050831101112</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-present-timestamped-snapshot/1.0-SNAPSHOT/get-present-timestamped-snapshot-1.0-SNAPSHOT.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-present-timestamped-snapshot/1.0-SNAPSHOT/get-present-timestamped-snapshot-1.0-SNAPSHOT.jar
new file mode 100644
index 000000000..0bf178413
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-present-timestamped-snapshot/1.0-SNAPSHOT/get-present-timestamped-snapshot-1.0-SNAPSHOT.jar
@@ -0,0 +1,2 @@
+get-present-timestamped-snapshot-1.0-SNAPSHOT.jar
+(proxied 1) \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070819.040004-1.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070819.040004-1.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070819.040004-1.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070822.145534-9.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070822.145534-9.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070822.145534-9.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/maven-metadata.xml
new file mode 100644
index 000000000..c2c6983a9
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-snapshot-popular</artifactId>
+ <version>2.0-SNAPSHOT</version>
+ <versioning>
+ <snapshot>
+ <timestamp>20070822.145534</timestamp>
+ <buildNumber>9</buildNumber>
+ </snapshot>
+ <lastUpdated>20070822145534</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-20061222.034118-1.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-20061222.034118-1.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-20061222.034118-1.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-20061227.112101-2.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-20061227.112101-2.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-20061227.112101-2.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-SNAPSHOT.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-SNAPSHOT.jar
new file mode 100644
index 000000000..dfacfaa15
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-SNAPSHOT.jar
@@ -0,0 +1,2 @@
+get-timestamped-snapshot-in-both-1.0-SNAPSHOT.jar
+(proxied 1) \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/maven-metadata.xml
new file mode 100644
index 000000000..55b9bd28a
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-timestamped-snapshot-in-both</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <versioning>
+ <snapshot>
+ <timestamp>20061227.112101</timestamp>
+ <buildNumber>2</buildNumber>
+ </snapshot>
+ <lastUpdated>20061227112101</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-timestamped-snapshot/1.0-SNAPSHOT/get-timestamped-snapshot-1.0-SNAPSHOT.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-timestamped-snapshot/1.0-SNAPSHOT/get-timestamped-snapshot-1.0-SNAPSHOT.jar
new file mode 100644
index 000000000..af86df92f
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-timestamped-snapshot/1.0-SNAPSHOT/get-timestamped-snapshot-1.0-SNAPSHOT.jar
@@ -0,0 +1 @@
+get-timestamped-snapshot-1.0-SNAPSHOT.jar \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-updated-metadata/1.0-SNAPSHOT/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-updated-metadata/1.0-SNAPSHOT/maven-metadata.xml
new file mode 100644
index 000000000..5005e6c0e
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-updated-metadata/1.0-SNAPSHOT/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-updated-metadata</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <versioning>
+ <snapshot>
+ <timestamp>20050831.111213</timestamp>
+ <buildNumber>2</buildNumber>
+ </snapshot>
+ </versioning>
+</metadata> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-updated-metadata/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-updated-metadata/maven-metadata.xml
new file mode 100644
index 000000000..085576ddb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/get-updated-metadata/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-updated-metadata</artifactId>
+ <versioning>
+ <versions>
+ <version>1.0</version>
+ <version>2.0</version>
+ </versions>
+ </versioning>
+</metadata> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/groups/get-default-layout/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/groups/get-default-layout/maven-metadata.xml
new file mode 100644
index 000000000..9f6bf9239
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/groups/get-default-layout/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test.groups.get-default-layout</groupId>
+ <plugins>
+ <plugin>
+ <prefix>plugin1</prefix>
+ <artifactId>plugin1-maven-plugin</artifactId>
+ <name>The plugin1 Plugin</name>
+ </plugin>
+ </plugins>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/groups/get-found-in-proxy/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/groups/get-found-in-proxy/maven-metadata.xml
new file mode 100644
index 000000000..90102867a
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/groups/get-found-in-proxy/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test.groups.get-found-in-proxy</groupId>
+ <plugins>
+ <plugin>
+ <prefix>plugin3</prefix>
+ <artifactId>plugin3-maven-plugin</artifactId>
+ <name>The plugin3 Plugin</name>
+ </plugin>
+ </plugins>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/groups/get-on-local-on-remote/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/groups/get-on-local-on-remote/maven-metadata.xml
new file mode 100644
index 000000000..23f12bbf1
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/groups/get-on-local-on-remote/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test.groups.get-on-local-on-remote</groupId>
+ <plugins>
+ <plugin>
+ <prefix>plugin7</prefix>
+ <artifactId>plugin7-maven-plugin</artifactId>
+ <name>The plugin7 Plugin</name>
+ </plugin>
+ <plugin>
+ <prefix>plugin4</prefix>
+ <artifactId>plugin4-maven-plugin</artifactId>
+ <name>The plugin4 Plugin</name>
+ </plugin>
+ </plugins>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/groups/get-on-multiple-repos/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/groups/get-on-multiple-repos/maven-metadata.xml
new file mode 100644
index 000000000..3abe069e7
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied1/org/apache/maven/test/groups/get-on-multiple-repos/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test.groups.get-on-multiple-repos</groupId>
+ <plugins>
+ <plugin>
+ <prefix>plugin1</prefix>
+ <artifactId>plugin1-maven-plugin</artifactId>
+ <name>The plugin1 Plugin</name>
+ </plugin>
+ <plugin>
+ <prefix>plugin4</prefix>
+ <artifactId>plugin4-maven-plugin</artifactId>
+ <name>The plugin4 Plugin</name>
+ </plugin>
+ </plugins>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-default-layout/1.0.1/get-default-layout-1.0.1.pom b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-default-layout/1.0.1/get-default-layout-1.0.1.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-default-layout/1.0.1/get-default-layout-1.0.1.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar
new file mode 100644
index 000000000..a129891a7
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar
@@ -0,0 +1,2 @@
+get-default-layout-1.0.jar
+
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-default-layout/1.0/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-default-layout/1.0/maven-metadata.xml
new file mode 100644
index 000000000..22dc39c2d
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-default-layout/1.0/maven-metadata.xml
@@ -0,0 +1,24 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT 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>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-default-layout</artifactId>
+ <version>1.0</version>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-default-layout/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-default-layout/maven-metadata.xml
new file mode 100644
index 000000000..2d76cccb2
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-default-layout/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-default-layout</artifactId>
+ <versioning>
+ <versions>
+ <version>1.0.1</version>
+ </versions>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-in-both-proxies/1.0/get-in-both-proxies-1.0.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-in-both-proxies/1.0/get-in-both-proxies-1.0.jar
new file mode 100644
index 000000000..e46d60ac3
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-in-both-proxies/1.0/get-in-both-proxies-1.0.jar
@@ -0,0 +1,3 @@
+get-in-both-proxies-1.0.jar
+(proxied 2)
+
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar
new file mode 100644
index 000000000..3460f656d
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar
@@ -0,0 +1,2 @@
+get-in-second-proxy-1.0.jar
+
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-merged-metadata/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-merged-metadata/maven-metadata.xml
new file mode 100644
index 000000000..a8d714f84
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-merged-metadata/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-merged-metadata</artifactId>
+ <versioning>
+ <versions>
+ <version>1.0</version>
+ <!-- merged with managed -->
+ <version>3.0</version>
+ <!-- merged with proxied1 -->
+ <version>4.0</version>
+ <!-- unique -->
+ </versions>
+ </versioning>
+</metadata> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-on-multiple-repos/1.0/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-on-multiple-repos/1.0/maven-metadata.xml
new file mode 100644
index 000000000..6bfd5dd9a
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-on-multiple-repos/1.0/maven-metadata.xml
@@ -0,0 +1,24 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT 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>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-on-multiple-repos</artifactId>
+ <version>1.0</version>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-on-multiple-repos/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-on-multiple-repos/maven-metadata.xml
new file mode 100644
index 000000000..db3a24f18
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-on-multiple-repos/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-on-multiple-repos</artifactId>
+ <versioning>
+ <versions>
+ <version>1.0</version>
+ <version>1.0.1</version>
+ </versions>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070821.102030-1.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070821.102030-1.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070821.102030-1.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070823.111741-5.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070823.111741-5.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070823.111741-5.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070823.212711-6.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070823.212711-6.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070823.212711-6.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/maven-metadata.xml
new file mode 100644
index 000000000..6b4f5894b
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-snapshot-popular</artifactId>
+ <version>2.0-SNAPSHOT</version>
+ <versioning>
+ <snapshot>
+ <timestamp>20070823.212711</timestamp>
+ <buildNumber>6</buildNumber>
+ </snapshot>
+ <lastUpdated>20070823212711</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-20061222.034118-1.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-20061222.034118-1.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-20061222.034118-1.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-20070101.000103-2.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-20070101.000103-2.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-20070101.000103-2.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-SNAPSHOT.jar b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-SNAPSHOT.jar
new file mode 100644
index 000000000..915b2b22c
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-SNAPSHOT.jar
@@ -0,0 +1,2 @@
+get-timestamped-snapshot-in-both-1.0-SNAPSHOT.jar
+(proxied 2) \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/maven-metadata.xml
new file mode 100644
index 000000000..78fbecc59
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>get-timestamped-snapshot-in-both</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <versioning>
+ <snapshot>
+ <timestamp>20070101.000103</timestamp>
+ <buildNumber>2</buildNumber>
+ </snapshot>
+ <lastUpdated>20070101000103</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/groups/get-default-layout/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/groups/get-default-layout/maven-metadata.xml
new file mode 100644
index 000000000..41109859e
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/groups/get-default-layout/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test.groups.get-default-layout</groupId>
+ <plugins>
+ <plugin>
+ <prefix>plugin2</prefix>
+ <artifactId>plugin2-maven-plugin</artifactId>
+ <name>The plugin2 Plugin</name>
+ </plugin>
+ </plugins>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/groups/get-on-multiple-repos/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/groups/get-on-multiple-repos/maven-metadata.xml
new file mode 100644
index 000000000..b7db006fe
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/repositories/proxied2/org/apache/maven/test/groups/get-on-multiple-repos/maven-metadata.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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.test.groups.get-on-multiple-repos</groupId>
+ <plugins>
+ <plugin>
+ <prefix>plugin1</prefix>
+ <artifactId>plugin1-maven-plugin</artifactId>
+ <name>The plugin1 Plugin</name>
+ </plugin>
+ <plugin>
+ <prefix>plugin2</prefix>
+ <artifactId>plugin2-maven-plugin</artifactId>
+ <name>The plugin2 Plugin</name>
+ </plugin>
+ </plugins>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/resources/META-INF/spring-context.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/resources/META-INF/spring-context.xml
new file mode 100644
index 000000000..f900a933b
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/resources/META-INF/spring-context.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.
+ -->
+
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+ http://www.springframework.org/schema/context
+ http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"
+ default-lazy-init="true">
+
+ <context:component-scan base-package="org.apache.archiva.proxy.maven"/>
+
+ <bean name="wagon#file" scope="prototype" class="org.apache.maven.wagon.providers.file.FileWagon"/>
+
+ <alias name="userConfiguration#redback" alias="userConfiguration#default"/>
+
+ <!-- ***
+ JPA settings
+ *** -->
+ <bean name="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
+ <property name="jpaVendorAdapter" >
+ <bean class="org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter" />
+ </property>
+ <property name="persistenceXmlLocation" value="classpath:META-INF/persistence-hsqldb.xml" />
+ <property name="jpaPropertyMap">
+ <map>
+ <entry key="openjpa.ConnectionURL" value="jdbc:hsqldb:mem:redback_database" />
+ <entry key="openjpa.ConnectionDriverName" value="org.hsqldb.jdbcDriver" />
+ <entry key="openjpa.ConnectionUserName" value="sa" />
+ <entry key="openjpa.ConnectionPassword" value="" />
+ <entry key="openjpa.Log" value="${openjpa.Log:DefaultLevel=INFO,Runtime=ERROR,Tool=ERROR,SQL=ERROR,Schema=ERROR,MetaData=ERROR}" />
+ <entry key="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)" />
+ <entry key="openjpa.jdbc.MappingDefaults"
+ value="ForeignKeyDeleteAction=restrict,JoinForeignKeyDeleteAction=restrict"/>
+ </map>
+ </property>
+
+ </bean>
+
+ <bean name="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" >
+ <property name="entityManagerFactory" ref="entityManagerFactory" />
+ </bean>
+
+ <tx:annotation-driven />
+ <!-- ***
+ End of JPA settings
+ *** -->
+
+</beans> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/resources/spring-context.xml b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/resources/spring-context.xml
new file mode 100755
index 000000000..f10fb3e86
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/resources/spring-context.xml
@@ -0,0 +1,127 @@
+<?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.
+ -->
+
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+ http://www.springframework.org/schema/context
+ http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"
+ default-lazy-init="true">
+
+ <context:annotation-config/>
+ <context:component-scan base-package="org.apache.archiva.metadata.repository,org.apache.archiva.proxy,org.apache.archiva.repository.mock"/>
+ <alias name="mockRepositoryProvider" alias="mavenRepositoryProvider" />
+
+ <alias name="archivaConfiguration#mock" alias="archivaConfiguration#default"/>
+ <alias name="archivaConfiguration#mock" alias="archivaConfiguration"/>
+ <alias name="archivaTaskScheduler#repositoryMock" alias="archivaTaskScheduler#repository" />
+
+ <bean name="scheduler" class="org.apache.archiva.redback.components.scheduler.DefaultScheduler">
+ <property name="properties">
+ <props>
+ <prop key="org.quartz.scheduler.instanceName">scheduler1</prop>
+ <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
+ <prop key="org.quartz.threadPool.threadCount">1</prop>
+ <prop key="org.quartz.threadPool.threadPriority">4</prop>
+ <prop key="org.quartz.jobStore.class">org.quartz.simpl.RAMJobStore</prop>
+ </props>
+ </property>
+ </bean>
+
+ <bean name="repositoryContentFactory#mocked" class="org.apache.archiva.repository.RepositoryContentFactory">
+ <property name="archivaConfiguration" ref="archivaConfiguration#mock"/>
+ </bean>
+
+
+ <bean name="repositoryContentProvider#mocked" class="org.apache.archiva.repository.mock.RepositoryContentProviderMock" >
+
+ </bean>
+
+
+ <bean name="repositoryProxyConnectors#test" class="org.apache.archiva.proxy.maven.MavenRepositoryProxyHandler">
+ <property name="archivaConfiguration" ref="archivaConfiguration#mock"/>
+ <property name="repositoryFactory" ref="repositoryContentFactory#mocked"/>
+ <property name="metadataTools" ref="metadataTools#mocked"/>
+ </bean>
+
+ <bean name="metadataTools#default" class="org.apache.archiva.repository.metadata.MetadataTools">
+ <property name="configuration" ref="archivaConfiguration#mock"/>
+ </bean>
+
+ <bean name="metadataTools#mocked" class="org.apache.archiva.repository.metadata.MetadataTools">
+ <property name="configuration" ref="archivaConfiguration#mock"/>
+ </bean>
+
+
+ <bean name="cache#url-failures-cache" class="org.apache.archiva.redback.components.cache.ehcache.EhcacheCache" lazy-init="true"
+ destroy-method="dispose">
+ <property name="diskExpiryThreadIntervalSeconds" value="600"/>
+ <property name="diskPersistent" value="false"/>
+ <property name="diskStorePath" value="${appserver.base}/tmp/urlcache"/>
+ <property name="maxElementsInMemory" value="1000"/>
+ <property name="memoryEvictionPolicy" value="LRU"/>
+ <property name="name" value="url-failures-cache"/>
+ <property name="overflowToDisk" value="false"/>
+ <!-- 45 minutes = 2700 seconds -->
+ <property name="timeToIdleSeconds" value="2700"/>
+ <!-- 30 minutes = 1800 seconds -->
+ <property name="timeToLiveSeconds" value="1800"/>
+ </bean>
+
+ <bean name="wagon#test" class="org.apache.archiva.proxy.WagonDelegate" scope="singleton"/>
+ <bean name="wagon#file" scope="prototype" class="org.apache.maven.wagon.providers.file.FileWagon"/>
+
+ <alias name="userConfiguration#redback" alias="userConfiguration#default"/>
+
+ <!-- ***
+ JPA settings
+ *** -->
+ <bean name="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
+ <property name="jpaVendorAdapter" >
+ <bean class="org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter" />
+ </property>
+ <property name="persistenceXmlLocation" value="classpath:META-INF/persistence-hsqldb.xml" />
+ <property name="jpaPropertyMap">
+ <map>
+ <entry key="openjpa.ConnectionURL" value="jdbc:hsqldb:mem:redback_database" />
+ <entry key="openjpa.ConnectionDriverName" value="org.hsqldb.jdbcDriver" />
+ <entry key="openjpa.ConnectionUserName" value="sa" />
+ <entry key="openjpa.ConnectionPassword" value="" />
+ <entry key="openjpa.Log" value="${openjpa.Log:DefaultLevel=INFO,Runtime=ERROR,Tool=ERROR,SQL=ERROR,Schema=ERROR,MetaData=ERROR}" />
+ <entry key="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)" />
+ <entry key="openjpa.jdbc.MappingDefaults"
+ value="ForeignKeyDeleteAction=restrict,JoinForeignKeyDeleteAction=restrict"/>
+ </map>
+ </property>
+
+ </bean>
+
+ <bean name="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" >
+ <property name="entityManagerFactory" ref="entityManagerFactory" />
+ </bean>
+
+ <tx:annotation-driven />
+ <!-- ***
+ End of JPA settings
+ *** -->
+
+</beans> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/pom.xml b/archiva-modules/archiva-maven/archiva-maven-repository/pom.xml
new file mode 100644
index 000000000..7eba9e946
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/pom.xml
@@ -0,0 +1,263 @@
+<?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.archiva.maven</groupId>
+ <artifactId>archiva-maven</artifactId>
+ <version>3.0.0-SNAPSHOT</version>
+ </parent>
+ <artifactId>archiva-maven-repository</artifactId>
+ <name>Archiva :: Maven :: Repository Support</name>
+
+ <properties>
+ <site.staging.base>${project.parent.parent.basedir}</site.staging.base>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>metadata-model</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva.maven</groupId>
+ <artifactId>archiva-maven-metadata</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>metadata-repository-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva.maven</groupId>
+ <artifactId>archiva-maven-metadata</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>archiva-proxy-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>archiva-model</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva.maven</groupId>
+ <artifactId>archiva-maven-proxy</artifactId>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging-api</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.sisu</groupId>
+ <artifactId>org.eclipse.sisu.plexus</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.google.inject</groupId>
+ <artifactId>guice</artifactId>
+ <classifier>no_aop</classifier>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>archiva-plexus-bridge</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model-builder</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact-manager</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-repository-metadata</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.maven.resolver</groupId>
+ <artifactId>maven-resolver</artifactId>
+ <type>pom</type>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.resolver</groupId>
+ <artifactId>maven-resolver-transport-file</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.resolver</groupId>
+ <artifactId>maven-resolver-connector-basic</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>archiva-configuration</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva.maven</groupId>
+ <artifactId>archiva-maven-model</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-provider-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.modelmapper</groupId>
+ <artifactId>modelmapper</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-http</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-http-lightweight</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-test</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>test-repository</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>archiva-mock</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>archiva-test-utils</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-all</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.assertj</groupId>
+ <artifactId>assertj-core</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-1.2-api</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>xerces</groupId>
+ <artifactId>xercesImpl</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <!-- Needed for JDK >= 9 -->
+ <dependency>
+ <groupId>javax.annotation</groupId>
+ <artifactId>javax.annotation-api</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.xml.bind</groupId>
+ <artifactId>jaxb-api</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.ow2.asm</groupId>
+ <artifactId>asm</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>test-repository</id>
+ <phase>process-test-classes</phase>
+ <goals>
+ <goal>unpack-dependencies</goal>
+ </goals>
+ <configuration>
+ <includeArtifactIds>test-repository</includeArtifactIds>
+ <outputDirectory>target/test-repository</outputDirectory>
+ <excludes>META-INF/**</excludes>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <systemPropertyVariables>
+ <appserver.base>${project.build.directory}/appserver-base</appserver.base>
+ </systemPropertyVariables>
+ </configuration>
+ </plugin>
+ </plugins>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.rat</groupId>
+ <artifactId>apache-rat-plugin</artifactId>
+ <configuration>
+ <excludes>
+ <!-- TODO: move repo into a subdirectory -->
+ <exclude>src/test/resources/com/**</exclude>
+ <exclude>src/test/resources/commons-io/**</exclude>
+ <exclude>src/test/resources/test-repo/**</exclude>
+ <exclude>src/test/resources/m1-repo-filelist.txt</exclude>
+ <exclude>src/test/repositories/**</exclude>
+ <exclude>src/test/expected-poms/**</exclude>
+ <exclude>src/test/resources/resolver-status.properties</exclude>
+ <exclude>src/test/resources/test01.properties</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/ArchivaRepositoryConnectorFactory.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/ArchivaRepositoryConnectorFactory.java
new file mode 100644
index 000000000..dd401aef4
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/ArchivaRepositoryConnectorFactory.java
@@ -0,0 +1,99 @@
+package org.apache.archiva.dependency.tree.maven2;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.connector.basic.BasicRepositoryConnectorFactory;
+import org.eclipse.aether.spi.connector.RepositoryConnectorFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.eclipse.aether.RepositorySystemSession;
+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.NoRepositoryConnectorException;
+
+import java.util.Collection;
+
+/**
+ *
+ * Creates a dummy connector, if the default connectory factory fails to create one.
+ *
+ * @author Olivier Lamy
+ * @since 1.4-M3
+ */
+public class ArchivaRepositoryConnectorFactory
+ implements RepositoryConnectorFactory
+{
+
+ private BasicRepositoryConnectorFactory delegate = new BasicRepositoryConnectorFactory();
+
+ public ArchivaRepositoryConnectorFactory()
+ {
+ // no op but empty constructor needed by aether
+ }
+
+ @Override
+ public RepositoryConnector newInstance( RepositorySystemSession session, RemoteRepository repository )
+ throws NoRepositoryConnectorException
+ {
+ try
+ {
+ return delegate.newInstance( session, repository );
+ }
+ catch ( NoRepositoryConnectorException e )
+ {
+
+ }
+
+ return new RepositoryConnector()
+ {
+
+ private Logger log = LoggerFactory.getLogger( getClass() );
+
+ @Override
+ public void get( Collection<? extends ArtifactDownload> artifactDownloads,
+ Collection<? extends MetadataDownload> metadataDownloads )
+ {
+ log.debug( "get" );
+ }
+
+ @Override
+ public void put( Collection<? extends ArtifactUpload> artifactUploads,
+ Collection<? extends MetadataUpload> metadataUploads )
+ {
+ log.debug( "put" );
+ }
+
+ @Override
+ public void close()
+ {
+ log.debug( "close" );
+ }
+ };
+ }
+
+ @Override
+ public float getPriority( )
+ {
+ return 0;
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/DependencyTreeBuilder.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/DependencyTreeBuilder.java
new file mode 100644
index 000000000..9f3bb7f9a
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/DependencyTreeBuilder.java
@@ -0,0 +1,38 @@
+package org.apache.archiva.dependency.tree.maven2;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.maven2.model.TreeEntry;
+import org.eclipse.aether.graph.DependencyVisitor;
+
+import java.util.List;
+
+/**
+ * @author Olivier Lamy
+ */
+public interface DependencyTreeBuilder
+{
+ void buildDependencyTree( List<String> repositoryIds, String groupId, String artifactId, String version,
+ DependencyVisitor dependencyVisitor )
+ throws Exception;
+
+ List<TreeEntry> buildDependencyTree( List<String> repositoryIds, String groupId, String artifactId, String version )
+ throws Exception;
+}
+
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/DependencyTreeBuilderException.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/DependencyTreeBuilderException.java
new file mode 100644
index 000000000..ea71d785b
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/DependencyTreeBuilderException.java
@@ -0,0 +1,32 @@
+package org.apache.archiva.dependency.tree.maven2;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT 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
+ * @since 1.4-M3
+ */
+public class DependencyTreeBuilderException
+ extends Exception
+{
+ public DependencyTreeBuilderException( String message, Throwable t )
+ {
+ super( message, t );
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/Maven3DependencyTreeBuilder.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/Maven3DependencyTreeBuilder.java
new file mode 100644
index 000000000..d200d081a
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/Maven3DependencyTreeBuilder.java
@@ -0,0 +1,282 @@
+package org.apache.archiva.dependency.tree.maven2;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.admin.model.RepositoryAdminException;
+import org.apache.archiva.admin.model.beans.NetworkProxy;
+import org.apache.archiva.admin.model.beans.ProxyConnector;
+import org.apache.archiva.admin.model.networkproxy.NetworkProxyAdmin;
+import org.apache.archiva.admin.model.proxyconnector.ProxyConnectorAdmin;
+import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;
+import org.apache.archiva.common.plexusbridge.PlexusSisuBridgeException;
+import org.apache.archiva.common.utils.VersionUtil;
+import org.apache.archiva.maven2.metadata.MavenMetadataReader;
+import org.apache.archiva.maven2.model.TreeEntry;
+import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator;
+import org.apache.archiva.model.ArchivaRepositoryMetadata;
+import org.apache.archiva.repository.ManagedRepository;
+import org.apache.archiva.repository.RemoteRepository;
+import org.apache.archiva.repository.RepositoryRegistry;
+import org.apache.archiva.repository.maven2.MavenSystemManager;
+import org.apache.archiva.repository.metadata.MetadataTools;
+import org.apache.archiva.xml.XMLException;
+import org.apache.commons.lang.StringUtils;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.bridge.MavenRepositorySystem;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.DefaultArtifact;
+import org.eclipse.aether.collection.CollectRequest;
+import org.eclipse.aether.collection.CollectResult;
+import org.eclipse.aether.collection.DependencyCollectionException;
+import org.eclipse.aether.graph.Dependency;
+import org.eclipse.aether.graph.DependencyVisitor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+import javax.inject.Inject;
+import javax.inject.Named;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Olivier Lamy
+ * @since 1.4-M3
+ */
+@Service("dependencyTreeBuilder#maven3")
+public class Maven3DependencyTreeBuilder
+ implements DependencyTreeBuilder
+{
+ private Logger log = LoggerFactory.getLogger( Maven3DependencyTreeBuilder.class );
+
+ @Inject
+ private PlexusSisuBridge plexusSisuBridge;
+
+ private MavenRepositorySystem mavenRepositorySystem;
+
+ @Inject
+ @Named( "repositoryPathTranslator#maven2" )
+ private RepositoryPathTranslator pathTranslator;
+
+ @Inject
+ private ProxyConnectorAdmin proxyConnectorAdmin;
+
+ @Inject
+ private NetworkProxyAdmin networkProxyAdmin;
+
+ @Inject
+ RepositoryRegistry repositoryRegistry;
+
+ @Inject
+ MavenSystemManager mavenSystemManager;
+
+
+ @PostConstruct
+ public void initialize()
+ throws PlexusSisuBridgeException
+ {
+ mavenRepositorySystem = plexusSisuBridge.lookup(MavenRepositorySystem.class);
+ }
+
+
+
+ public void buildDependencyTree( List<String> repositoryIds, String groupId, String artifactId, String version,
+ DependencyVisitor dependencyVisitor )
+ throws DependencyTreeBuilderException
+ {
+
+ Artifact projectArtifact = mavenRepositorySystem.createProjectArtifact(groupId, artifactId, version);
+ ManagedRepository repository = findArtifactInRepositories( repositoryIds, projectArtifact );
+
+ if ( repository == null )
+ {
+ // metadata could not be resolved
+ log.info("Did not find repository with artifact {}/{}/{}", groupId, artifactId, version);
+ return;
+ }
+
+ List<org.apache.archiva.repository.RemoteRepository> remoteRepositories = new ArrayList<>();
+ Map<String, NetworkProxy> networkProxies = new HashMap<>();
+
+ try
+ {
+ // MRM-1411
+ // TODO: this is a workaround for a lack of proxy capability in the resolvers - replace when it can all be
+ // handled there. It doesn't cache anything locally!
+
+ Map<String, List<ProxyConnector>> proxyConnectorsMap = proxyConnectorAdmin.getProxyConnectorAsMap();
+ List<ProxyConnector> proxyConnectors = proxyConnectorsMap.get( repository.getId() );
+ if ( proxyConnectors != null )
+ {
+ for ( ProxyConnector proxyConnector : proxyConnectors )
+ {
+ remoteRepositories.add(
+ repositoryRegistry.getRemoteRepository( proxyConnector.getTargetRepoId() ) );
+
+ NetworkProxy networkProxyConfig = networkProxyAdmin.getNetworkProxy( proxyConnector.getProxyId() );
+
+ if ( networkProxyConfig != null )
+ {
+ // key/value: remote repo ID/proxy info
+ networkProxies.put( proxyConnector.getTargetRepoId(), networkProxyConfig );
+ }
+ }
+ }
+ }
+ catch ( RepositoryAdminException e )
+ {
+ throw new DependencyTreeBuilderException( e.getMessage(), e );
+ }
+
+ // FIXME take care of relative path
+ ResolveRequest resolveRequest = new ResolveRequest();
+ resolveRequest.dependencyVisitor = dependencyVisitor;
+ resolveRequest.localRepoDir = repository.getContent().getRepoRoot();
+ resolveRequest.groupId = groupId;
+ resolveRequest.artifactId = artifactId;
+ resolveRequest.version = version;
+ resolveRequest.remoteRepositories = remoteRepositories;
+ resolveRequest.networkProxies = networkProxies;
+ resolve( resolveRequest );
+ }
+
+
+ @Override
+ public List<TreeEntry> buildDependencyTree( List<String> repositoryIds, String groupId, String artifactId,
+ String version )
+ throws DependencyTreeBuilderException
+ {
+
+ List<TreeEntry> treeEntries = new ArrayList<>();
+ TreeDependencyNodeVisitor treeDependencyNodeVisitor = new TreeDependencyNodeVisitor( treeEntries );
+
+ buildDependencyTree( repositoryIds, groupId, artifactId, version, treeDependencyNodeVisitor );
+
+ log.debug( "treeEntries: {}", treeEntries );
+ return treeEntries;
+ }
+
+ private static class ResolveRequest
+ {
+ String localRepoDir, groupId, artifactId, version;
+
+ DependencyVisitor dependencyVisitor;
+
+ List<org.apache.archiva.repository.RemoteRepository> remoteRepositories;
+
+ Map<String, NetworkProxy> networkProxies;
+
+ }
+
+
+ private void resolve( ResolveRequest resolveRequest )
+ {
+
+ RepositorySystem system = mavenSystemManager.getRepositorySystem();
+ RepositorySystemSession session = MavenSystemManager.newRepositorySystemSession( resolveRequest.localRepoDir );
+
+ org.eclipse.aether.artifact.Artifact artifact = new DefaultArtifact(
+ resolveRequest.groupId + ":" + resolveRequest.artifactId + ":" + resolveRequest.version );
+
+ CollectRequest collectRequest = new CollectRequest();
+ collectRequest.setRoot( new Dependency( artifact, "" ) );
+
+ // add remote repositories
+ for ( RemoteRepository remoteRepository : resolveRequest.remoteRepositories )
+ {
+ org.eclipse.aether.repository.RemoteRepository repo = new org.eclipse.aether.repository.RemoteRepository.Builder( remoteRepository.getId( ), "default", remoteRepository.getLocation( ).toString() ).build( );
+ collectRequest.addRepository(repo);
+ }
+ collectRequest.setRequestContext( "project" );
+
+ //collectRequest.addRepository( repo );
+
+ try
+ {
+ CollectResult collectResult = system.collectDependencies( session, collectRequest );
+ collectResult.getRoot().accept( resolveRequest.dependencyVisitor );
+ log.debug("Collected dependency results for resolve");
+ }
+ catch ( DependencyCollectionException e )
+ {
+ log.error( "Error while collecting dependencies (resolve): {}", e.getMessage(), e );
+ }
+
+
+
+ }
+
+ private ManagedRepository findArtifactInRepositories( List<String> repositoryIds, Artifact projectArtifact ) {
+ for ( String repoId : repositoryIds )
+ {
+ ManagedRepository managedRepo = repositoryRegistry.getManagedRepository(repoId);
+ Path repoDir = managedRepo.getLocalPath();
+
+ Path file = pathTranslator.toFile( repoDir, projectArtifact.getGroupId(), projectArtifact.getArtifactId(),
+ projectArtifact.getBaseVersion(),
+ projectArtifact.getArtifactId() + "-" + projectArtifact.getVersion()
+ + ".pom" );
+
+ if ( Files.exists(file) )
+ {
+ return managedRepo;
+ }
+ // try with snapshot version
+ if ( StringUtils.endsWith( projectArtifact.getBaseVersion(), VersionUtil.SNAPSHOT ) )
+ {
+ Path metadataFile = file.getParent().resolve( MetadataTools.MAVEN_METADATA );
+ if ( Files.exists(metadataFile) )
+ {
+ try
+ {
+ ArchivaRepositoryMetadata archivaRepositoryMetadata = MavenMetadataReader.read( metadataFile);
+ int buildNumber = archivaRepositoryMetadata.getSnapshotVersion().getBuildNumber();
+ String timeStamp = archivaRepositoryMetadata.getSnapshotVersion().getTimestamp();
+ // rebuild file name with timestamped version and build number
+ String timeStampFileName =
+ new StringBuilder( projectArtifact.getArtifactId() ).append( '-' ).append(
+ StringUtils.remove( projectArtifact.getBaseVersion(),
+ "-" + VersionUtil.SNAPSHOT ) ).append( '-' ).append(
+ timeStamp ).append( '-' ).append( Integer.toString( buildNumber ) ).append(
+ ".pom" ).toString();
+ Path timeStampFile = file.getParent().resolve( timeStampFileName );
+ log.debug( "try to find timestamped snapshot version file: {}", timeStampFile);
+ if ( Files.exists(timeStampFile) )
+ {
+ return managedRepo;
+ }
+ }
+ catch ( XMLException e )
+ {
+ log.warn( "skip fail to find timestamped snapshot pom: {}", e.getMessage() );
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/TreeDependencyNodeVisitor.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/TreeDependencyNodeVisitor.java
new file mode 100644
index 000000000..a53ee670c
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/TreeDependencyNodeVisitor.java
@@ -0,0 +1,94 @@
+package org.apache.archiva.dependency.tree.maven2;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.maven2.model.Artifact;
+import org.apache.archiva.maven2.model.TreeEntry;
+import org.eclipse.aether.graph.DependencyVisitor;
+import org.modelmapper.ModelMapper;
+import org.modelmapper.convention.MatchingStrategies;
+import org.eclipse.aether.graph.DependencyNode;
+import org.eclipse.aether.graph.DependencyVisitor;
+
+import java.util.List;
+
+/**
+ * @author Olivier Lamy
+ * @since 1.4-M3
+ */
+public class TreeDependencyNodeVisitor
+ implements DependencyVisitor
+{
+
+ final List<TreeEntry> treeEntries;
+
+ private TreeEntry currentEntry;
+
+ private org.eclipse.aether.graph.DependencyNode firstDependencyNode;
+
+ public TreeDependencyNodeVisitor( List<TreeEntry> treeEntries )
+ {
+ this.treeEntries = treeEntries;
+ }
+
+
+ @Override
+ public boolean visitEnter( DependencyNode dependencyNode )
+ {
+ TreeEntry entry =
+ new TreeEntry( getModelMapper().map( dependencyNode.getDependency().getArtifact(), Artifact.class ) );
+ entry.getArtifact().setFileExtension( dependencyNode.getDependency().getArtifact().getExtension() );
+ entry.getArtifact().setScope( dependencyNode.getDependency().getScope() );
+ entry.setParent( currentEntry );
+ currentEntry = entry;
+
+ if ( firstDependencyNode == null )
+ {
+ firstDependencyNode = dependencyNode;
+ treeEntries.add( currentEntry );
+ }
+ else
+ {
+ currentEntry.getParent().getChilds().add( currentEntry );
+ }
+ return true;
+ }
+
+ @Override
+ public boolean visitLeave( DependencyNode dependencyNode )
+ {
+ currentEntry = currentEntry.getParent();
+ return true;
+ }
+
+ private static class ModelMapperHolder
+ {
+ private static ModelMapper MODEL_MAPPER = new ModelMapper();
+
+ static
+ {
+ MODEL_MAPPER.getConfiguration().setMatchingStrategy( MatchingStrategies.STRICT );
+ }
+ }
+
+ protected ModelMapper getModelMapper()
+ {
+ return ModelMapperHolder.MODEL_MAPPER;
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/ArtifactMappingProvider.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/ArtifactMappingProvider.java
new file mode 100644
index 000000000..6d2335e52
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/ArtifactMappingProvider.java
@@ -0,0 +1,27 @@
+package org.apache.archiva.metadata.repository.storage.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT 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 ArtifactMappingProvider
+{
+ String mapClassifierAndExtensionToType( String classifier, String ext );
+
+ String mapTypeToExtension( String type );
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/ArtifactMetadataVersionComparator.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/ArtifactMetadataVersionComparator.java
new file mode 100644
index 000000000..6e171edf9
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/ArtifactMetadataVersionComparator.java
@@ -0,0 +1,43 @@
+package org.apache.archiva.metadata.repository.storage.maven2;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.metadata.model.ArtifactMetadata;
+import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+
+import java.util.Comparator;
+
+/**
+ * @author Olivier Lamy
+ * @since 1.4-M3
+ */
+public class ArtifactMetadataVersionComparator
+ implements Comparator<ArtifactMetadata>
+{
+ public static ArtifactMetadataVersionComparator INSTANCE = new ArtifactMetadataVersionComparator();
+
+ @Override
+ public int compare( ArtifactMetadata o1, ArtifactMetadata o2 )
+ {
+ // sort by version (reverse), then ID
+ int result =
+ new DefaultArtifactVersion( o2.getVersion() ).compareTo( new DefaultArtifactVersion( o1.getVersion() ) );
+ return result != 0 ? result : o1.getId().compareTo( o2.getId() );
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/DefaultArtifactMappingProvider.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/DefaultArtifactMappingProvider.java
new file mode 100644
index 000000000..01ea55970
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/DefaultArtifactMappingProvider.java
@@ -0,0 +1,90 @@
+package org.apache.archiva.metadata.repository.storage.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ *
+ */
+@Service( "artifactMappingProvider#default" )
+public class DefaultArtifactMappingProvider
+ implements ArtifactMappingProvider
+{
+ private final Map<String, String> classifierAndExtensionToTypeMap;
+
+ private final Map<String, String> typeToExtensionMap;
+
+ public DefaultArtifactMappingProvider()
+ {
+ classifierAndExtensionToTypeMap = new HashMap<>( 4 );
+
+ // Maven 2.2.1 supplied types (excluding defaults where extension == type and no classifier)
+ classifierAndExtensionToTypeMap.put( "client:jar", "ejb-client" );
+ classifierAndExtensionToTypeMap.put( "sources:jar", "java-source" );
+ classifierAndExtensionToTypeMap.put( "javadoc:jar", "javadoc" );
+ classifierAndExtensionToTypeMap.put( "tests:jar", "test-jar" );
+
+ typeToExtensionMap = new HashMap<>();
+
+ // Maven 2.2.1 supplied types (excluding defaults where extension == type and no classifier)
+ typeToExtensionMap.put( "ejb-client", "jar" );
+ typeToExtensionMap.put( "ejb", "jar" );
+ typeToExtensionMap.put( "java-source", "jar" );
+ typeToExtensionMap.put( "javadoc", "jar" );
+ typeToExtensionMap.put( "test-jar", "jar" );
+ typeToExtensionMap.put( "maven-plugin", "jar" );
+
+ // Additional type
+ typeToExtensionMap.put( "maven-archetype", "jar" );
+
+ // TODO: move to maven 1 plugin - but note that it won't have the interface type and might need to reproduce the
+ // same thing
+ typeToExtensionMap.put( "maven-one-plugin", "jar" );
+ typeToExtensionMap.put( "javadoc.jar", "jar" );
+ typeToExtensionMap.put( "uberjar", "jar" );
+ typeToExtensionMap.put( "distribution-tgz", "tar.gz" );
+ typeToExtensionMap.put( "distribution-zip", "zip" );
+ typeToExtensionMap.put( "aspect", "jar" );
+ }
+
+ @Override
+ public String mapClassifierAndExtensionToType( String classifier, String ext )
+ {
+ if ( classifier == null )
+ {
+ classifier = "";
+ }
+ if ( ext == null )
+ {
+ ext = "";
+ }
+ return classifierAndExtensionToTypeMap.get( classifier + ":" + ext );
+ }
+
+ @Override
+ public String mapTypeToExtension( String type )
+ {
+ return typeToExtensionMap.get( type );
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/DummyLifecycleBindingsInjector.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/DummyLifecycleBindingsInjector.java
new file mode 100644
index 000000000..e0cf7118a
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/DummyLifecycleBindingsInjector.java
@@ -0,0 +1,40 @@
+package org.apache.archiva.metadata.repository.storage.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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 org.apache.maven.model.plugin.LifecycleBindingsInjector;
+
+/**
+ * Required as plexus-spring doesn't understand the optional = true argument added to Plexus and used here.
+ *
+ *
+ */
+public class DummyLifecycleBindingsInjector
+ implements LifecycleBindingsInjector
+{
+ @Override
+ public void injectLifecycleBindings( Model model, ModelBuildingRequest modelBuildingRequest, ModelProblemCollector modelProblemCollector )
+ {
+ // left intentionally blank
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryPathTranslator.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryPathTranslator.java
new file mode 100644
index 000000000..b91036809
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryPathTranslator.java
@@ -0,0 +1,345 @@
+package org.apache.archiva.metadata.repository.storage.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.common.utils.VersionUtil;
+import org.apache.archiva.metadata.model.ArtifactMetadata;
+import org.apache.archiva.metadata.model.maven2.MavenArtifactFacet;
+import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+import javax.inject.Inject;
+import java.nio.file.Path;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ *
+ */
+@Service( "repositoryPathTranslator#maven2" )
+public class Maven2RepositoryPathTranslator
+ implements RepositoryPathTranslator
+{
+
+ private Logger log = LoggerFactory.getLogger( getClass() );
+
+ private static final char GROUP_SEPARATOR = '.';
+
+ private static final Pattern TIMESTAMP_PATTERN = Pattern.compile( "([0-9]{8}.[0-9]{6})-([0-9]+).*" );
+
+
+ private static final Pattern MAVEN_PLUGIN_PATTERN = Pattern.compile( "^(maven-.*-plugin)|(.*-maven-plugin)$" );
+
+ /**
+ *
+ * see #initialize
+ */
+ @Inject
+ private List<ArtifactMappingProvider> artifactMappingProviders;
+
+ public Maven2RepositoryPathTranslator()
+ {
+ // noop
+ }
+
+ @PostConstruct
+ public void initialize()
+ {
+ //artifactMappingProviders = new ArrayList<ArtifactMappingProvider>(
+ // applicationContext.getBeansOfType( ArtifactMappingProvider.class ).values() );
+
+ }
+
+
+ public Maven2RepositoryPathTranslator( List<ArtifactMappingProvider> artifactMappingProviders )
+ {
+ this.artifactMappingProviders = artifactMappingProviders;
+ }
+
+ @Override
+ public Path toFile(Path basedir, String namespace, String projectId, String projectVersion, String filename )
+ {
+ return basedir.resolve( toPath( namespace, projectId, projectVersion, filename ) );
+ }
+
+ @Override
+ public Path toFile( Path basedir, String namespace, String projectId, String projectVersion )
+ {
+ return basedir.resolve( toPath( namespace, projectId, projectVersion ) );
+ }
+
+ @Override
+ public String toPath( String namespace, String projectId, String projectVersion, String filename )
+ {
+ StringBuilder path = new StringBuilder();
+
+ appendNamespaceToProjectVersion( path, namespace, projectId, projectVersion );
+ path.append( PATH_SEPARATOR );
+ path.append( filename );
+
+ return path.toString();
+ }
+
+ private void appendNamespaceToProjectVersion( StringBuilder path, String namespace, String projectId,
+ String projectVersion )
+ {
+ appendNamespaceAndProject( path, namespace, projectId );
+ path.append( projectVersion );
+ }
+
+ public String toPath( String namespace, String projectId, String projectVersion )
+ {
+ StringBuilder path = new StringBuilder();
+
+ appendNamespaceToProjectVersion( path, namespace, projectId, projectVersion );
+
+ return path.toString();
+ }
+
+ public String toPath( String namespace )
+ {
+ StringBuilder path = new StringBuilder();
+
+ appendNamespace( path, namespace );
+
+ return path.toString();
+ }
+
+ @Override
+ public String toPath( String namespace, String projectId )
+ {
+ StringBuilder path = new StringBuilder();
+
+ appendNamespaceAndProject( path, namespace, projectId );
+
+ return path.toString();
+ }
+
+ private void appendNamespaceAndProject( StringBuilder path, String namespace, String projectId )
+ {
+ appendNamespace( path, namespace );
+ path.append( projectId ).append( PATH_SEPARATOR );
+ }
+
+ private void appendNamespace( StringBuilder path, String namespace )
+ {
+ path.append( formatAsDirectory( namespace ) ).append( PATH_SEPARATOR );
+ }
+
+ @Override
+ public Path toFile( Path basedir, String namespace, String projectId )
+ {
+ return basedir.resolve( toPath( namespace, projectId ) );
+ }
+
+ @Override
+ public Path toFile( Path basedir, String namespace )
+ {
+ return basedir.resolve( toPath( namespace ) );
+ }
+
+ private String formatAsDirectory( String directory )
+ {
+ return directory.replace( GROUP_SEPARATOR, PATH_SEPARATOR );
+ }
+
+ @Override
+ public ArtifactMetadata getArtifactForPath( String repoId, String relativePath )
+ {
+ String[] parts = relativePath.replace( '\\', '/' ).split( "/" );
+
+ int len = parts.length;
+ if ( len < 4 )
+ {
+ throw new IllegalArgumentException(
+ "Not a valid artifact path in a Maven 2 repository, not enough directories: " + relativePath );
+ }
+
+ String id = parts[--len];
+ String baseVersion = parts[--len];
+ String artifactId = parts[--len];
+ StringBuilder groupIdBuilder = new StringBuilder();
+ for ( int i = 0; i < len - 1; i++ )
+ {
+ groupIdBuilder.append( parts[i] );
+ groupIdBuilder.append( '.' );
+ }
+ groupIdBuilder.append( parts[len - 1] );
+
+ return getArtifactFromId( repoId, groupIdBuilder.toString(), artifactId, baseVersion, id );
+ }
+
+ @Override
+ public ArtifactMetadata getArtifactFromId( String repoId, String namespace, String projectId, String projectVersion,
+ String id )
+ {
+ if ( !id.startsWith( projectId + "-" ) )
+ {
+ throw new IllegalArgumentException( "Not a valid artifact path in a Maven 2 repository, filename '" + id
+ + "' doesn't start with artifact ID '" + projectId + "'" );
+ }
+
+ MavenArtifactFacet facet = new MavenArtifactFacet();
+
+ int index = projectId.length() + 1;
+ String version;
+ String idSubStrFromVersion = id.substring( index );
+ if ( idSubStrFromVersion.startsWith( projectVersion ) && !VersionUtil.isUniqueSnapshot( projectVersion ) )
+ {
+ // non-snapshot versions, or non-timestamped snapshot versions
+ version = projectVersion;
+ }
+ else if ( VersionUtil.isGenericSnapshot( projectVersion ) )
+ {
+ // timestamped snapshots
+ try
+ {
+ int mainVersionLength = projectVersion.length() - 8; // 8 is length of "SNAPSHOT"
+ if ( mainVersionLength == 0 )
+ {
+ throw new IllegalArgumentException(
+ "Timestamped snapshots must contain the main version, filename was '" + id + "'" );
+ }
+
+ Matcher m = TIMESTAMP_PATTERN.matcher( idSubStrFromVersion.substring( mainVersionLength ) );
+ m.matches();
+ String timestamp = m.group( 1 );
+ String buildNumber = m.group( 2 );
+ facet.setTimestamp( timestamp );
+ facet.setBuildNumber( Integer.parseInt( buildNumber ) );
+ version = idSubStrFromVersion.substring( 0, mainVersionLength ) + timestamp + "-" + buildNumber;
+ }
+ catch ( IllegalStateException e )
+ {
+ throw new IllegalArgumentException( "Not a valid artifact path in a Maven 2 repository, filename '" + id
+ + "' doesn't contain a timestamped version matching snapshot '"
+ + projectVersion + "'", e);
+ }
+ }
+ else
+ {
+ // invalid
+ throw new IllegalArgumentException(
+ "Not a valid artifact path in a Maven 2 repository, filename '" + id + "' doesn't contain version '"
+ + projectVersion + "'" );
+ }
+
+ String classifier;
+ String ext;
+ index += version.length();
+ if ( index == id.length() )
+ {
+ // no classifier or extension
+ classifier = null;
+ ext = null;
+ }
+ else
+ {
+ char c = id.charAt( index );
+ if ( c == '-' )
+ {
+ // classifier up until '.'
+ int extIndex = id.indexOf( '.', index );
+ if ( extIndex >= 0 )
+ {
+ classifier = id.substring( index + 1, extIndex );
+ ext = id.substring( extIndex + 1 );
+ }
+ else
+ {
+ classifier = id.substring( index + 1 );
+ ext = null;
+ }
+ }
+ else if ( c == '.' )
+ {
+ // rest is the extension
+ classifier = null;
+ ext = id.substring( index + 1 );
+ }
+ else
+ {
+ throw new IllegalArgumentException( "Not a valid artifact path in a Maven 2 repository, filename '" + id
+ + "' expected classifier or extension but got '"
+ + id.substring( index ) + "'" );
+ }
+ }
+
+ ArtifactMetadata metadata = new ArtifactMetadata();
+ metadata.setId( id );
+ metadata.setNamespace( namespace );
+ metadata.setProject( projectId );
+ metadata.setRepositoryId( repoId );
+ metadata.setProjectVersion( projectVersion );
+ metadata.setVersion( version );
+
+ facet.setClassifier( classifier );
+
+ // we use our own provider here instead of directly accessing Maven's artifact handlers as it has no way
+ // to select the correct order to apply multiple extensions mappings to a preferred type
+ // TODO: this won't allow the user to decide order to apply them if there are conflicts or desired changes -
+ // perhaps the plugins could register missing entries in configuration, then we just use configuration
+ // here?
+
+ String type = null;
+ for ( ArtifactMappingProvider mapping : artifactMappingProviders )
+ {
+ type = mapping.mapClassifierAndExtensionToType( classifier, ext );
+ if ( type != null )
+ {
+ break;
+ }
+ }
+
+ // TODO: this is cheating! We should check the POM metadata instead
+ if ( type == null && "jar".equals( ext ) && isArtifactIdValidMavenPlugin( projectId ) )
+ {
+ type = "maven-plugin";
+ }
+
+ // use extension as default
+ if ( type == null )
+ {
+ type = ext;
+ }
+
+ // TODO: should we allow this instead?
+ if ( type == null )
+ {
+ throw new IllegalArgumentException(
+ "Not a valid artifact path in a Maven 2 repository, filename '" + id + "' does not have a type" );
+ }
+
+ facet.setType( type );
+ metadata.addFacet( facet );
+
+ return metadata;
+ }
+
+
+ public boolean isArtifactIdValidMavenPlugin( String artifactId )
+ {
+ return MAVEN_PLUGIN_PATTERN.matcher( artifactId ).matches();
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java
new file mode 100644
index 000000000..b7011ca1a
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java
@@ -0,0 +1,976 @@
+package org.apache.archiva.metadata.repository.storage.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.checksum.ChecksumAlgorithm;
+import org.apache.archiva.checksum.ChecksummedFile;
+import org.apache.archiva.common.Try;
+import org.apache.archiva.common.utils.VersionUtil;
+import org.apache.archiva.maven2.metadata.MavenMetadataReader;
+import org.apache.archiva.metadata.model.ArtifactMetadata;
+import org.apache.archiva.metadata.model.ProjectMetadata;
+import org.apache.archiva.metadata.model.ProjectVersionMetadata;
+import org.apache.archiva.metadata.model.facets.RepositoryProblemFacet;
+import org.apache.archiva.metadata.repository.filter.Filter;
+import org.apache.archiva.metadata.repository.storage.ReadMetadataRequest;
+import org.apache.archiva.metadata.repository.storage.RelocationException;
+import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator;
+import org.apache.archiva.metadata.repository.storage.RepositoryStorage;
+import org.apache.archiva.metadata.repository.storage.RepositoryStorageMetadataInvalidException;
+import org.apache.archiva.metadata.repository.storage.RepositoryStorageMetadataNotFoundException;
+import org.apache.archiva.metadata.repository.storage.RepositoryStorageRuntimeException;
+import org.apache.archiva.model.ArchivaRepositoryMetadata;
+import org.apache.archiva.model.ArtifactReference;
+import org.apache.archiva.model.SnapshotVersion;
+import org.apache.archiva.policies.ProxyDownloadException;
+import org.apache.archiva.proxy.ProxyRegistry;
+import org.apache.archiva.proxy.maven.WagonFactory;
+import org.apache.archiva.proxy.model.NetworkProxy;
+import org.apache.archiva.proxy.model.ProxyConnector;
+import org.apache.archiva.proxy.model.RepositoryProxyHandler;
+import org.apache.archiva.repository.*;
+import org.apache.archiva.repository.content.PathParser;
+import org.apache.archiva.repository.maven2.MavenSystemManager;
+import org.apache.archiva.xml.XMLException;
+import org.apache.commons.lang.ArrayUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.maven.model.CiManagement;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.DistributionManagement;
+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.Relocation;
+import org.apache.maven.model.Scm;
+import org.apache.maven.model.building.DefaultModelBuilderFactory;
+import org.apache.maven.model.building.DefaultModelBuildingRequest;
+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.io.xpp3.MavenXpp3Reader;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+import javax.inject.Inject;
+import javax.inject.Named;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.Reader;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.NoSuchFileException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+// import java.io.FileNotFoundException;
+
+/**
+ * <p>
+ * Maven 2 repository format storage implementation. This class currently takes parameters to indicate the repository to
+ * deal with rather than being instantiated per-repository.
+ * FIXME: instantiate one per repository and allocate permanently from a factory (which can be obtained within the session).
+ * </p>
+ * <p>
+ * The session is passed in as an argument to obtain any necessary resources, rather than the class being instantiated
+ * within the session in the context of a single managed repository's resolution needs.
+ * </p>
+ */
+@Service("repositoryStorage#maven2")
+public class Maven2RepositoryStorage
+ implements RepositoryStorage {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(Maven2RepositoryStorage.class);
+
+ private ModelBuilder builder;
+
+ @Inject
+ RepositoryRegistry repositoryRegistry;
+
+ @Inject
+ @Named("repositoryPathTranslator#maven2")
+ private RepositoryPathTranslator pathTranslator;
+
+ @Inject
+ private WagonFactory wagonFactory;
+
+ @Inject
+ private ApplicationContext applicationContext;
+
+ @Inject
+ @Named("pathParser#default")
+ private PathParser pathParser;
+
+ @Inject
+ private ProxyRegistry proxyRegistry;
+
+ @Inject
+ private MavenSystemManager mavenSystemManager;
+
+ private static final String METADATA_FILENAME_START = "maven-metadata";
+
+ private static final String METADATA_FILENAME = METADATA_FILENAME_START + ".xml";
+
+ // This array must be lexically sorted
+ private static final String[] IGNORED_FILES = {METADATA_FILENAME, "resolver-status.properties"};
+
+ private static final MavenXpp3Reader MAVEN_XPP_3_READER = new MavenXpp3Reader();
+
+
+ @PostConstruct
+ public void initialize() {
+ builder = new DefaultModelBuilderFactory().newInstance();
+
+ }
+
+ @Override
+ public ProjectMetadata readProjectMetadata(String repoId, String namespace, String projectId) {
+ // TODO: could natively implement the "shared model" concept from the browse action to avoid needing it there?
+ return null;
+ }
+
+ @Override
+ public ProjectVersionMetadata readProjectVersionMetadata(ReadMetadataRequest readMetadataRequest)
+ throws RepositoryStorageMetadataNotFoundException, RepositoryStorageMetadataInvalidException,
+ RepositoryStorageRuntimeException {
+
+ ManagedRepository managedRepository = repositoryRegistry.getManagedRepository(readMetadataRequest.getRepositoryId());
+ boolean isReleases = managedRepository.getActiveReleaseSchemes().contains(ReleaseScheme.RELEASE);
+ boolean isSnapshots = managedRepository.getActiveReleaseSchemes().contains(ReleaseScheme.SNAPSHOT);
+ String artifactVersion = readMetadataRequest.getProjectVersion();
+ // olamy: in case of browsing via the ui we can mix repos (parent of a SNAPSHOT can come from release repo)
+ if (!readMetadataRequest.isBrowsingRequest()) {
+ if (VersionUtil.isSnapshot(artifactVersion)) {
+ // skygo trying to improve speed by honoring managed configuration MRM-1658
+ if (isReleases && !isSnapshots) {
+ throw new RepositoryStorageRuntimeException("lookforsnaponreleaseonly",
+ "managed repo is configured for release only");
+ }
+ } else {
+ if (!isReleases && isSnapshots) {
+ throw new RepositoryStorageRuntimeException("lookforsreleaseonsneponly",
+ "managed repo is configured for snapshot only");
+ }
+ }
+ }
+ Path basedir = Paths.get(managedRepository.getLocation());
+ if (VersionUtil.isSnapshot(artifactVersion)) {
+ Path metadataFile = pathTranslator.toFile(basedir, readMetadataRequest.getNamespace(),
+ readMetadataRequest.getProjectId(), artifactVersion,
+ METADATA_FILENAME);
+ try {
+ ArchivaRepositoryMetadata metadata = MavenMetadataReader.read(metadataFile);
+
+ // re-adjust to timestamp if present, otherwise retain the original -SNAPSHOT filename
+ SnapshotVersion snapshotVersion = metadata.getSnapshotVersion();
+ if (snapshotVersion != null) {
+ artifactVersion =
+ artifactVersion.substring(0, artifactVersion.length() - 8); // remove SNAPSHOT from end
+ artifactVersion =
+ artifactVersion + snapshotVersion.getTimestamp() + "-" + snapshotVersion.getBuildNumber();
+ }
+ } catch (XMLException e) {
+ // unable to parse metadata - LOGGER it, and continue with the version as the original SNAPSHOT version
+ LOGGER.warn("Invalid metadata: {} - {}", metadataFile, e.getMessage());
+ }
+ }
+
+ // TODO: won't work well with some other layouts, might need to convert artifact parts to ID by path translator
+ String id = readMetadataRequest.getProjectId() + "-" + artifactVersion + ".pom";
+ Path file =
+ pathTranslator.toFile(basedir, readMetadataRequest.getNamespace(), readMetadataRequest.getProjectId(),
+ readMetadataRequest.getProjectVersion(), id);
+
+ if (!Files.exists(file)) {
+ // metadata could not be resolved
+ throw new RepositoryStorageMetadataNotFoundException(
+ "The artifact's POM file '" + file.toAbsolutePath() + "' was missing");
+ }
+
+ // TODO: this is a workaround until we can properly resolve using proxies as well - this doesn't cache
+ // anything locally!
+ List<RemoteRepository> remoteRepositories = new ArrayList<>();
+ Map<String, NetworkProxy> networkProxies = new HashMap<>();
+
+ Map<String, List<ProxyConnector>> proxyConnectorsMap = proxyRegistry.getProxyConnectorAsMap();
+ List<ProxyConnector> proxyConnectors = proxyConnectorsMap.get(readMetadataRequest.getRepositoryId());
+ if (proxyConnectors != null) {
+ for (ProxyConnector proxyConnector : proxyConnectors) {
+ RemoteRepository remoteRepoConfig =
+ repositoryRegistry.getRemoteRepository(proxyConnector.getTargetRepository().getId());
+
+ if (remoteRepoConfig != null) {
+ remoteRepositories.add(remoteRepoConfig);
+
+ NetworkProxy networkProxyConfig =
+ proxyRegistry.getNetworkProxy(proxyConnector.getProxyId());
+
+ if (networkProxyConfig != null) {
+ // key/value: remote repo ID/proxy info
+ networkProxies.put(proxyConnector.getTargetRepository().getId(), networkProxyConfig);
+ }
+ }
+ }
+ }
+
+ // That's a browsing request so we can a mix of SNAPSHOT and release artifacts (especially with snapshots which
+ // can have released parent pom
+ if (readMetadataRequest.isBrowsingRequest()) {
+ remoteRepositories.addAll(repositoryRegistry.getRemoteRepositories());
+ }
+
+ ModelBuildingRequest req =
+ new DefaultModelBuildingRequest().setProcessPlugins(false).setPomFile(file.toFile()).setTwoPhaseBuilding(
+ false).setValidationLevel(ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL);
+
+ //MRM-1607. olamy this will resolve jdk profiles on the current running archiva jvm
+ req.setSystemProperties(System.getProperties());
+
+ // MRM-1411
+ req.setModelResolver(
+ new RepositoryModelResolver(managedRepository, pathTranslator, wagonFactory, remoteRepositories,
+ networkProxies, managedRepository, mavenSystemManager));
+
+ Model model;
+ try {
+ model = builder.build(req).getEffectiveModel();
+ } catch (ModelBuildingException e) {
+ String msg = "The artifact's POM file '" + file + "' was invalid: " + e.getMessage();
+
+ List<ModelProblem> modelProblems = e.getProblems();
+ for (ModelProblem problem : modelProblems) {
+ // MRM-1411, related to MRM-1335
+ // this means that the problem was that the parent wasn't resolved!
+ // olamy really hackhish but fail with java profile so use error message
+ // || ( StringUtils.startsWith( problem.getMessage(), "Failed to determine Java version for profile" ) )
+ // but setTwoPhaseBuilding(true) fix that
+ if (((problem.getException() instanceof FileNotFoundException
+ || problem.getException() instanceof NoSuchFileException
+ ) && e.getModelId() != null &&
+ !e.getModelId().equals(problem.getModelId()))) {
+ LOGGER.warn("The artifact's parent POM file '{}' cannot be resolved. "
+ + "Using defaults for project version metadata..", file);
+
+ ProjectVersionMetadata metadata = new ProjectVersionMetadata();
+ metadata.setId(readMetadataRequest.getProjectVersion());
+
+ MavenProjectFacet facet = new MavenProjectFacet();
+ facet.setGroupId(readMetadataRequest.getNamespace());
+ facet.setArtifactId(readMetadataRequest.getProjectId());
+ facet.setPackaging("jar");
+ metadata.addFacet(facet);
+
+ String errMsg =
+ "Error in resolving artifact's parent POM file. " + (problem.getException() == null
+ ? problem.getMessage()
+ : problem.getException().getMessage());
+ RepositoryProblemFacet repoProblemFacet = new RepositoryProblemFacet();
+ repoProblemFacet.setRepositoryId(readMetadataRequest.getRepositoryId());
+ repoProblemFacet.setId(readMetadataRequest.getRepositoryId());
+ repoProblemFacet.setMessage(errMsg);
+ repoProblemFacet.setProblem(errMsg);
+ repoProblemFacet.setProject(readMetadataRequest.getProjectId());
+ repoProblemFacet.setVersion(readMetadataRequest.getProjectVersion());
+ repoProblemFacet.setNamespace(readMetadataRequest.getNamespace());
+
+ metadata.addFacet(repoProblemFacet);
+
+ return metadata;
+ }
+ }
+
+ throw new RepositoryStorageMetadataInvalidException("invalid-pom", msg, e);
+ }
+
+ // Check if the POM is in the correct location
+ boolean correctGroupId = readMetadataRequest.getNamespace().equals(model.getGroupId());
+ boolean correctArtifactId = readMetadataRequest.getProjectId().equals(model.getArtifactId());
+ boolean correctVersion = readMetadataRequest.getProjectVersion().equals(model.getVersion());
+ if (!correctGroupId || !correctArtifactId || !correctVersion) {
+ StringBuilder message = new StringBuilder("Incorrect POM coordinates in '" + file + "':");
+ if (!correctGroupId) {
+ message.append("\nIncorrect group ID: ").append(model.getGroupId());
+ }
+ if (!correctArtifactId) {
+ message.append("\nIncorrect artifact ID: ").append(model.getArtifactId());
+ }
+ if (!correctVersion) {
+ message.append("\nIncorrect version: ").append(model.getVersion());
+ }
+
+ throw new RepositoryStorageMetadataInvalidException("mislocated-pom", message.toString());
+ }
+
+ ProjectVersionMetadata metadata = new ProjectVersionMetadata();
+ metadata.setCiManagement(convertCiManagement(model.getCiManagement()));
+ metadata.setDescription(model.getDescription());
+ metadata.setId(readMetadataRequest.getProjectVersion());
+ metadata.setIssueManagement(convertIssueManagement(model.getIssueManagement()));
+ metadata.setLicenses(convertLicenses(model.getLicenses()));
+ metadata.setMailingLists(convertMailingLists(model.getMailingLists()));
+ metadata.setDependencies(convertDependencies(model.getDependencies()));
+ metadata.setName(model.getName());
+ metadata.setOrganization(convertOrganization(model.getOrganization()));
+ metadata.setScm(convertScm(model.getScm()));
+ metadata.setUrl(model.getUrl());
+ metadata.setProperties(model.getProperties());
+
+ MavenProjectFacet facet = new MavenProjectFacet();
+ facet.setGroupId(model.getGroupId() != null ? model.getGroupId() : model.getParent().getGroupId());
+ facet.setArtifactId(model.getArtifactId());
+ facet.setPackaging(model.getPackaging());
+ if (model.getParent() != null) {
+ MavenProjectParent parent = new MavenProjectParent();
+ parent.setGroupId(model.getParent().getGroupId());
+ parent.setArtifactId(model.getParent().getArtifactId());
+ parent.setVersion(model.getParent().getVersion());
+ facet.setParent(parent);
+ }
+ metadata.addFacet(facet);
+
+ return metadata;
+
+
+ }
+
+ public void setWagonFactory(WagonFactory wagonFactory) {
+ this.wagonFactory = wagonFactory;
+ }
+
+ private List<org.apache.archiva.metadata.model.Dependency> convertDependencies(List<Dependency> dependencies) {
+ List<org.apache.archiva.metadata.model.Dependency> l = new ArrayList<>();
+ for (Dependency dependency : dependencies) {
+ org.apache.archiva.metadata.model.Dependency newDependency =
+ new org.apache.archiva.metadata.model.Dependency();
+ newDependency.setArtifactId(dependency.getArtifactId());
+ newDependency.setClassifier(dependency.getClassifier());
+ newDependency.setGroupId(dependency.getGroupId());
+ newDependency.setOptional(dependency.isOptional());
+ newDependency.setScope(dependency.getScope());
+ newDependency.setSystemPath(dependency.getSystemPath());
+ newDependency.setType(dependency.getType());
+ newDependency.setVersion(dependency.getVersion());
+ l.add(newDependency);
+ }
+ return l;
+ }
+
+ private org.apache.archiva.metadata.model.Scm convertScm(Scm scm) {
+ org.apache.archiva.metadata.model.Scm newScm = null;
+ if (scm != null) {
+ newScm = new org.apache.archiva.metadata.model.Scm();
+ newScm.setConnection(scm.getConnection());
+ newScm.setDeveloperConnection(scm.getDeveloperConnection());
+ newScm.setUrl(scm.getUrl());
+ }
+ return newScm;
+ }
+
+ private org.apache.archiva.metadata.model.Organization convertOrganization(Organization organization) {
+ org.apache.archiva.metadata.model.Organization org = null;
+ if (organization != null) {
+ org = new org.apache.archiva.metadata.model.Organization();
+ org.setName(organization.getName());
+ org.setUrl(organization.getUrl());
+ }
+ return org;
+ }
+
+ private List<org.apache.archiva.metadata.model.License> convertLicenses(List<License> licenses) {
+ List<org.apache.archiva.metadata.model.License> l = new ArrayList<>();
+ for (License license : licenses) {
+ org.apache.archiva.metadata.model.License newLicense = new org.apache.archiva.metadata.model.License();
+ newLicense.setName(license.getName());
+ newLicense.setUrl(license.getUrl());
+ l.add(newLicense);
+ }
+ return l;
+ }
+
+ private List<org.apache.archiva.metadata.model.MailingList> convertMailingLists(List<MailingList> mailingLists) {
+ List<org.apache.archiva.metadata.model.MailingList> l = new ArrayList<>();
+ for (MailingList mailingList : mailingLists) {
+ org.apache.archiva.metadata.model.MailingList newMailingList =
+ new org.apache.archiva.metadata.model.MailingList();
+ newMailingList.setName(mailingList.getName());
+ newMailingList.setMainArchiveUrl(mailingList.getArchive());
+ newMailingList.setPostAddress(mailingList.getPost());
+ newMailingList.setSubscribeAddress(mailingList.getSubscribe());
+ newMailingList.setUnsubscribeAddress(mailingList.getUnsubscribe());
+ newMailingList.setOtherArchives(mailingList.getOtherArchives());
+ l.add(newMailingList);
+ }
+ return l;
+ }
+
+ private org.apache.archiva.metadata.model.IssueManagement convertIssueManagement(IssueManagement issueManagement) {
+ org.apache.archiva.metadata.model.IssueManagement im = null;
+ if (issueManagement != null) {
+ im = new org.apache.archiva.metadata.model.IssueManagement();
+ im.setSystem(issueManagement.getSystem());
+ im.setUrl(issueManagement.getUrl());
+ }
+ return im;
+ }
+
+ private org.apache.archiva.metadata.model.CiManagement convertCiManagement(CiManagement ciManagement) {
+ org.apache.archiva.metadata.model.CiManagement ci = null;
+ if (ciManagement != null) {
+ ci = new org.apache.archiva.metadata.model.CiManagement();
+ ci.setSystem(ciManagement.getSystem());
+ ci.setUrl(ciManagement.getUrl());
+ }
+ return ci;
+ }
+
+ @Override
+ public Collection<String> listRootNamespaces(String repoId, Filter<String> filter)
+ throws RepositoryStorageRuntimeException {
+ Path dir = getRepositoryBasedir(repoId);
+
+ return getSortedFiles(dir, filter);
+ }
+
+ private static Collection<String> getSortedFiles(Path dir, Filter<String> filter) {
+
+ try (Stream<Path> stream = Files.list(dir)) {
+ final Predicate<Path> dFilter = new DirectoryFilter(filter);
+ return stream.filter(Files::isDirectory)
+ .filter(dFilter)
+ .map(path -> path.getFileName().toString())
+ .sorted().collect(Collectors.toList());
+
+ } catch (IOException e) {
+ LOGGER.error("Could not read directory list {}: {}", dir, e.getMessage(), e);
+ return Collections.emptyList();
+ }
+ }
+
+ private Path getRepositoryBasedir(String repoId)
+ throws RepositoryStorageRuntimeException {
+ ManagedRepository repositoryConfiguration = repositoryRegistry.getManagedRepository(repoId);
+
+ return Paths.get(repositoryConfiguration.getLocation());
+ }
+
+ @Override
+ public Collection<String> listNamespaces(String repoId, String namespace, Filter<String> filter)
+ throws RepositoryStorageRuntimeException {
+ Path dir = pathTranslator.toFile(getRepositoryBasedir(repoId), namespace);
+ if (!(Files.exists(dir) && Files.isDirectory(dir))) {
+ return Collections.emptyList();
+ }
+ // scan all the directories which are potential namespaces. Any directories known to be projects are excluded
+ Predicate<Path> dFilter = new DirectoryFilter(filter);
+ try (Stream<Path> stream = Files.list(dir)) {
+ return stream.filter(dFilter).filter(path -> !isProject(path, filter)).map(path -> path.getFileName().toString())
+ .sorted().collect(Collectors.toList());
+ } catch (IOException e) {
+ LOGGER.error("Could not read directory {}: {}", dir, e.getMessage(), e);
+ return Collections.emptyList();
+ }
+ }
+
+ @Override
+ public Collection<String> listProjects(String repoId, String namespace, Filter<String> filter)
+ throws RepositoryStorageRuntimeException {
+ Path dir = pathTranslator.toFile(getRepositoryBasedir(repoId), namespace);
+ if (!(Files.exists(dir) && Files.isDirectory(dir))) {
+ return Collections.emptyList();
+ }
+ // scan all directories in the namespace, and only include those that are known to be projects
+ final Predicate<Path> dFilter = new DirectoryFilter(filter);
+ try (Stream<Path> stream = Files.list(dir)) {
+ return stream.filter(dFilter).filter(path -> isProject(path, filter)).map(path -> path.getFileName().toString())
+ .sorted().collect(Collectors.toList());
+ } catch (IOException e) {
+ LOGGER.error("Could not read directory {}: {}", dir, e.getMessage(), e);
+ return Collections.emptyList();
+ }
+
+ }
+
+ @Override
+ public Collection<String> listProjectVersions(String repoId, String namespace, String projectId,
+ Filter<String> filter)
+ throws RepositoryStorageRuntimeException {
+ Path dir = pathTranslator.toFile(getRepositoryBasedir(repoId), namespace, projectId);
+ if (!(Files.exists(dir) && Files.isDirectory(dir))) {
+ return Collections.emptyList();
+ }
+
+ // all directories in a project directory can be considered a version
+ return getSortedFiles(dir, filter);
+ }
+
+ @Override
+ public Collection<ArtifactMetadata> readArtifactsMetadata(ReadMetadataRequest readMetadataRequest)
+ throws RepositoryStorageRuntimeException {
+ Path dir = pathTranslator.toFile(getRepositoryBasedir(readMetadataRequest.getRepositoryId()),
+ readMetadataRequest.getNamespace(), readMetadataRequest.getProjectId(),
+ readMetadataRequest.getProjectVersion());
+ if (!(Files.exists(dir) && Files.isDirectory(dir))) {
+ return Collections.emptyList();
+ }
+
+ // all files that are not metadata and not a checksum / signature are considered artifacts
+ final Predicate<Path> dFilter = new ArtifactDirectoryFilter(readMetadataRequest.getFilter());
+ try (Stream<Path> stream = Files.list(dir)) {
+ // Returns a map TRUE -> (success values), FALSE -> (Exceptions)
+ Map<Boolean, List<Try<ArtifactMetadata>>> result = stream.filter(dFilter).map(path -> {
+ try {
+ return Try.success(getArtifactFromFile(readMetadataRequest.getRepositoryId(), readMetadataRequest.getNamespace(),
+ readMetadataRequest.getProjectId(), readMetadataRequest.getProjectVersion(),
+ path));
+ } catch (Exception e) {
+ LOGGER.debug("Could not create metadata for {}: {}", path, e.getMessage(), e);
+ return Try.<ArtifactMetadata>failure(e);
+ }
+ }
+ ).collect(Collectors.groupingBy(Try::isSuccess));
+ if (result.containsKey(Boolean.FALSE) && result.get(Boolean.FALSE).size() > 0 && (!result.containsKey(Boolean.TRUE) || result.get(Boolean.TRUE).size() == 0)) {
+ LOGGER.error("Could not get artifact metadata. Directory: {}. Number of errors {}.", dir, result.get(Boolean.FALSE).size());
+ Try<ArtifactMetadata> failure = result.get(Boolean.FALSE).get(0);
+ LOGGER.error("Sample exception {}", failure.getError().getMessage(), failure.getError());
+ throw new RepositoryStorageRuntimeException(readMetadataRequest.getRepositoryId(), "Could not retrieve metadata of the files");
+ } else {
+ if (!result.containsKey(Boolean.TRUE) || result.get(Boolean.TRUE) == null) {
+ return Collections.emptyList();
+ }
+ return result.get(Boolean.TRUE).stream().map(tr -> tr.get()).collect(Collectors.toList());
+ }
+ } catch (IOException e) {
+ LOGGER.error("Could not read directory {}: {}", dir, e.getMessage(), e);
+ }
+ return Collections.emptyList();
+
+ }
+
+ @Override
+ public ArtifactMetadata readArtifactMetadataFromPath(String repoId, String path)
+ throws RepositoryStorageRuntimeException {
+ ArtifactMetadata metadata = pathTranslator.getArtifactForPath(repoId, path);
+
+ try {
+ populateArtifactMetadataFromFile(metadata, getRepositoryBasedir(repoId).resolve(path));
+ } catch (IOException e) {
+ throw new RepositoryStorageRuntimeException(repoId, "Error during metadata retrieval of " + path + " :" + e.getMessage(), e);
+ }
+
+ return metadata;
+ }
+
+ private ArtifactMetadata getArtifactFromFile(String repoId, String namespace, String projectId,
+ String projectVersion, Path file) throws IOException {
+ ArtifactMetadata metadata =
+ pathTranslator.getArtifactFromId(repoId, namespace, projectId, projectVersion, file.getFileName().toString());
+
+ populateArtifactMetadataFromFile(metadata, file);
+
+ return metadata;
+ }
+
+ @Override
+ public void applyServerSideRelocation(ManagedRepositoryContent managedRepository, ArtifactReference artifact)
+ throws ProxyDownloadException {
+ if ("pom".equals(artifact.getType())) {
+ return;
+ }
+
+ // Build the artifact POM reference
+ ArtifactReference pomReference = new ArtifactReference();
+ pomReference.setGroupId(artifact.getGroupId());
+ pomReference.setArtifactId(artifact.getArtifactId());
+ pomReference.setVersion(artifact.getVersion());
+ pomReference.setType("pom");
+
+ RepositoryType repositoryType = managedRepository.getRepository().getType();
+ if (!proxyRegistry.hasHandler(repositoryType)) {
+ throw new ProxyDownloadException("No proxy handler found for repository type "+repositoryType, new HashMap<>());
+ }
+
+ RepositoryProxyHandler proxyHandler = proxyRegistry.getHandler(repositoryType).get(0);
+
+ // Get the artifact POM from proxied repositories if needed
+ proxyHandler.fetchFromProxies(managedRepository, pomReference);
+
+ // Open and read the POM from the managed repo
+ Path pom = managedRepository.toFile(pomReference);
+
+ if (!Files.exists(pom)) {
+ return;
+ }
+
+ try {
+ // MavenXpp3Reader leaves the file open, so we need to close it ourselves.
+
+ Model model = null;
+ try (Reader reader = Files.newBufferedReader(pom, Charset.defaultCharset())) {
+ model = MAVEN_XPP_3_READER.read(reader);
+ }
+
+ DistributionManagement dist = model.getDistributionManagement();
+ if (dist != null) {
+ Relocation relocation = dist.getRelocation();
+ if (relocation != null) {
+ // artifact is relocated : update the repositoryPath
+ if (relocation.getGroupId() != null) {
+ artifact.setGroupId(relocation.getGroupId());
+ }
+ if (relocation.getArtifactId() != null) {
+ artifact.setArtifactId(relocation.getArtifactId());
+ }
+ if (relocation.getVersion() != null) {
+ artifact.setVersion(relocation.getVersion());
+ }
+ }
+ }
+ } catch (IOException e) {
+ // Unable to read POM : ignore.
+ } catch (XmlPullParserException e) {
+ // Invalid POM : ignore
+ }
+ }
+
+
+ @Override
+ public String getFilePath(String requestPath, org.apache.archiva.repository.ManagedRepository managedRepository) {
+ // managedRepository can be null
+ // extract artifact reference from url
+ // groupId:artifactId:version:packaging:classifier
+ //org/apache/archiva/archiva-checksum/1.4-M4-SNAPSHOT/archiva-checksum-1.4-M4-SNAPSHOT.jar
+ String logicalResource = null;
+ String requestPathInfo = StringUtils.defaultString(requestPath);
+
+ //remove prefix ie /repository/blah becomes /blah
+ requestPathInfo = removePrefix(requestPathInfo);
+
+ // Remove prefixing slash as the repository id doesn't contain it;
+ if (requestPathInfo.startsWith("/")) {
+ requestPathInfo = requestPathInfo.substring(1);
+ }
+
+ int slash = requestPathInfo.indexOf('/');
+ if (slash > 0) {
+ logicalResource = requestPathInfo.substring(slash);
+
+ if (logicalResource.endsWith("/..")) {
+ logicalResource += "/";
+ }
+
+ if (logicalResource != null && logicalResource.startsWith("//")) {
+ logicalResource = logicalResource.substring(1);
+ }
+
+ if (logicalResource == null) {
+ logicalResource = "/";
+ }
+ } else {
+ logicalResource = "/";
+ }
+ return logicalResource;
+
+ }
+
+ @Override
+ public String getFilePathWithVersion(final String requestPath, ManagedRepositoryContent managedRepositoryContent)
+ throws XMLException, RelocationException {
+
+ if (StringUtils.endsWith(requestPath, METADATA_FILENAME)) {
+ return getFilePath(requestPath, managedRepositoryContent.getRepository());
+ }
+
+ String filePath = getFilePath(requestPath, managedRepositoryContent.getRepository());
+
+ ArtifactReference artifactReference = null;
+ try {
+ artifactReference = pathParser.toArtifactReference(filePath);
+ } catch (LayoutException e) {
+ return filePath;
+ }
+
+ if (StringUtils.endsWith(artifactReference.getVersion(), VersionUtil.SNAPSHOT)) {
+ // read maven metadata to get last timestamp
+ Path metadataDir = Paths.get(managedRepositoryContent.getRepoRoot(), filePath).getParent();
+ if (!Files.exists(metadataDir)) {
+ return filePath;
+ }
+ Path metadataFile = metadataDir.resolve(METADATA_FILENAME);
+ if (!Files.exists(metadataFile)) {
+ return filePath;
+ }
+ ArchivaRepositoryMetadata archivaRepositoryMetadata = MavenMetadataReader.read(metadataFile);
+ int buildNumber = archivaRepositoryMetadata.getSnapshotVersion().getBuildNumber();
+ String timestamp = archivaRepositoryMetadata.getSnapshotVersion().getTimestamp();
+
+ // MRM-1846
+ if (buildNumber < 1 && timestamp == null) {
+ return filePath;
+ }
+
+ // org/apache/archiva/archiva-checksum/1.4-M4-SNAPSHOT/archiva-checksum-1.4-M4-SNAPSHOT.jar
+ // -> archiva-checksum-1.4-M4-20130425.081822-1.jar
+
+ filePath = StringUtils.replace(filePath, //
+ artifactReference.getArtifactId() //
+ + "-" + artifactReference.getVersion(), //
+ artifactReference.getArtifactId() //
+ + "-" + StringUtils.remove(artifactReference.getVersion(),
+ "-" + VersionUtil.SNAPSHOT) //
+ + "-" + timestamp //
+ + "-" + buildNumber);
+
+ throw new RelocationException("/repository/" + managedRepositoryContent.getRepository().getId() +
+ (StringUtils.startsWith(filePath, "/") ? "" : "/") + filePath,
+ RelocationException.RelocationType.TEMPORARY);
+
+ }
+
+ return filePath;
+ }
+
+ //-----------------------------
+ // internal
+ //-----------------------------
+
+ /**
+ * FIXME remove
+ *
+ * @param href
+ * @return
+ */
+ private static String removePrefix(final String href) {
+ String[] parts = StringUtils.split(href, '/');
+ parts = (String[]) ArrayUtils.subarray(parts, 1, parts.length);
+ if (parts == null || parts.length == 0) {
+ return "/";
+ }
+
+ String joinedString = StringUtils.join(parts, '/');
+ if (href.endsWith("/")) {
+ joinedString = joinedString + "/";
+ }
+
+ return joinedString;
+ }
+
+ private static void populateArtifactMetadataFromFile(ArtifactMetadata metadata, Path file) throws IOException {
+ metadata.setWhenGathered(new Date());
+ metadata.setFileLastModified(Files.getLastModifiedTime(file).toMillis());
+ ChecksummedFile checksummedFile = new ChecksummedFile(file);
+ try {
+ metadata.setMd5(checksummedFile.calculateChecksum(ChecksumAlgorithm.MD5));
+ } catch (IOException e) {
+ LOGGER.error("Unable to checksum file {}: {},MD5", file, e.getMessage());
+ }
+ try {
+ metadata.setSha1(checksummedFile.calculateChecksum(ChecksumAlgorithm.SHA1));
+ } catch (IOException e) {
+ LOGGER.error("Unable to checksum file {}: {},SHA1", file, e.getMessage());
+ }
+ metadata.setSize(Files.size(file));
+ }
+
+ private boolean isProject(Path dir, Filter<String> filter) {
+ // scan directories for a valid project version subdirectory, meaning this must be a project directory
+ final Predicate<Path> dFilter = new DirectoryFilter(filter);
+ try (Stream<Path> stream = Files.list(dir)) {
+ boolean projFound = stream.filter(dFilter)
+ .anyMatch(path -> isProjectVersion(path));
+ if (projFound) {
+ return true;
+ }
+ } catch (IOException e) {
+ LOGGER.error("Could not read directory list {}: {}", dir, e.getMessage(), e);
+ }
+
+ // if a metadata file is present, check if this is the "artifactId" directory, marking it as a project
+ ArchivaRepositoryMetadata metadata = readMetadata(dir);
+ if (metadata != null && dir.getFileName().toString().equals(metadata.getArtifactId())) {
+ return true;
+ }
+
+ return false;
+ }
+
+ private boolean isProjectVersion(Path dir) {
+ final String artifactId = dir.getParent().getFileName().toString();
+ final String projectVersion = dir.getFileName().toString();
+
+ // check if there is a POM artifact file to ensure it is a version directory
+
+ Predicate<Path> filter;
+ if (VersionUtil.isSnapshot(projectVersion)) {
+ filter = new PomFilenameFilter(artifactId, projectVersion);
+ } else {
+ final String pomFile = artifactId + "-" + projectVersion + ".pom";
+ filter = new PomFileFilter(pomFile);
+ }
+ try (Stream<Path> stream = Files.list(dir)) {
+ if (stream.filter(Files::isRegularFile).anyMatch(filter)) {
+ return true;
+ }
+ } catch (IOException e) {
+ LOGGER.error("Could not list directory {}: {}", dir, e.getMessage(), e);
+ }
+
+ // if a metadata file is present, check if this is the "version" directory, marking it as a project version
+ ArchivaRepositoryMetadata metadata = readMetadata(dir);
+ if (metadata != null && projectVersion.equals(metadata.getVersion())) {
+ return true;
+ }
+
+ return false;
+ }
+
+ private ArchivaRepositoryMetadata readMetadata(Path directory) {
+ ArchivaRepositoryMetadata metadata = null;
+ Path metadataFile = directory.resolve(METADATA_FILENAME);
+ if (Files.exists(metadataFile)) {
+ try {
+ metadata = MavenMetadataReader.read(metadataFile);
+ } catch (XMLException e) {
+ // ignore missing or invalid metadata
+ }
+ }
+ return metadata;
+ }
+
+ private static class DirectoryFilter
+ implements Predicate<Path> {
+ private final Filter<String> filter;
+
+ public DirectoryFilter(Filter<String> filter) {
+ this.filter = filter;
+ }
+
+ @Override
+ public boolean test(Path dir) {
+ final String name = dir.getFileName().toString();
+ if (!filter.accept(name)) {
+ return false;
+ } else if (name.startsWith(".")) {
+ return false;
+ } else if (!Files.isDirectory(dir)) {
+ return false;
+ }
+ return true;
+ }
+ }
+
+ private static class ArtifactDirectoryFilter
+ implements Predicate<Path> {
+ private final Filter<String> filter;
+
+ private ArtifactDirectoryFilter(Filter<String> filter) {
+ this.filter = filter;
+ }
+
+ @Override
+ public boolean test(Path dir) {
+ final String name = dir.getFileName().toString();
+ // TODO compare to logic in maven-repository-layer
+ if (!filter.accept(name)) {
+ return false;
+ } else if (name.startsWith(".")) {
+ return false;
+ } else if (name.endsWith(".md5") || name.endsWith(".sha1") || name.endsWith(".asc")) {
+ return false;
+ } else if (Arrays.binarySearch(IGNORED_FILES, name) >= 0) {
+ return false;
+ } else if (Files.isDirectory(dir)) {
+ return false;
+ }
+ // some files from remote repositories can have name like maven-metadata-archiva-vm-all-public.xml
+ else if (StringUtils.startsWith(name, METADATA_FILENAME_START) && StringUtils.endsWith(name, ".xml")) {
+ return false;
+ }
+
+ return true;
+
+ }
+ }
+
+
+ private static final class PomFilenameFilter
+ implements Predicate<Path> {
+
+ private final String artifactId, projectVersion;
+
+ private PomFilenameFilter(String artifactId, String projectVersion) {
+ this.artifactId = artifactId;
+ this.projectVersion = projectVersion;
+ }
+
+ @Override
+ public boolean test(Path dir) {
+ final String name = dir.getFileName().toString();
+ if (name.startsWith(artifactId + "-") && name.endsWith(".pom")) {
+ String v = name.substring(artifactId.length() + 1, name.length() - 4);
+ v = VersionUtil.getBaseVersion(v);
+ if (v.equals(projectVersion)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ }
+
+ private static class PomFileFilter
+ implements Predicate<Path> {
+ private final String pomFile;
+
+ private PomFileFilter(String pomFile) {
+ this.pomFile = pomFile;
+ }
+
+ @Override
+ public boolean test(Path dir) {
+ return pomFile.equals(dir.getFileName().toString());
+ }
+ }
+
+
+ public PathParser getPathParser() {
+ return pathParser;
+ }
+
+ public void setPathParser(PathParser pathParser) {
+ this.pathParser = pathParser;
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenArtifactFacetFactory.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenArtifactFacetFactory.java
new file mode 100644
index 000000000..e0c57ba76
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenArtifactFacetFactory.java
@@ -0,0 +1,45 @@
+package org.apache.archiva.metadata.repository.storage.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.metadata.model.MetadataFacet;
+import org.apache.archiva.metadata.model.MetadataFacetFactory;
+import org.apache.archiva.metadata.model.maven2.MavenArtifactFacet;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ */
+@Service("metadataFacetFactory#org.apache.archiva.metadata.repository.storage.maven2.artifact")
+public class MavenArtifactFacetFactory
+ implements MetadataFacetFactory
+{
+ @Override
+ public MetadataFacet createMetadataFacet()
+ {
+ return new MavenArtifactFacet();
+ }
+
+ @Override
+ public MetadataFacet createMetadataFacet( String repositoryId, String name )
+ {
+ throw new UnsupportedOperationException( "There is no valid name for artifact facets" );
+ }
+} \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenProjectFacet.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenProjectFacet.java
new file mode 100644
index 000000000..190658a8d
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenProjectFacet.java
@@ -0,0 +1,164 @@
+package org.apache.archiva.metadata.repository.storage.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.metadata.model.MetadataFacet;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class MavenProjectFacet
+ implements MetadataFacet
+{
+ private String groupId;
+
+ private String artifactId;
+
+ private MavenProjectParent parent;
+
+ private String packaging;
+
+ public static final String FACET_ID = "org.apache.archiva.metadata.repository.storage.maven2.project";
+
+ 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 MavenProjectParent getParent()
+ {
+ return parent;
+ }
+
+ public void setParent( MavenProjectParent parent )
+ {
+ this.parent = parent;
+ }
+
+ public String getPackaging()
+ {
+ return packaging;
+ }
+
+ public void setPackaging( String packaging )
+ {
+ this.packaging = packaging;
+ }
+
+ @Override
+ public String getFacetId()
+ {
+ return FACET_ID;
+ }
+
+ @Override
+ public String getName()
+ {
+ // TODO: not needed, perhaps version metadata facet should be separate interface?
+ return null;
+ }
+
+ @Override
+ public Map<String, String> toProperties()
+ {
+ HashMap<String, String> properties = new HashMap<>();
+ properties.put( "groupId", groupId );
+ properties.put( "artifactId", artifactId );
+ properties.put( "packaging", packaging );
+ if ( parent != null )
+ {
+ properties.put( "parent.groupId", parent.getGroupId() );
+ properties.put( "parent.artifactId", parent.getArtifactId() );
+ properties.put( "parent.version", parent.getVersion() );
+ }
+ return properties;
+ }
+
+ @Override
+ public void fromProperties( Map<String, String> properties )
+ {
+ groupId = properties.get( "groupId" );
+ artifactId = properties.get( "artifactId" );
+ packaging = properties.get( "packaging" );
+ String parentArtifactId = properties.get( "parent.artifactId" );
+ if ( parentArtifactId != null )
+ {
+ MavenProjectParent parent = new MavenProjectParent();
+ parent.setGroupId( properties.get( "parent.groupId" ) );
+ parent.setArtifactId( parentArtifactId );
+ parent.setVersion( properties.get( "parent.version" ) );
+ this.parent = parent;
+ }
+ }
+
+ @Override
+ public boolean equals( Object o )
+ {
+ if ( this == o )
+ {
+ return true;
+ }
+ if ( !( o instanceof MavenProjectFacet ) )
+ {
+ return false;
+ }
+
+ MavenProjectFacet that = (MavenProjectFacet) o;
+
+ if ( !artifactId.equals( that.artifactId ) )
+ {
+ return false;
+ }
+ if ( !groupId.equals( that.groupId ) )
+ {
+ return false;
+ }
+ if ( !packaging.equals( that.packaging ) )
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ int result = groupId.hashCode();
+ result = 31 * result + artifactId.hashCode();
+ result = 31 * result + packaging.hashCode();
+ return result;
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenProjectFacetFactory.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenProjectFacetFactory.java
new file mode 100644
index 000000000..a7bd89a29
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenProjectFacetFactory.java
@@ -0,0 +1,44 @@
+package org.apache.archiva.metadata.repository.storage.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.metadata.model.MetadataFacet;
+import org.apache.archiva.metadata.model.MetadataFacetFactory;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ */
+@Service( "metadataFacetFactory#org.apache.archiva.metadata.repository.storage.maven2.project" )
+public class MavenProjectFacetFactory
+ implements MetadataFacetFactory
+{
+ @Override
+ public MetadataFacet createMetadataFacet()
+ {
+ return new MavenProjectFacet();
+ }
+
+ @Override
+ public MetadataFacet createMetadataFacet( String repositoryId, String name )
+ {
+ throw new UnsupportedOperationException( "There is no valid name for project version facets" );
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenProjectParent.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenProjectParent.java
new file mode 100644
index 000000000..d9757d716
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenProjectParent.java
@@ -0,0 +1,59 @@
+package org.apache.archiva.metadata.repository.storage.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT 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 MavenProjectParent
+{
+ private String groupId;
+
+ private String artifactId;
+
+ private String version;
+
+ public String getVersion()
+ {
+ return version;
+ }
+
+ public void setVersion( String version )
+ {
+ this.version = version;
+ }
+
+ public String getArtifactId()
+ {
+ return artifactId;
+ }
+
+ public void setArtifactId( String artifactId )
+ {
+ this.artifactId = artifactId;
+ }
+
+ public String getGroupId()
+ {
+ return groupId;
+ }
+
+ public void setGroupId( String groupId )
+ {
+ this.groupId = groupId;
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/RepositoryModelResolver.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/RepositoryModelResolver.java
new file mode 100644
index 000000000..c214a5051
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/RepositoryModelResolver.java
@@ -0,0 +1,594 @@
+package org.apache.archiva.metadata.repository.storage.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.common.utils.VersionUtil;
+import org.apache.archiva.maven2.metadata.MavenMetadataReader;
+import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator;
+import org.apache.archiva.model.ArchivaRepositoryMetadata;
+import org.apache.archiva.model.SnapshotVersion;
+import org.apache.archiva.proxy.maven.WagonFactory;
+import org.apache.archiva.proxy.maven.WagonFactoryException;
+import org.apache.archiva.proxy.maven.WagonFactoryRequest;
+import org.apache.archiva.proxy.model.NetworkProxy;
+import org.apache.archiva.repository.ManagedRepository;
+import org.apache.archiva.repository.RemoteRepository;
+import org.apache.archiva.repository.RepositoryCredentials;
+import org.apache.archiva.repository.maven2.MavenSystemManager;
+import org.apache.archiva.xml.XMLException;
+import org.apache.commons.lang.StringUtils;
+import org.apache.http.auth.UsernamePasswordCredentials;
+import org.apache.maven.model.Dependency;
+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.wagon.ConnectionException;
+import org.apache.maven.wagon.ResourceDoesNotExistException;
+import org.apache.maven.wagon.TransferFailedException;
+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.proxy.ProxyInfo;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.artifact.DefaultArtifact;
+import org.eclipse.aether.impl.VersionRangeResolver;
+import org.eclipse.aether.resolution.VersionRangeRequest;
+import org.eclipse.aether.resolution.VersionRangeResolutionException;
+import org.eclipse.aether.resolution.VersionRangeResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class RepositoryModelResolver
+ implements ModelResolver
+{
+
+ private final Map<String, NetworkProxy> networkProxyMap = new HashMap<>();
+
+ private RepositorySystemSession session;
+ private VersionRangeResolver versionRangeResolver;
+
+ private Path basedir;
+
+ private RepositoryPathTranslator pathTranslator;
+
+ private WagonFactory wagonFactory;
+
+ private List<RemoteRepository> remoteRepositories;
+
+ private ManagedRepository targetRepository;
+
+ private static final Logger log = LoggerFactory.getLogger( RepositoryModelResolver.class );
+
+ private static final String METADATA_FILENAME = "maven-metadata.xml";
+
+ private MavenSystemManager mavenSystemManager;
+
+
+
+ private ManagedRepository managedRepository;
+
+ public RepositoryModelResolver( Path basedir, RepositoryPathTranslator pathTranslator )
+ {
+ this.basedir = basedir;
+
+ this.pathTranslator = pathTranslator;
+ }
+
+ public RepositoryModelResolver(ManagedRepository managedRepository, RepositoryPathTranslator pathTranslator,
+ WagonFactory wagonFactory, List<RemoteRepository> remoteRepositories,
+ Map<String, NetworkProxy> networkProxiesMap, ManagedRepository targetRepository,
+ MavenSystemManager mavenSystemManager)
+ {
+ this( Paths.get( managedRepository.getLocation() ), pathTranslator );
+
+ this.managedRepository = managedRepository;
+
+ this.wagonFactory = wagonFactory;
+
+ this.remoteRepositories = remoteRepositories;
+
+ this.networkProxyMap.clear();
+ this.networkProxyMap.putAll(networkProxiesMap);
+
+ this.targetRepository = targetRepository;
+
+ this.session = MavenSystemManager.newRepositorySystemSession( managedRepository.getLocalPath().toString() );
+
+ this.versionRangeResolver = mavenSystemManager.getLocator().getService(VersionRangeResolver.class);
+
+ this.mavenSystemManager = mavenSystemManager;
+ }
+
+
+ @Override
+ public ModelSource resolveModel( String groupId, String artifactId, String version )
+ throws UnresolvableModelException
+ {
+ String filename = artifactId + "-" + version + ".pom";
+ // TODO: we need to convert 1.0-20091120.112233-1 type paths to baseVersion for the below call - add a test
+
+ Path model = pathTranslator.toFile( basedir, groupId, artifactId, version, filename );
+
+ if ( !Files.exists(model) )
+ {
+ /**
+ *
+ */
+ // is a SNAPSHOT ? so we can try to find locally before asking remote repositories.
+ if ( StringUtils.contains( version, VersionUtil.SNAPSHOT ) )
+ {
+ Path localSnapshotModel = findTimeStampedSnapshotPom( groupId, artifactId, version, model.getParent().toString() );
+ if ( localSnapshotModel != null )
+ {
+ return new FileModelSource( localSnapshotModel.toFile() );
+ }
+
+ }
+
+ for ( RemoteRepository remoteRepository : remoteRepositories )
+ {
+ try
+ {
+ boolean success = getModelFromProxy( remoteRepository, groupId, artifactId, version, filename );
+ if ( success && Files.exists(model) )
+ {
+ log.info( "Model '{}' successfully retrieved from remote repository '{}'",
+ model.toAbsolutePath(), remoteRepository.getId() );
+ break;
+ }
+ }
+ catch ( ResourceDoesNotExistException e )
+ {
+ log.info(
+ "An exception was caught while attempting to retrieve model '{}' from remote repository '{}'.Reason:{}",
+ model.toAbsolutePath(), remoteRepository.getId(), e.getMessage() );
+ }
+ catch ( Exception e )
+ {
+ log.warn(
+ "An exception was caught while attempting to retrieve model '{}' from remote repository '{}'.Reason:{}",
+ model.toAbsolutePath(), remoteRepository.getId(), e.getMessage() );
+
+ continue;
+ }
+ }
+ }
+
+ return new FileModelSource( model.toFile() );
+ }
+
+ public ModelSource resolveModel(Parent parent) throws UnresolvableModelException {
+ try {
+ Artifact artifact = new DefaultArtifact(parent.getGroupId(), parent.getArtifactId(), "", "pom", parent.getVersion());
+ VersionRangeRequest versionRangeRequest;
+ versionRangeRequest = new VersionRangeRequest(artifact, null, null);
+ VersionRangeResult versionRangeResult = this.versionRangeResolver.resolveVersionRange(this.session, versionRangeRequest);
+ if (versionRangeResult.getHighestVersion() == null) {
+ throw new UnresolvableModelException(String.format("No versions matched the requested parent version range '%s'", parent.getVersion()), parent.getGroupId(), parent.getArtifactId(), parent.getVersion());
+ } else if (versionRangeResult.getVersionConstraint() != null && versionRangeResult.getVersionConstraint().getRange() != null && versionRangeResult.getVersionConstraint().getRange().getUpperBound() == null) {
+ throw new UnresolvableModelException(String.format("The requested parent version range '%s' does not specify an upper bound", parent.getVersion()), parent.getGroupId(), parent.getArtifactId(), parent.getVersion());
+ } else {
+ parent.setVersion(versionRangeResult.getHighestVersion().toString());
+ return this.resolveModel(parent.getGroupId(), parent.getArtifactId(), parent.getVersion());
+ }
+ } catch ( VersionRangeResolutionException var5) {
+ throw new UnresolvableModelException(var5.getMessage(), parent.getGroupId(), parent.getArtifactId(), parent.getVersion(), var5);
+ }
+ }
+
+ public ModelSource resolveModel(Dependency dependency) throws UnresolvableModelException {
+ try {
+ Artifact artifact = new DefaultArtifact(dependency.getGroupId(), dependency.getArtifactId(), "", "pom", dependency.getVersion());
+ VersionRangeRequest versionRangeRequest = new VersionRangeRequest(artifact, null, null);
+ VersionRangeResult versionRangeResult = this.versionRangeResolver.resolveVersionRange(this.session, versionRangeRequest);
+ if (versionRangeResult.getHighestVersion() == null) {
+ throw new UnresolvableModelException(String.format("No versions matched the requested dependency version range '%s'", dependency.getVersion()), dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion());
+ } else if (versionRangeResult.getVersionConstraint() != null && versionRangeResult.getVersionConstraint().getRange() != null && versionRangeResult.getVersionConstraint().getRange().getUpperBound() == null) {
+ throw new UnresolvableModelException(String.format("The requested dependency version range '%s' does not specify an upper bound", dependency.getVersion()), dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion());
+ } else {
+ dependency.setVersion(versionRangeResult.getHighestVersion().toString());
+ return this.resolveModel(dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion());
+ }
+ } catch (VersionRangeResolutionException var5) {
+ throw new UnresolvableModelException(var5.getMessage(), dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion(), var5);
+ }
+ }
+
+ protected Path findTimeStampedSnapshotPom( String groupId, String artifactId, String version,
+ String parentDirectory )
+ {
+
+ // reading metadata if there
+ Path mavenMetadata = Paths.get( parentDirectory, METADATA_FILENAME );
+ if ( Files.exists(mavenMetadata) )
+ {
+ try
+ {
+ ArchivaRepositoryMetadata archivaRepositoryMetadata = MavenMetadataReader.read( mavenMetadata);
+ SnapshotVersion snapshotVersion = archivaRepositoryMetadata.getSnapshotVersion();
+ if ( snapshotVersion != null )
+ {
+ String lastVersion = snapshotVersion.getTimestamp();
+ int buildNumber = snapshotVersion.getBuildNumber();
+ String snapshotPath =
+ StringUtils.replaceChars( groupId, '.', '/' ) + '/' + artifactId + '/' + version + '/'
+ + artifactId + '-' + StringUtils.remove( version, "-" + VersionUtil.SNAPSHOT ) + '-'
+ + lastVersion + '-' + buildNumber + ".pom";
+
+ log.debug( "use snapshot path {} for maven coordinate {}:{}:{}", snapshotPath, groupId, artifactId,
+ version );
+
+ Path model = basedir.resolve( snapshotPath );
+ //model = pathTranslator.toFile( basedir, groupId, artifactId, lastVersion, filename );
+ if ( Files.exists(model) )
+ {
+ return model;
+ }
+ }
+ }
+ catch ( XMLException e )
+ {
+ log.warn( "fail to read {}, {}", mavenMetadata.toAbsolutePath(), e.getCause() );
+ }
+ }
+
+ return null;
+ }
+
+ @Override
+ public void addRepository( Repository repository )
+ throws InvalidRepositoryException
+ {
+ // we just ignore repositories outside of the current one for now
+ // TODO: it'd be nice to look them up from Archiva's set, but we want to do that by URL / mapping, not just the
+ // ID since they will rarely match
+ }
+
+ @Override
+ public void addRepository( Repository repository, boolean b ) throws InvalidRepositoryException
+ {
+
+ }
+
+ @Override
+ public ModelResolver newCopy()
+ {
+ return new RepositoryModelResolver( managedRepository, pathTranslator, wagonFactory, remoteRepositories,
+ networkProxyMap, targetRepository, mavenSystemManager);
+ }
+
+ // FIXME: we need to do some refactoring, we cannot re-use the proxy components of archiva-proxy in maven2-repository
+ // because it's causing a cyclic dependency
+ private boolean getModelFromProxy( RemoteRepository remoteRepository, String groupId, String artifactId,
+ String version, String filename )
+ throws AuthorizationException, TransferFailedException, ResourceDoesNotExistException, WagonFactoryException,
+ XMLException, IOException
+ {
+ boolean success = false;
+ Path tmpMd5 = null;
+ Path tmpSha1 = null;
+ Path tmpResource = null;
+ String artifactPath = pathTranslator.toPath( groupId, artifactId, version, filename );
+ Path resource = targetRepository.getLocalPath().resolve( artifactPath );
+
+ Path workingDirectory = createWorkingDirectory( targetRepository.getLocation().toString() );
+ try
+ {
+ Wagon wagon = null;
+ try
+ {
+ String protocol = getProtocol( remoteRepository.getLocation().toString() );
+ final NetworkProxy networkProxy = this.networkProxyMap.get( remoteRepository.getId() );
+
+ wagon = wagonFactory.getWagon(
+ new WagonFactoryRequest( "wagon#" + protocol, remoteRepository.getExtraHeaders() ).networkProxy(
+ networkProxy )
+ );
+
+ if ( wagon == null )
+ {
+ throw new RuntimeException( "Unsupported remote repository protocol: " + protocol );
+ }
+
+ boolean connected = connectToRepository( wagon, remoteRepository );
+ if ( connected )
+ {
+ tmpResource = workingDirectory.resolve( filename );
+
+ if ( VersionUtil.isSnapshot( version ) )
+ {
+ // get the metadata first!
+ Path tmpMetadataResource = workingDirectory.resolve( METADATA_FILENAME );
+
+ String metadataPath =
+ StringUtils.substringBeforeLast( artifactPath, "/" ) + "/" + METADATA_FILENAME;
+
+ wagon.get( addParameters( metadataPath, remoteRepository ), tmpMetadataResource.toFile() );
+
+ log.debug( "Successfully downloaded metadata." );
+
+ ArchivaRepositoryMetadata metadata = MavenMetadataReader.read( tmpMetadataResource );
+
+ // re-adjust to timestamp if present, otherwise retain the original -SNAPSHOT filename
+ SnapshotVersion snapshotVersion = metadata.getSnapshotVersion();
+ String timestampVersion = version;
+ if ( snapshotVersion != null )
+ {
+ timestampVersion = timestampVersion.substring( 0, timestampVersion.length()
+ - 8 ); // remove SNAPSHOT from end
+ timestampVersion = timestampVersion + snapshotVersion.getTimestamp() + "-"
+ + snapshotVersion.getBuildNumber();
+
+ filename = artifactId + "-" + timestampVersion + ".pom";
+
+ artifactPath = pathTranslator.toPath( groupId, artifactId, version, filename );
+
+ log.debug( "New artifactPath :{}", artifactPath );
+ }
+ }
+
+ log.info( "Retrieving {} from {}", artifactPath, remoteRepository.getName() );
+
+ wagon.get( addParameters( artifactPath, remoteRepository ), tmpResource.toFile() );
+
+ log.debug( "Downloaded successfully." );
+
+ tmpSha1 = transferChecksum( wagon, remoteRepository, artifactPath, tmpResource, workingDirectory,
+ ".sha1" );
+ tmpMd5 = transferChecksum( wagon, remoteRepository, artifactPath, tmpResource, workingDirectory,
+ ".md5" );
+ }
+ }
+ finally
+ {
+ if ( wagon != null )
+ {
+ try
+ {
+ wagon.disconnect();
+ }
+ catch ( ConnectionException e )
+ {
+ log.warn( "Unable to disconnect wagon.", e );
+ }
+ }
+ }
+
+ if ( resource != null )
+ {
+ synchronized ( resource.toAbsolutePath().toString().intern() )
+ {
+ Path directory = resource.getParent();
+ moveFileIfExists( tmpMd5, directory );
+ moveFileIfExists( tmpSha1, directory );
+ moveFileIfExists( tmpResource, directory );
+ success = true;
+ }
+ }
+ }
+ finally
+ {
+ org.apache.archiva.common.utils.FileUtils.deleteQuietly( workingDirectory );
+ }
+
+ // do we still need to execute the consumers?
+
+ return success;
+ }
+
+ /**
+ * Using wagon, connect to the remote repository.
+ *
+ * @param wagon the wagon instance to establish the connection on.
+ * @return true if the connection was successful. false if not connected.
+ */
+ private boolean connectToRepository( Wagon wagon, RemoteRepository remoteRepository )
+ {
+ boolean connected;
+
+ final NetworkProxy proxyConnector = this.networkProxyMap.get( remoteRepository.getId() );
+ ProxyInfo networkProxy = null;
+ if ( proxyConnector != null )
+ {
+ networkProxy = new ProxyInfo();
+ networkProxy.setType( proxyConnector.getProtocol() );
+ networkProxy.setHost( proxyConnector.getHost() );
+ networkProxy.setPort( proxyConnector.getPort() );
+ networkProxy.setUserName( proxyConnector.getUsername() );
+ networkProxy.setPassword( proxyConnector.getPassword() );
+
+ String msg = "Using network proxy " + networkProxy.getHost() + ":" + networkProxy.getPort()
+ + " to connect to remote repository " + remoteRepository.getLocation();
+ if ( networkProxy.getNonProxyHosts() != null )
+ {
+ msg += "; excluding hosts: " + networkProxy.getNonProxyHosts();
+ }
+
+ if ( StringUtils.isNotBlank( networkProxy.getUserName() ) )
+ {
+ msg += "; as user: " + networkProxy.getUserName();
+ }
+
+ log.debug( msg );
+ }
+
+ AuthenticationInfo authInfo = null;
+ RepositoryCredentials creds = remoteRepository.getLoginCredentials();
+ String username = "";
+ String password = "";
+ if (creds instanceof UsernamePasswordCredentials) {
+ UsernamePasswordCredentials c = (UsernamePasswordCredentials) creds;
+ username = c.getUserName();
+ password = c.getPassword();
+ }
+
+ if ( StringUtils.isNotBlank( username ) && StringUtils.isNotBlank( password ) )
+ {
+ log.debug( "Using username {} to connect to remote repository {}", username, remoteRepository.getLocation() );
+ authInfo = new AuthenticationInfo();
+ authInfo.setUserName( username );
+ authInfo.setPassword( password );
+ }
+
+ int timeoutInMilliseconds = ((int)remoteRepository.getTimeout().getSeconds())*1000;
+ // FIXME olamy having 2 config values
+ // Set timeout
+ wagon.setReadTimeout( timeoutInMilliseconds );
+ wagon.setTimeout( timeoutInMilliseconds );
+
+ try
+ {
+ org.apache.maven.wagon.repository.Repository wagonRepository =
+ new org.apache.maven.wagon.repository.Repository( remoteRepository.getId(), remoteRepository.getLocation().toString() );
+ if ( networkProxy != null )
+ {
+ wagon.connect( wagonRepository, authInfo, networkProxy );
+ }
+ else
+ {
+ wagon.connect( wagonRepository, authInfo );
+ }
+ connected = true;
+ }
+ catch ( ConnectionException | AuthenticationException e )
+ {
+ log.error( "Could not connect to {}:{} ", remoteRepository.getName(), e.getMessage() );
+ connected = false;
+ }
+
+ return connected;
+ }
+
+ /**
+ *
+ * @param wagon The wagon instance that should be connected.
+ * @param remoteRepository The repository from where the checksum file should be retrieved
+ * @param remotePath The remote path of the artifact (without extension)
+ * @param resource The local artifact (without extension)
+ * @param workingDir The working directory where the downloaded file should be placed to
+ * @param ext The extension of th checksum file
+ * @return The file where the data has been downloaded to.
+ * @throws AuthorizationException
+ * @throws TransferFailedException
+ * @throws ResourceDoesNotExistException
+ */
+ private Path transferChecksum( final Wagon wagon, final RemoteRepository remoteRepository,
+ final String remotePath, final Path resource,
+ final Path workingDir, final String ext )
+ throws AuthorizationException, TransferFailedException, ResourceDoesNotExistException
+ {
+ Path destFile = workingDir.resolve( resource.getFileName() + ext );
+ String remoteChecksumPath = remotePath + ext;
+
+ log.info( "Retrieving {} from {}", remoteChecksumPath, remoteRepository.getName() );
+
+ wagon.get( addParameters( remoteChecksumPath, remoteRepository ), destFile.toFile() );
+
+ log.debug( "Downloaded successfully." );
+
+ return destFile;
+ }
+
+ private String getProtocol( String url )
+ {
+ String protocol = StringUtils.substringBefore( url, ":" );
+
+ return protocol;
+ }
+
+ private Path createWorkingDirectory( String targetRepository )
+ throws IOException
+ {
+ return Files.createTempDirectory( "temp" );
+ }
+
+ private void moveFileIfExists( Path fileToMove, Path directory )
+ {
+ if ( fileToMove != null && Files.exists(fileToMove) )
+ {
+ Path newLocation = directory.resolve( fileToMove.getFileName() );
+ try {
+ Files.deleteIfExists(newLocation);
+ } catch (IOException e) {
+ throw new RuntimeException(
+ "Unable to overwrite existing target file: " + newLocation.toAbsolutePath(), e );
+ }
+
+ try {
+ Files.createDirectories(newLocation.getParent());
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ try {
+ Files.move(fileToMove, newLocation );
+ } catch (IOException e) {
+ try {
+ Files.copy(fileToMove, newLocation);
+ } catch (IOException e1) {
+ if (Files.exists(newLocation)) {
+ log.error( "Tried to copy file {} to {} but file with this name already exists.",
+ fileToMove.getFileName(), newLocation.toAbsolutePath() );
+ } else {
+ throw new RuntimeException(
+ "Cannot copy tmp file " + fileToMove.toAbsolutePath() + " to its final location", e );
+ }
+ }
+ } finally {
+ org.apache.archiva.common.utils.FileUtils.deleteQuietly(fileToMove);
+ }
+ }
+ }
+
+ protected String addParameters( String path, RemoteRepository remoteRepository )
+ {
+ if ( remoteRepository.getExtraParameters().isEmpty() )
+ {
+ return path;
+ }
+
+ boolean question = false;
+
+ StringBuilder res = new StringBuilder( path == null ? "" : path );
+
+ for ( Map.Entry<String, String> entry : remoteRepository.getExtraParameters().entrySet() )
+ {
+ if ( !question )
+ {
+ res.append( '?' ).append( entry.getKey() ).append( '=' ).append( entry.getValue() );
+ }
+ }
+
+ return res.toString();
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/AbstractDefaultRepositoryContent.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/AbstractDefaultRepositoryContent.java
new file mode 100644
index 000000000..f3cdb190f
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/AbstractDefaultRepositoryContent.java
@@ -0,0 +1,187 @@
+package org.apache.archiva.repository.content.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.common.utils.VersionUtil;
+import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator;
+import org.apache.archiva.metadata.repository.storage.maven2.ArtifactMappingProvider;
+import org.apache.archiva.metadata.repository.storage.maven2.Maven2RepositoryPathTranslator;
+import org.apache.archiva.model.ArchivaArtifact;
+import org.apache.archiva.model.ArtifactReference;
+import org.apache.archiva.model.ProjectReference;
+import org.apache.archiva.model.VersionedReference;
+import org.apache.archiva.repository.LayoutException;
+import org.apache.archiva.repository.RepositoryContent;
+import org.apache.archiva.repository.content.PathParser;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.List;
+
+/**
+ * AbstractDefaultRepositoryContent - common methods for working with default (maven 2) layout.
+ */
+public abstract class AbstractDefaultRepositoryContent implements RepositoryContent
+{
+
+
+ protected Logger log = LoggerFactory.getLogger( getClass() );
+
+ public static final String MAVEN_METADATA = "maven-metadata.xml";
+
+ protected static final char PATH_SEPARATOR = '/';
+
+ protected static final char GROUP_SEPARATOR = '.';
+
+ protected static final char ARTIFACT_SEPARATOR = '-';
+
+ private RepositoryPathTranslator pathTranslator = new Maven2RepositoryPathTranslator();
+
+ private PathParser defaultPathParser = new DefaultPathParser();
+
+
+
+ /**
+ *
+ */
+ protected List<? extends ArtifactMappingProvider> artifactMappingProviders;
+
+ AbstractDefaultRepositoryContent(List<? extends ArtifactMappingProvider> artifactMappingProviders) {
+ this.artifactMappingProviders = artifactMappingProviders;
+ }
+
+ public void setArtifactMappingProviders(List<? extends ArtifactMappingProvider> artifactMappingProviders) {
+ this.artifactMappingProviders = artifactMappingProviders;
+ }
+
+ public ArtifactReference toArtifactReference( String path )
+ throws LayoutException
+ {
+ return defaultPathParser.toArtifactReference( path );
+ }
+
+ public String toMetadataPath( ProjectReference reference )
+ {
+ StringBuilder path = new StringBuilder();
+
+ path.append( formatAsDirectory( reference.getGroupId() ) ).append( PATH_SEPARATOR );
+ path.append( reference.getArtifactId() ).append( PATH_SEPARATOR );
+ path.append( MAVEN_METADATA );
+
+ return path.toString();
+ }
+
+ public String toMetadataPath( VersionedReference reference )
+ {
+ StringBuilder path = new StringBuilder();
+
+ path.append( formatAsDirectory( reference.getGroupId() ) ).append( PATH_SEPARATOR );
+ path.append( reference.getArtifactId() ).append( PATH_SEPARATOR );
+ if ( reference.getVersion() != null )
+ {
+ // add the version only if it is present
+ path.append( VersionUtil.getBaseVersion( reference.getVersion() ) ).append( PATH_SEPARATOR );
+ }
+ path.append( MAVEN_METADATA );
+
+ return path.toString();
+ }
+
+ public String toPath( ArchivaArtifact reference )
+ {
+ if ( reference == null )
+ {
+ throw new IllegalArgumentException( "ArchivaArtifact cannot be null" );
+ }
+
+ String baseVersion = VersionUtil.getBaseVersion( reference.getVersion() );
+ return toPath( reference.getGroupId(), reference.getArtifactId(), baseVersion, reference.getVersion(),
+ reference.getClassifier(), reference.getType() );
+ }
+
+ public String toPath( ArtifactReference reference )
+ {
+ if ( reference == null )
+ {
+ throw new IllegalArgumentException( "Artifact reference cannot be null" );
+ }
+ if ( reference.getVersion() != null )
+ {
+ String baseVersion = VersionUtil.getBaseVersion( reference.getVersion() );
+ return toPath( reference.getGroupId(), reference.getArtifactId(), baseVersion, reference.getVersion(),
+ reference.getClassifier(), reference.getType() );
+ }
+ return toPath( reference.getGroupId(), reference.getArtifactId(), null, null,
+ reference.getClassifier(), reference.getType() );
+ }
+
+ private String formatAsDirectory( String directory )
+ {
+ return directory.replace( GROUP_SEPARATOR, PATH_SEPARATOR );
+ }
+
+ private String toPath( String groupId, String artifactId, String baseVersion, String version, String classifier,
+ String type )
+ {
+ if ( baseVersion != null )
+ {
+ return pathTranslator.toPath( groupId, artifactId, baseVersion,
+ constructId( artifactId, version, classifier, type ) );
+ }
+ else
+ {
+ return pathTranslator.toPath( groupId, artifactId );
+ }
+ }
+
+ // TODO: move into the Maven Artifact facet when refactoring away the caller - the caller will need to have access
+ // to the facet or filename (for the original ID)
+ private String constructId( String artifactId, String version, String classifier, String type )
+ {
+ String ext = null;
+ for ( ArtifactMappingProvider provider : artifactMappingProviders )
+ {
+ ext = provider.mapTypeToExtension( type );
+ if ( ext != null )
+ {
+ break;
+ }
+ }
+ if ( ext == null )
+ {
+ ext = type;
+ }
+
+ StringBuilder id = new StringBuilder();
+ if ( ( version != null ) && ( type != null ) )
+ {
+ id.append( artifactId ).append( ARTIFACT_SEPARATOR ).append( version );
+
+ if ( StringUtils.isNotBlank( classifier ) )
+ {
+ id.append( ARTIFACT_SEPARATOR ).append( classifier );
+ }
+
+ id.append( "." ).append( ext );
+ }
+ return id.toString();
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/ArtifactExtensionMapping.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/ArtifactExtensionMapping.java
new file mode 100644
index 000000000..d863a33a2
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/ArtifactExtensionMapping.java
@@ -0,0 +1,78 @@
+package org.apache.archiva.repository.content.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.metadata.repository.storage.maven2.ArtifactMappingProvider;
+import org.apache.archiva.metadata.repository.storage.maven2.DefaultArtifactMappingProvider;
+
+/**
+ * ArtifactExtensionMapping
+ *
+ *
+ */
+public class ArtifactExtensionMapping
+{
+ public static final String MAVEN_ONE_PLUGIN = "maven-one-plugin";
+
+ // TODO: now only used in Maven 1, we should be using M1 specific mappings
+ private static final ArtifactMappingProvider mapping = new DefaultArtifactMappingProvider();
+
+ public static String getExtension( String type )
+ {
+ String ext = mapping.mapTypeToExtension( type );
+
+ if ( ext == null )
+ {
+ ext = type;
+ }
+
+ return ext;
+ }
+
+ public static String mapExtensionAndClassifierToType( String classifier, String extension )
+ {
+ return mapExtensionAndClassifierToType( classifier, extension, extension );
+ }
+
+ public static String mapExtensionAndClassifierToType( String classifier, String extension,
+ String defaultExtension )
+ {
+ String value = mapping.mapClassifierAndExtensionToType( classifier, extension );
+ if ( value == null )
+ {
+ // TODO: Maven 1 plugin
+ String value1 = null;
+ if ( "tar.gz".equals( extension ) )
+ {
+ value1 = "distribution-tgz";
+ }
+ else if ( "tar.bz2".equals( extension ) )
+ {
+ value1 = "distribution-bzip";
+ }
+ else if ( "zip".equals( extension ) )
+ {
+ value1 = "distribution-zip";
+ }
+ value = value1;
+ }
+ return value != null ? value : defaultExtension;
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/DefaultPathParser.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/DefaultPathParser.java
new file mode 100644
index 000000000..0a8d644f4
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/DefaultPathParser.java
@@ -0,0 +1,91 @@
+package org.apache.archiva.repository.content.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.metadata.model.ArtifactMetadata;
+import org.apache.archiva.metadata.model.maven2.MavenArtifactFacet;
+import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator;
+import org.apache.archiva.metadata.repository.storage.maven2.ArtifactMappingProvider;
+import org.apache.archiva.metadata.repository.storage.maven2.DefaultArtifactMappingProvider;
+import org.apache.archiva.metadata.repository.storage.maven2.Maven2RepositoryPathTranslator;
+import org.apache.archiva.model.ArtifactReference;
+import org.apache.archiva.repository.LayoutException;
+import org.apache.archiva.repository.content.PathParser;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+
+/**
+ * DefaultPathParser is a parser for maven 2 (default layout) paths to ArtifactReference.
+ *
+ * TODO: remove in favour of path translator, this is just delegating for the most part, but won't accommodate other
+ * extensions like NPanday
+ *
+ *
+ */
+@Service( "pathParser#default" )
+public class DefaultPathParser
+ implements PathParser
+{
+ private static final String INVALID_ARTIFACT_PATH = "Invalid path to Artifact: ";
+
+ private RepositoryPathTranslator pathTranslator = new Maven2RepositoryPathTranslator(
+ Collections.<ArtifactMappingProvider>singletonList( new DefaultArtifactMappingProvider() ) );
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.archiva.repository.content.PathParser#toArtifactReference(String)
+ */
+ @Override
+ public ArtifactReference toArtifactReference( String path )
+ throws LayoutException
+ {
+ if ( StringUtils.isBlank( path ) )
+ {
+ throw new LayoutException( "Unable to convert blank path." );
+ }
+
+ ArtifactMetadata metadata;
+ try
+ {
+ metadata = pathTranslator.getArtifactForPath( null, path );
+ }
+ catch ( IllegalArgumentException e )
+ {
+ throw new LayoutException( e.getMessage(), e );
+ }
+
+ ArtifactReference artifact = new ArtifactReference();
+ artifact.setGroupId( metadata.getNamespace() );
+ artifact.setArtifactId( metadata.getProject() );
+ artifact.setVersion( metadata.getVersion() );
+ MavenArtifactFacet facet = (MavenArtifactFacet) metadata.getFacet( MavenArtifactFacet.FACET_ID );
+ if ( facet != null )
+ {
+ artifact.setClassifier( facet.getClassifier() );
+ artifact.setType( facet.getType() );
+ }
+
+ return artifact;
+ }
+
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/FilenameParser.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/FilenameParser.java
new file mode 100644
index 000000000..e40887765
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/FilenameParser.java
@@ -0,0 +1,259 @@
+package org.apache.archiva.repository.content.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.common.utils.VersionUtil;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Generic Filename Parser for use with layout routines.
+ *
+ *
+ */
+public class FilenameParser
+{
+ private String name;
+
+ private String extension;
+
+ private int offset;
+
+ private static final Pattern mavenPluginPattern = Pattern.compile( "(maven-.*-plugin)|(.*-maven-plugin)" );
+
+ private static final Pattern extensionPattern =
+ Pattern.compile( "(\\.tar\\.gz$)|(\\.tar\\.bz2$)|(\\.[\\-a-z0-9]*$)", Pattern.CASE_INSENSITIVE );
+
+ private static final Pattern SNAPSHOT_PATTERN = Pattern.compile( "^([0-9]{8}\\.[0-9]{6}-[0-9]+)(.*)$" );
+
+ private static final Pattern section = Pattern.compile( "([^-]*)" );
+
+ private Matcher matcher;
+
+ public FilenameParser( String filename )
+ {
+ this.name = filename;
+
+ Matcher mat = extensionPattern.matcher( name );
+ if ( mat.find() )
+ {
+ extension = filename.substring( mat.start() + 1 );
+ name = name.substring( 0, name.length() - extension.length() - 1 );
+ }
+
+ matcher = section.matcher( name );
+
+ reset();
+ }
+
+ public void reset()
+ {
+ offset = 0;
+ }
+
+ public String next()
+ {
+ // Past the end of the string.
+ if ( offset > name.length() )
+ {
+ return null;
+ }
+
+ // Return the next section.
+ if ( matcher.find( offset ) )
+ {
+ // Return found section.
+ offset = matcher.end() + 1;
+ return matcher.group();
+ }
+
+ // Nothing to return.
+ return null;
+ }
+
+ protected String expect( String expected )
+ {
+ String value = null;
+
+ if ( name.startsWith( expected, offset ) )
+ {
+ value = expected;
+ }
+ else if ( VersionUtil.isGenericSnapshot( expected ) )
+ {
+ String version = name.substring( offset );
+
+ // check it starts with the same version up to the snapshot part
+ int leadingLength = expected.length() - 9;
+ if ( leadingLength > 0 && version.startsWith( expected.substring( 0, leadingLength ) ) &&
+ version.length() > leadingLength )
+ {
+ // If we expect a non-generic snapshot - look for the timestamp
+ Matcher m = SNAPSHOT_PATTERN.matcher( version.substring( leadingLength + 1 ) );
+ if ( m.matches() )
+ {
+ value = version.substring( 0, leadingLength + 1 ) + m.group( 1 );
+ }
+ }
+ }
+
+ if ( value != null )
+ {
+ // Potential hit. check for '.' or '-' at end of expected.
+ int seperatorOffset = offset + value.length();
+
+ // Test for "out of bounds" first.
+ if ( seperatorOffset >= name.length() )
+ {
+ offset = name.length();
+ return value;
+ }
+
+ // Test for seperator char.
+ char seperatorChar = name.charAt( seperatorOffset );
+ if ( ( seperatorChar == '-' ) || ( seperatorChar == '.' ) )
+ {
+ offset = seperatorOffset + 1;
+ return value;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Get the current seperator character.
+ *
+ * @return the seperator character (either '.' or '-'), or 0 if no seperator character available.
+ */
+ protected char seperator()
+ {
+ // Past the end of the string?
+ if ( offset >= name.length() )
+ {
+ return 0;
+ }
+
+ // Before the start of the string?
+ if ( offset <= 0 )
+ {
+ return 0;
+ }
+
+ return name.charAt( offset - 1 );
+ }
+
+ protected String getName()
+ {
+ return name;
+ }
+
+ public String getExtension()
+ {
+ return extension;
+ }
+
+ public String remaining()
+ {
+ if ( offset >= name.length() )
+ {
+ return null;
+ }
+
+ String end = name.substring( offset );
+ offset = name.length();
+ return end;
+ }
+
+ public String nextNonVersion()
+ {
+ boolean done = false;
+
+ StringBuilder ver = new StringBuilder();
+
+ // Any text upto the end of a special case is considered non-version.
+ Matcher specialMat = mavenPluginPattern.matcher( name );
+ if ( specialMat.find() )
+ {
+ ver.append( name.substring( offset, specialMat.end() ) );
+ offset = specialMat.end() + 1;
+ }
+
+ while ( !done )
+ {
+ int initialOffset = offset;
+ String section = next();
+ if ( section == null )
+ {
+ done = true;
+ }
+ else if ( !VersionUtil.isVersion( section ) )
+ {
+ if ( ver.length() > 0 )
+ {
+ ver.append( '-' );
+ }
+ ver.append( section );
+ }
+ else
+ {
+ offset = initialOffset;
+ done = true;
+ }
+ }
+
+ return ver.toString();
+ }
+
+ protected String nextVersion()
+ {
+ boolean done = false;
+
+ StringBuilder ver = new StringBuilder();
+
+ while ( !done )
+ {
+ int initialOffset = offset;
+ String section = next();
+ if ( section == null )
+ {
+ done = true;
+ }
+ else if ( VersionUtil.isVersion( section ) )
+ {
+ if ( ver.length() > 0 )
+ {
+ ver.append( '-' );
+ }
+ ver.append( section );
+ }
+ else
+ {
+ offset = initialOffset;
+ done = true;
+ }
+ }
+
+ return ver.toString();
+ }
+
+
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/ManagedDefaultRepositoryContent.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/ManagedDefaultRepositoryContent.java
new file mode 100644
index 000000000..d5f55fc6e
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/ManagedDefaultRepositoryContent.java
@@ -0,0 +1,505 @@
+package org.apache.archiva.repository.content.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.common.utils.PathUtil;
+import org.apache.archiva.configuration.FileTypes;
+import org.apache.archiva.metadata.repository.storage.maven2.ArtifactMappingProvider;
+import org.apache.archiva.metadata.repository.storage.maven2.DefaultArtifactMappingProvider;
+import org.apache.archiva.model.ArchivaArtifact;
+import org.apache.archiva.model.ArtifactReference;
+import org.apache.archiva.model.ProjectReference;
+import org.apache.archiva.model.VersionedReference;
+import org.apache.archiva.repository.ContentNotFoundException;
+import org.apache.archiva.repository.LayoutException;
+import org.apache.archiva.repository.ManagedRepositoryContent;
+import org.apache.archiva.repository.RepositoryException;
+import org.apache.commons.lang.StringUtils;
+
+import java.io.IOException;
+import java.net.URI;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * ManagedDefaultRepositoryContent
+ */
+public class ManagedDefaultRepositoryContent
+ extends AbstractDefaultRepositoryContent
+ implements ManagedRepositoryContent
+{
+
+ private FileTypes filetypes;
+
+ public void setFileTypes(FileTypes fileTypes) {
+ this.filetypes = fileTypes;
+ }
+
+
+
+ private org.apache.archiva.repository.ManagedRepository repository;
+
+ public ManagedDefaultRepositoryContent(FileTypes fileTypes) {
+ super(Collections.singletonList( new DefaultArtifactMappingProvider() ));
+ setFileTypes( fileTypes );
+ }
+ public ManagedDefaultRepositoryContent( List<? extends ArtifactMappingProvider> artifactMappingProviders, FileTypes fileTypes )
+ {
+ super(artifactMappingProviders==null ? Collections.singletonList( new DefaultArtifactMappingProvider() ) : artifactMappingProviders);
+ setFileTypes( fileTypes );
+ }
+
+ @Override
+ public void deleteVersion( VersionedReference reference )
+ {
+ String path = toMetadataPath( reference );
+ Path projectPath = Paths.get( getRepoRoot(), path );
+
+ Path projectDir = projectPath.getParent();
+ if ( Files.exists(projectDir) && Files.isDirectory(projectDir) )
+ {
+ org.apache.archiva.common.utils.FileUtils.deleteQuietly( projectDir );
+ }
+ }
+
+ @Override
+ public void deleteProject( String namespace, String projectId )
+ throws RepositoryException
+ {
+ ArtifactReference artifactReference = new ArtifactReference();
+ artifactReference.setGroupId( namespace );
+ artifactReference.setArtifactId( projectId );
+ String path = toPath( artifactReference );
+ Path directory = Paths.get( getRepoRoot(), path );
+ if ( !Files.exists(directory) )
+ {
+ throw new ContentNotFoundException( "cannot found project " + namespace + ":" + projectId );
+ }
+ if ( Files.isDirectory(directory) )
+ {
+ try
+ {
+ org.apache.archiva.common.utils.FileUtils.deleteDirectory( directory );
+ }
+ catch ( IOException e )
+ {
+ throw new RepositoryException( e.getMessage(), e );
+ }
+ }
+ else
+ {
+ log.warn( "project {}:{} is not a directory", namespace, projectId );
+ }
+
+ }
+
+ @Override
+ public void deleteArtifact( ArtifactReference artifactReference )
+ {
+ String path = toPath( artifactReference );
+ Path filePath = Paths.get( getRepoRoot(), path );
+
+ if ( Files.exists(filePath) )
+ {
+ org.apache.archiva.common.utils.FileUtils.deleteQuietly( filePath );
+ }
+
+ Path filePathmd5 = Paths.get( getRepoRoot(), path + ".md5" );
+
+ if ( Files.exists(filePathmd5) )
+ {
+ org.apache.archiva.common.utils.FileUtils.deleteQuietly( filePathmd5 );
+ }
+
+ Path filePathsha1 = Paths.get( getRepoRoot(), path + ".sha1" );
+
+ if ( Files.exists(filePathsha1) )
+ {
+ org.apache.archiva.common.utils.FileUtils.deleteQuietly( filePathsha1 );
+ }
+ }
+
+ @Override
+ public void deleteGroupId( String groupId )
+ throws ContentNotFoundException
+ {
+
+ String path = StringUtils.replaceChars( groupId, '.', '/' );
+
+ Path directory = Paths.get( getRepoRoot(), path );
+
+ if ( Files.exists(directory) )
+ {
+ try
+ {
+ org.apache.archiva.common.utils.FileUtils.deleteDirectory( directory );
+ }
+ catch ( IOException e )
+ {
+ log.warn( "skip error deleting directory {}:", directory, e );
+ }
+ }
+ }
+
+ @Override
+ public String getId()
+ {
+ return repository.getId();
+ }
+
+ @Override
+ public Set<ArtifactReference> getRelatedArtifacts( ArtifactReference reference )
+ throws ContentNotFoundException
+ {
+ Path artifactFile = toFile( reference );
+ Path repoBase = PathUtil.getPathFromUri(repository.getLocation()).toAbsolutePath();
+ Path repoDir = artifactFile.getParent().toAbsolutePath();
+
+ if ( !Files.exists(repoDir))
+ {
+ throw new ContentNotFoundException(
+ "Unable to get related artifacts using a non-existant directory: " + repoDir.toAbsolutePath() );
+ }
+
+ if ( !Files.isDirectory( repoDir ) )
+ {
+ throw new ContentNotFoundException(
+ "Unable to get related artifacts using a non-directory: " + repoDir.toAbsolutePath() );
+ }
+
+ Set<ArtifactReference> foundArtifacts;
+
+ // First gather up the versions found as artifacts in the managed repository.
+
+ try (Stream<Path> stream = Files.list(repoDir)) {
+ foundArtifacts = stream.filter(Files::isRegularFile).map(path -> {
+ try {
+ ArtifactReference artifact = toArtifactReference(repoBase.relativize(path).toString());
+ if( artifact.getGroupId().equals( reference.getGroupId() ) && artifact.getArtifactId().equals(
+ reference.getArtifactId() ) && artifact.getVersion().equals( reference.getVersion() )) {
+ return artifact;
+ } else {
+ return null;
+ }
+ } catch (LayoutException e) {
+ log.debug( "Not processing file that is not an artifact: {}", e.getMessage() );
+ return null;
+ }
+ }).filter(Objects::nonNull).collect(Collectors.toSet());
+ } catch (IOException e) {
+ log.error("Could not read directory {}: {}", repoDir, e.getMessage(), e);
+ return Collections.emptySet();
+ }
+ return foundArtifacts;
+ }
+
+ @Override
+ public String getRepoRoot()
+ {
+ return convertUriToPath( repository.getLocation() );
+ }
+
+ private String convertUriToPath( URI uri ) {
+ if (uri.getScheme()==null) {
+ return Paths.get(uri.getPath()).toString();
+ } else if ("file".equals(uri.getScheme())) {
+ return Paths.get(uri).toString();
+ } else {
+ return uri.toString();
+ }
+ }
+
+ @Override
+ public org.apache.archiva.repository.ManagedRepository getRepository()
+ {
+ return repository;
+ }
+
+ /**
+ * Gather the Available Versions (on disk) for a specific Project Reference, based on filesystem
+ * information.
+ *
+ * @return the Set of available versions, based on the project reference.
+ * @throws LayoutException
+ * @throws LayoutException
+ */
+ @Override
+ public Set<String> getVersions( ProjectReference reference )
+ throws ContentNotFoundException, LayoutException
+ {
+ String path = toMetadataPath( reference );
+
+ int idx = path.lastIndexOf( '/' );
+ if ( idx > 0 )
+ {
+ path = path.substring( 0, idx );
+ }
+
+ Path repoDir = PathUtil.getPathFromUri( repository.getLocation() ).resolve( path );
+
+ if ( !Files.exists(repoDir) )
+ {
+ throw new ContentNotFoundException(
+ "Unable to get Versions on a non-existant directory: " + repoDir.toAbsolutePath() );
+ }
+
+ if ( !Files.isDirectory(repoDir) )
+ {
+ throw new ContentNotFoundException(
+ "Unable to get Versions on a non-directory: " + repoDir.toAbsolutePath() );
+ }
+
+ final String groupId = reference.getGroupId();
+ final String artifactId = reference.getArtifactId();
+ try(Stream<Path> stream = Files.list(repoDir)) {
+ return stream.filter(Files::isDirectory).map(
+ p -> newVersionedRef(groupId, artifactId, p.getFileName().toString())
+ ).filter(this::hasArtifact).map(ref -> ref.getVersion())
+ .collect(Collectors.toSet());
+ } catch (IOException e) {
+ log.error("Could not read directory {}: {}", repoDir, e.getMessage(), e);
+ } catch (RuntimeException e) {
+ if (e.getCause()!=null && e.getCause() instanceof LayoutException) {
+ throw (LayoutException)e.getCause();
+ } else {
+ throw e;
+ }
+ }
+ return Collections.emptySet();
+ }
+
+ static final VersionedReference newVersionedRef(final String groupId, final String artifactId, final String version) {
+ VersionedReference ref = new VersionedReference();
+ ref.setGroupId(groupId);
+ ref.setArtifactId(artifactId);
+ ref.setVersion(version);
+ return ref;
+ }
+
+ @Override
+ public Set<String> getVersions( VersionedReference reference )
+ throws ContentNotFoundException
+ {
+ String path = toMetadataPath( reference );
+
+ int idx = path.lastIndexOf( '/' );
+ if ( idx > 0 )
+ {
+ path = path.substring( 0, idx );
+ }
+
+ Path repoBase = PathUtil.getPathFromUri(repository.getLocation());
+ Path repoDir = repoBase.resolve( path );
+
+ if ( !Files.exists(repoDir) )
+ {
+ throw new ContentNotFoundException(
+ "Unable to get versions on a non-existant directory: " + repoDir.toAbsolutePath() );
+ }
+
+ if ( !Files.isDirectory(repoDir) )
+ {
+ throw new ContentNotFoundException(
+ "Unable to get versions on a non-directory: " + repoDir.toAbsolutePath() );
+ }
+
+ Set<String> foundVersions = new HashSet<>();
+
+ try(Stream<Path> stream = Files.list(repoDir)) {
+ return stream.filter(Files::isRegularFile)
+ .map(p -> repoBase.relativize(p).toString())
+ .filter(p -> !filetypes.matchesDefaultExclusions(p))
+ .filter(filetypes::matchesArtifactPattern)
+ .map(path1 -> {
+ try {
+ return toArtifactReference(path1);
+ } catch (LayoutException e) {
+ log.debug( "Not processing file that is not an artifact: {}", e.getMessage() );
+ return null;
+ }
+ }).filter(Objects::nonNull)
+ .map(ar -> ar.getVersion())
+ .collect(Collectors.toSet());
+ } catch (IOException e) {
+ log.error("Could not read directory {}: {}", repoDir, e.getMessage(), e);
+ }
+ return Collections.emptySet();
+ }
+
+ @Override
+ public boolean hasContent( ArtifactReference reference )
+ {
+ Path artifactFile = toFile( reference );
+ return Files.exists(artifactFile) && Files.isRegularFile( artifactFile );
+ }
+
+ @Override
+ public boolean hasContent( ProjectReference reference )
+ {
+ try
+ {
+ Set<String> versions = getVersions( reference );
+ return !versions.isEmpty();
+ }
+ catch ( ContentNotFoundException | LayoutException e )
+ {
+ return false;
+ }
+ }
+
+ @Override
+ public boolean hasContent( VersionedReference reference )
+ {
+ try
+ {
+ return ( getFirstArtifact( reference ) != null );
+ }
+ catch ( IOException | LayoutException e )
+ {
+ return false;
+ }
+ }
+
+ @Override
+ public void setRepository( org.apache.archiva.repository.ManagedRepository repository )
+ {
+ this.repository = repository;
+ }
+
+ /**
+ * Convert a path to an artifact reference.
+ *
+ * @param path the path to convert. (relative or full location path)
+ * @throws LayoutException if the path cannot be converted to an artifact reference.
+ */
+ @Override
+ public ArtifactReference toArtifactReference( String path )
+ throws LayoutException
+ {
+ String repoPath = convertUriToPath( repository.getLocation() );
+ if ( ( path != null ) && path.startsWith( repoPath ) && repoPath.length() > 0 )
+ {
+ return super.toArtifactReference( path.substring( repoPath.length() + 1 ) );
+ }
+
+ return super.toArtifactReference( path );
+ }
+
+ // The variant with runtime exception for stream usage
+ private ArtifactReference toArtifactRef(String path) {
+ try {
+ return toArtifactReference(path);
+ } catch (LayoutException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+
+
+ @Override
+ public Path toFile( ArtifactReference reference )
+ {
+ return PathUtil.getPathFromUri( repository.getLocation()).resolve( toPath( reference ) );
+ }
+
+ @Override
+ public Path toFile( ArchivaArtifact reference )
+ {
+ return PathUtil.getPathFromUri( repository.getLocation()).resolve( toPath( reference ) );
+ }
+
+ /**
+ * Get the first Artifact found in the provided VersionedReference location.
+ *
+ * @param reference the reference to the versioned reference to search within
+ * @return the ArtifactReference to the first artifact located within the versioned reference. or null if
+ * no artifact was found within the versioned reference.
+ * @throws java.io.IOException if the versioned reference is invalid (example: doesn't exist, or isn't a directory)
+ * @throws LayoutException
+ */
+ private ArtifactReference getFirstArtifact( VersionedReference reference )
+ throws LayoutException, IOException
+ {
+ String path = toMetadataPath( reference );
+
+ int idx = path.lastIndexOf( '/' );
+ if ( idx > 0 )
+ {
+ path = path.substring( 0, idx );
+ }
+
+ Path repoBase = PathUtil.getPathFromUri(repository.getLocation()).toAbsolutePath();
+ Path repoDir = repoBase.resolve( path );
+
+ if ( !Files.exists(repoDir) )
+ {
+ throw new IOException( "Unable to gather the list of snapshot versions on a non-existant directory: "
+ + repoDir.toAbsolutePath() );
+ }
+
+ if ( !Files.isDirectory(repoDir) )
+ {
+ throw new IOException(
+ "Unable to gather the list of snapshot versions on a non-directory: " + repoDir.toAbsolutePath() );
+ }
+ try(Stream<Path> stream = Files.list(repoDir)) {
+ return stream.filter(Files::isRegularFile)
+ .map(p -> repoBase.relativize(p).toString())
+ .filter(filetypes::matchesArtifactPattern)
+ .map(this::toArtifactRef).findFirst().orElse(null);
+ } catch (RuntimeException e) {
+ if (e.getCause()!=null && e.getCause() instanceof LayoutException) {
+ throw (LayoutException)e.getCause();
+ } else {
+ throw e;
+ }
+ }
+
+ }
+
+ private boolean hasArtifact( VersionedReference reference )
+
+ {
+ try
+ {
+ return ( getFirstArtifact( reference ) != null );
+ }
+ catch ( IOException e )
+ {
+ return false;
+ } catch (LayoutException e) {
+ // We throw the runtime exception for better stream handling
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void setFiletypes( FileTypes filetypes )
+ {
+ this.filetypes = filetypes;
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/MavenContentProvider.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/MavenContentProvider.java
new file mode 100644
index 000000000..27e0592d7
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/MavenContentProvider.java
@@ -0,0 +1,124 @@
+package org.apache.archiva.repository.content.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.configuration.FileTypes;
+import org.apache.archiva.metadata.repository.storage.maven2.ArtifactMappingProvider;
+import org.apache.archiva.repository.ManagedRepository;
+import org.apache.archiva.repository.ManagedRepositoryContent;
+import org.apache.archiva.repository.RemoteRepository;
+import org.apache.archiva.repository.RemoteRepositoryContent;
+import org.apache.archiva.repository.Repository;
+import org.apache.archiva.repository.RepositoryContent;
+import org.apache.archiva.repository.RepositoryContentProvider;
+import org.apache.archiva.repository.RepositoryException;
+import org.apache.archiva.repository.RepositoryType;
+import org.springframework.stereotype.Service;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Maven implementation of the repository content provider. Only default layout and
+ * maven repository types are supported.
+ */
+@Service("repositoryContentProvider#maven")
+public class MavenContentProvider implements RepositoryContentProvider
+{
+
+ @Inject
+ @Named( "fileTypes" )
+ private FileTypes filetypes;
+
+ @Inject
+ protected List<? extends ArtifactMappingProvider> artifactMappingProviders;
+
+
+ private static final Set<RepositoryType> REPOSITORY_TYPES = new HashSet<>( );
+ static {
+ REPOSITORY_TYPES.add(RepositoryType.MAVEN);
+ }
+
+ @Override
+ public boolean supportsLayout( String layout )
+ {
+ return "default".equals( layout );
+ }
+
+ @Override
+ public Set<RepositoryType> getSupportedRepositoryTypes( )
+ {
+ return REPOSITORY_TYPES;
+ }
+
+ @Override
+ public boolean supports( RepositoryType type )
+ {
+ return type.equals( RepositoryType.MAVEN );
+ }
+
+ @Override
+ public RemoteRepositoryContent createRemoteContent( RemoteRepository repository ) throws RepositoryException
+ {
+ if (!supports( repository.getType() )) {
+ throw new RepositoryException( "Repository type "+repository.getType()+" is not supported by this implementation." );
+ }
+ if (!supportsLayout( repository.getLayout() )) {
+ throw new RepositoryException( "Repository layout "+repository.getLayout()+" is not supported by this implementation." );
+ }
+ RemoteDefaultRepositoryContent content = new RemoteDefaultRepositoryContent(artifactMappingProviders);
+ content.setRepository( repository );
+ return content;
+ }
+
+ @Override
+ public ManagedRepositoryContent createManagedContent( ManagedRepository repository ) throws RepositoryException
+ {
+ if (!supports( repository.getType() )) {
+ throw new RepositoryException( "Repository type "+repository.getType()+" is not supported by this implementation." );
+ }
+ if (!supportsLayout( repository.getLayout() )) {
+ throw new RepositoryException( "Repository layout "+repository.getLayout()+" is not supported by this implementation." );
+ }
+ ManagedDefaultRepositoryContent content = new ManagedDefaultRepositoryContent(artifactMappingProviders, filetypes);
+ content.setRepository( repository );
+ return content;
+ }
+
+ @SuppressWarnings( "unchecked" )
+ @Override
+ public <T extends RepositoryContent, V extends Repository> T createContent( Class<T> clazz, V repository ) throws RepositoryException
+ {
+ if (!supports( repository.getType() )) {
+ throw new RepositoryException( "Repository type "+repository.getType()+" is not supported by this implementation." );
+ }
+ if (repository instanceof ManagedRepository && ManagedRepositoryContent.class.isAssignableFrom( clazz ) ) {
+ return (T) this.createManagedContent( (ManagedRepository) repository );
+ } else if (repository instanceof RemoteRepository && RemoteRepository.class.isAssignableFrom( clazz )) {
+ return (T) this.createRemoteContent( (RemoteRepository) repository );
+ } else {
+ throw new RepositoryException( "Repository flavour is not supported: "+repository.getClass().getName() );
+ }
+ }
+
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/RemoteDefaultRepositoryContent.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/RemoteDefaultRepositoryContent.java
new file mode 100644
index 000000000..17426d8b9
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/RemoteDefaultRepositoryContent.java
@@ -0,0 +1,102 @@
+package org.apache.archiva.repository.content.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.metadata.repository.storage.maven2.ArtifactMappingProvider;
+import org.apache.archiva.model.ArtifactReference;
+import org.apache.archiva.model.RepositoryURL;
+import org.apache.archiva.repository.LayoutException;
+import org.apache.archiva.repository.RemoteRepository;
+import org.apache.archiva.repository.RemoteRepositoryContent;
+
+import java.util.List;
+
+/**
+ * RemoteDefaultRepositoryContent
+ */
+public class RemoteDefaultRepositoryContent
+ extends AbstractDefaultRepositoryContent
+ implements RemoteRepositoryContent
+{
+ private RemoteRepository repository;
+
+
+ public RemoteDefaultRepositoryContent( List<? extends ArtifactMappingProvider> artifactMappingProviders ) {
+ super(artifactMappingProviders);
+ }
+
+ @Override
+ public String getId( )
+ {
+ return repository.getId( );
+ }
+
+ @Override
+ public RemoteRepository getRepository( )
+ {
+ return repository;
+ }
+
+ @Override
+ public RepositoryURL getURL( )
+ {
+ try
+ {
+ return new RepositoryURL( repository.getLocation( ).toString( ) );
+ }
+ catch ( Exception e )
+ {
+ log.error( "Could not convert location url {}", repository.getLocation( ) );
+ return new RepositoryURL( "" );
+ }
+ }
+
+ @Override
+ public void setRepository( RemoteRepository repository )
+ {
+ this.repository = repository;
+ }
+
+ /**
+ * Convert a path to an artifact reference.
+ *
+ * @param path the path to convert. (relative or full url path)
+ * @throws LayoutException if the path cannot be converted to an artifact reference.
+ */
+ @Override
+ public ArtifactReference toArtifactReference( String path )
+ throws LayoutException
+ {
+
+ if ( ( path != null ) && repository.getLocation()!=null && path.startsWith( repository.getLocation().toString() ) )
+ {
+ return super.toArtifactReference( path.substring( repository.getLocation().toString().length( ) ) );
+ }
+
+ return super.toArtifactReference( path );
+ }
+
+ @Override
+ public RepositoryURL toURL( ArtifactReference reference )
+ {
+ String url = repository.getLocation( ) + toPath( reference );
+ return new RepositoryURL( url );
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/RepositoryRequest.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/RepositoryRequest.java
new file mode 100644
index 000000000..fa7ec895b
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/RepositoryRequest.java
@@ -0,0 +1,275 @@
+package org.apache.archiva.repository.content.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.model.ArtifactReference;
+import org.apache.archiva.repository.LayoutException;
+import org.apache.archiva.repository.ManagedRepositoryContent;
+import org.apache.archiva.repository.content.PathParser;
+import org.apache.archiva.repository.metadata.MetadataTools;
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * RepositoryRequest is used to determine the type of request that is incoming, and convert it to an appropriate
+ * ArtifactReference.
+ */
+public class RepositoryRequest
+{
+ private PathParser defaultPathParser = new DefaultPathParser();
+
+ public RepositoryRequest()
+ {
+ // no op
+ }
+
+ /**
+ * Takes an incoming requested path (in "/" format) and gleans the layout
+ * and ArtifactReference appropriate for that content.
+ *
+ * @param requestedPath the relative path to the content.
+ * @return the ArtifactReference for the requestedPath.
+ * @throws LayoutException if the request path is not layout valid.
+ */
+ public ArtifactReference toArtifactReference( String requestedPath )
+ throws LayoutException
+ {
+ if ( StringUtils.isBlank( requestedPath ) )
+ {
+ throw new LayoutException( "Blank request path is not a valid." );
+ }
+
+ String path = requestedPath;
+ while ( path.startsWith( "/" ) )
+ {
+ path = path.substring( 1 );
+
+ // Only slash? that's bad, mmm-kay?
+ if ( "/".equals( path ) )
+ {
+ throw new LayoutException( "Invalid request path: Slash only." );
+ }
+ }
+
+ if ( isDefault( path ) )
+ {
+ return defaultPathParser.toArtifactReference( path );
+ }
+ else if ( isLegacy( path ) )
+ {
+ throw new LayoutException( "Legacy Maven1 repository not supported anymore." );
+ }
+ else
+ {
+ throw new LayoutException( "Not a valid request path layout, too short." );
+ }
+ }
+
+ /**
+ * <p>
+ * Tests the path to see if it conforms to the expectations of a metadata request.
+ * </p>
+ * <p>
+ * NOTE: This does a cursory check on the path's last element. A result of true
+ * from this method is not a guarantee that the metadata is in a valid format, or
+ * that it even contains data.
+ * </p>
+ *
+ * @param requestedPath the path to test.
+ * @return true if the requestedPath is likely a metadata request.
+ */
+ public boolean isMetadata( String requestedPath )
+ {
+ return requestedPath.endsWith( "/" + MetadataTools.MAVEN_METADATA );
+ }
+
+ /**
+ * @param requestedPath
+ * @return true if the requestedPath is likely an archetype catalog request.
+ */
+ public boolean isArchetypeCatalog( String requestedPath )
+ {
+ return requestedPath.endsWith( "/" + MetadataTools.MAVEN_ARCHETYPE_CATALOG );
+ }
+
+ /**
+ * <p>
+ * Tests the path to see if it conforms to the expectations of a support file request.
+ * </p>
+ * <p>
+ * Tests for <code>.sha1</code>, <code>.md5</code>, <code>.asc</code>, and <code>.php</code>.
+ * </p>
+ * <p>
+ * NOTE: This does a cursory check on the path's extension only. A result of true
+ * from this method is not a guarantee that the support resource is in a valid format, or
+ * that it even contains data.
+ * </p>
+ *
+ * @param requestedPath the path to test.
+ * @return true if the requestedPath is likely that of a support file request.
+ */
+ public boolean isSupportFile( String requestedPath )
+ {
+ int idx = requestedPath.lastIndexOf( '.' );
+ if ( idx <= 0 )
+ {
+ return false;
+ }
+
+ String ext = requestedPath.substring( idx );
+ return ( ".sha1".equals( ext ) || ".md5".equals( ext ) || ".asc".equals( ext ) || ".pgp".equals( ext ) );
+ }
+
+ public boolean isMetadataSupportFile( String requestedPath )
+ {
+ if ( isSupportFile( requestedPath ) )
+ {
+ String basefilePath = StringUtils.substring( requestedPath, 0, requestedPath.lastIndexOf( '.' ) );
+ if ( isMetadata( basefilePath ) )
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * <p>
+ * Tests the path to see if it conforms to the expectations of a default layout request.
+ * </p>
+ * <p>
+ * NOTE: This does a cursory check on the count of path elements only. A result of
+ * true from this method is not a guarantee that the path sections are valid and
+ * can be resolved to an artifact reference. use {@link #toArtifactReference(String)}
+ * if you want a more complete analysis of the validity of the path.
+ * </p>
+ *
+ * @param requestedPath the path to test.
+ * @return true if the requestedPath is likely that of a default layout request.
+ */
+ public boolean isDefault( String requestedPath )
+ {
+ if ( StringUtils.isBlank( requestedPath ) )
+ {
+ return false;
+ }
+
+ String pathParts[] = StringUtils.splitPreserveAllTokens( requestedPath, '/' );
+ if ( pathParts.length > 3 )
+ {
+ return true;
+ }
+ else if ( pathParts.length == 3 )
+ {
+ // check if artifact-level metadata (ex. eclipse/jdtcore/maven-metadata.xml)
+ if ( isMetadata( requestedPath ) )
+ {
+ return true;
+ }
+ else
+ {
+ // check if checksum of artifact-level metadata (ex. eclipse/jdtcore/maven-metadata.xml.sha1)
+ int idx = requestedPath.lastIndexOf( '.' );
+ if ( idx > 0 )
+ {
+ String base = requestedPath.substring( 0, idx );
+ if ( isMetadata( base ) && isSupportFile( requestedPath ) )
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ /**
+ * <p>
+ * Tests the path to see if it conforms to the expectations of a legacy layout request.
+ * </p>
+ * <p>
+ * NOTE: This does a cursory check on the count of path elements only. A result of
+ * true from this method is not a guarantee that the path sections are valid and
+ * can be resolved to an artifact reference. use {@link #toArtifactReference(String)}
+ * if you want a more complete analysis of the validity of the path.
+ * </p>
+ *
+ * @param requestedPath the path to test.
+ * @return true if the requestedPath is likely that of a legacy layout request.
+ */
+ public boolean isLegacy( String requestedPath )
+ {
+ if ( StringUtils.isBlank( requestedPath ) )
+ {
+ return false;
+ }
+
+ String pathParts[] = StringUtils.splitPreserveAllTokens( requestedPath, '/' );
+ return pathParts.length == 3;
+ }
+
+ /**
+ * Adjust the requestedPath to conform to the native layout of the provided {@link org.apache.archiva.repository.ManagedRepositoryContent}.
+ *
+ * @param requestedPath the incoming requested path.
+ * @param repository the repository to adjust to.
+ * @return the adjusted (to native) path.
+ * @throws LayoutException if the path cannot be parsed.
+ */
+ public String toNativePath( String requestedPath, ManagedRepositoryContent repository )
+ throws LayoutException
+ {
+ if ( StringUtils.isBlank( requestedPath ) )
+ {
+ throw new LayoutException( "Request Path is blank." );
+ }
+
+ String referencedResource = requestedPath;
+ // No checksum by default.
+ String supportfile = "";
+
+ // Figure out support file, and actual referencedResource.
+ if ( isSupportFile( requestedPath ) )
+ {
+ int idx = requestedPath.lastIndexOf( '.' );
+ referencedResource = requestedPath.substring( 0, idx );
+ supportfile = requestedPath.substring( idx );
+ }
+
+ if ( isMetadata( referencedResource ) )
+ {
+ /* Nothing to translate.
+ * Default layout is the only layout that can contain maven-metadata.xml files, and
+ * if the managedRepository is layout legacy, this request would never occur.
+ */
+ return requestedPath;
+ }
+
+ // Treat as an artifact reference.
+ ArtifactReference ref = toArtifactReference( referencedResource );
+ String adjustedPath = repository.toPath( ref );
+ return adjustedPath + supportfile;
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenManagedRepository.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenManagedRepository.java
new file mode 100644
index 000000000..ea55b7c5e
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenManagedRepository.java
@@ -0,0 +1,140 @@
+package org.apache.archiva.repository.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.common.utils.PathUtil;
+import org.apache.archiva.repository.AbstractManagedRepository;
+import org.apache.archiva.repository.ReleaseScheme;
+import org.apache.archiva.repository.RepositoryCapabilities;
+import org.apache.archiva.repository.RepositoryType;
+import org.apache.archiva.repository.StandardCapabilities;
+import org.apache.archiva.repository.UnsupportedFeatureException;
+import org.apache.archiva.repository.features.ArtifactCleanupFeature;
+import org.apache.archiva.repository.features.IndexCreationFeature;
+import org.apache.archiva.repository.features.RepositoryFeature;
+import org.apache.archiva.repository.features.StagingRepositoryFeature;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.net.URI;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Locale;
+import java.util.function.Function;
+
+/**
+ * Maven2 managed repository implementation.
+ */
+public class MavenManagedRepository extends AbstractManagedRepository
+{
+
+ private static final Logger log = LoggerFactory.getLogger( MavenManagedRepository.class );
+
+ public static final String DEFAULT_LAYOUT = "default";
+ public static final String LEGACY_LAYOUT = "legacy";
+ private ArtifactCleanupFeature artifactCleanupFeature = new ArtifactCleanupFeature( );
+ private IndexCreationFeature indexCreationFeature;
+ private StagingRepositoryFeature stagingRepositoryFeature = new StagingRepositoryFeature( );
+
+
+
+ private static final RepositoryCapabilities CAPABILITIES = new StandardCapabilities(
+ new ReleaseScheme[] { ReleaseScheme.RELEASE, ReleaseScheme.SNAPSHOT },
+ new String[] { DEFAULT_LAYOUT, LEGACY_LAYOUT},
+ new String[] {},
+ new String[] {ArtifactCleanupFeature.class.getName(), IndexCreationFeature.class.getName(),
+ StagingRepositoryFeature.class.getName()},
+ true,
+ true,
+ true,
+ true,
+ false
+ );
+
+ public MavenManagedRepository( String id, String name, Path basePath )
+ {
+ super( RepositoryType.MAVEN, id, name, basePath);
+ this.indexCreationFeature = new IndexCreationFeature(this, this);
+ }
+
+ public MavenManagedRepository( Locale primaryLocale, String id, String name, Path basePath )
+ {
+ super( primaryLocale, RepositoryType.MAVEN, id, name, basePath );
+ }
+
+ @Override
+ public RepositoryCapabilities getCapabilities( )
+ {
+ return CAPABILITIES;
+ }
+
+
+ @SuppressWarnings( "unchecked" )
+ @Override
+ public <T extends RepositoryFeature<T>> RepositoryFeature<T> getFeature( Class<T> clazz ) throws UnsupportedFeatureException
+ {
+ if (ArtifactCleanupFeature.class.equals( clazz ))
+ {
+ return (RepositoryFeature<T>) artifactCleanupFeature;
+ } else if (IndexCreationFeature.class.equals(clazz)) {
+ return (RepositoryFeature<T>) indexCreationFeature;
+ } else if (StagingRepositoryFeature.class.equals(clazz)) {
+ return (RepositoryFeature<T>) stagingRepositoryFeature;
+ } else {
+ throw new UnsupportedFeatureException( );
+ }
+ }
+
+ @Override
+ public <T extends RepositoryFeature<T>> boolean supportsFeature( Class<T> clazz )
+ {
+ if (ArtifactCleanupFeature.class.equals(clazz) ||
+ IndexCreationFeature.class.equals(clazz) ||
+ StagingRepositoryFeature.class.equals(clazz)) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean hasIndex( )
+ {
+ return indexCreationFeature.hasIndex();
+ }
+
+ @Override
+ public void setLocation( URI location )
+ {
+ super.setLocation( location );
+ Path newLoc = PathUtil.getPathFromUri( location );
+ if (!Files.exists( newLoc )) {
+ try
+ {
+ Files.createDirectories( newLoc );
+ }
+ catch ( IOException e )
+ {
+ log.error("Could not create directory {}",location, e);
+ }
+ }
+ }
+
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRemoteRepository.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRemoteRepository.java
new file mode 100644
index 000000000..1933554ac
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRemoteRepository.java
@@ -0,0 +1,114 @@
+package org.apache.archiva.repository.maven2;
+
+import org.apache.archiva.repository.AbstractRemoteRepository;
+import org.apache.archiva.repository.ReleaseScheme;
+import org.apache.archiva.repository.RemoteRepository;
+import org.apache.archiva.repository.RepositoryCapabilities;
+import org.apache.archiva.repository.RepositoryType;
+import org.apache.archiva.repository.StandardCapabilities;
+import org.apache.archiva.repository.UnsupportedFeatureException;
+import org.apache.archiva.repository.features.IndexCreationFeature;
+import org.apache.archiva.repository.features.RemoteIndexFeature;
+import org.apache.archiva.repository.features.RepositoryFeature;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.nio.file.Path;
+import java.util.Locale;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT 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 remote repository implementation
+ */
+public class MavenRemoteRepository extends AbstractRemoteRepository
+ implements RemoteRepository
+{
+
+ Logger log = LoggerFactory.getLogger(MavenRemoteRepository.class);
+
+ final private RemoteIndexFeature remoteIndexFeature = new RemoteIndexFeature();
+ final private IndexCreationFeature indexCreationFeature;
+
+ private static final RepositoryCapabilities CAPABILITIES = new StandardCapabilities(
+ new ReleaseScheme[] { ReleaseScheme.RELEASE, ReleaseScheme.SNAPSHOT },
+ new String[] { MavenManagedRepository.DEFAULT_LAYOUT, MavenManagedRepository.LEGACY_LAYOUT},
+ new String[] {},
+ new String[] {RemoteIndexFeature.class.getName(), IndexCreationFeature.class.getName()},
+ true,
+ true,
+ true,
+ true,
+ false
+ );
+
+ public MavenRemoteRepository( String id, String name, Path basePath )
+ {
+ super( RepositoryType.MAVEN, id, name, basePath );
+ this.indexCreationFeature = new IndexCreationFeature(this, this);
+
+ }
+
+ public MavenRemoteRepository( Locale primaryLocale, String id, String name, Path basePath )
+ {
+ super( primaryLocale, RepositoryType.MAVEN, id, name, basePath );
+ this.indexCreationFeature = new IndexCreationFeature(this, this);
+ }
+
+ @Override
+ public boolean hasIndex( )
+ {
+ return remoteIndexFeature.hasIndex();
+ }
+
+ @Override
+ public RepositoryCapabilities getCapabilities( )
+ {
+ return CAPABILITIES;
+ }
+
+ @SuppressWarnings( "unchecked" )
+ @Override
+ public <T extends RepositoryFeature<T>> RepositoryFeature<T> getFeature( Class<T> clazz ) throws UnsupportedFeatureException
+ {
+ if (RemoteIndexFeature.class.equals( clazz )) {
+ return (RepositoryFeature<T>) remoteIndexFeature;
+ } else if (IndexCreationFeature.class.equals(clazz)) {
+ return (RepositoryFeature<T>) indexCreationFeature;
+ } else {
+ throw new UnsupportedFeatureException( );
+ }
+ }
+
+ @Override
+ public <T extends RepositoryFeature<T>> boolean supportsFeature( Class<T> clazz )
+ {
+ if ( RemoteIndexFeature.class.equals(clazz) || IndexCreationFeature.class.equals(clazz)) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ @Override
+ public String toString() {
+ return super.toString()+", remoteIndexFeature="+remoteIndexFeature.toString()+", indexCreationFeature="+indexCreationFeature.toString();
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java
new file mode 100644
index 000000000..79a9fb9e6
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java
@@ -0,0 +1,439 @@
+package org.apache.archiva.repository.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.configuration.AbstractRepositoryConfiguration;
+import org.apache.archiva.configuration.ArchivaConfiguration;
+import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
+import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
+import org.apache.archiva.repository.BasicManagedRepository;
+import org.apache.archiva.repository.EditableManagedRepository;
+import org.apache.archiva.repository.EditableRemoteRepository;
+import org.apache.archiva.repository.EditableRepository;
+import org.apache.archiva.repository.ManagedRepository;
+import org.apache.archiva.repository.PasswordCredentials;
+import org.apache.archiva.repository.ReleaseScheme;
+import org.apache.archiva.repository.RemoteRepository;
+import org.apache.archiva.repository.RepositoryCredentials;
+import org.apache.archiva.repository.RepositoryEvent;
+import org.apache.archiva.repository.RepositoryException;
+import org.apache.archiva.repository.RepositoryProvider;
+import org.apache.archiva.repository.RepositoryType;
+import org.apache.archiva.repository.UnsupportedURIException;
+import org.apache.archiva.repository.features.ArtifactCleanupFeature;
+import org.apache.archiva.repository.features.IndexCreationFeature;
+import org.apache.archiva.repository.features.RemoteIndexFeature;
+import org.apache.archiva.repository.features.StagingRepositoryFeature;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import javax.inject.Inject;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.time.Duration;
+import java.time.Period;
+import java.time.temporal.ChronoUnit;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * Provider for the maven2 repository implementations
+ */
+@Service("mavenRepositoryProvider")
+public class MavenRepositoryProvider implements RepositoryProvider {
+
+
+ @Inject
+ private ArchivaConfiguration archivaConfiguration;
+
+ private static final Logger log = LoggerFactory.getLogger(MavenRepositoryProvider.class);
+
+ static final Set<RepositoryType> TYPES = new HashSet<>();
+
+ static {
+ TYPES.add(RepositoryType.MAVEN);
+ }
+
+ @Override
+ public Set<RepositoryType> provides() {
+ return TYPES;
+ }
+
+ @Override
+ public EditableManagedRepository createManagedInstance(String id, String name) {
+ return new MavenManagedRepository(id, name, archivaConfiguration.getRepositoryBaseDir());
+ }
+
+ @Override
+ public EditableRemoteRepository createRemoteInstance(String id, String name) {
+ return new MavenRemoteRepository(id, name, archivaConfiguration.getRemoteRepositoryBaseDir());
+ }
+
+ private URI getURIFromString(String uriStr) throws RepositoryException {
+ URI uri;
+ try {
+ if (StringUtils.isEmpty(uriStr)) {
+ return new URI("");
+ }
+ if (uriStr.startsWith("/")) {
+ // only absolute paths are prepended with file scheme
+ uri = new URI("file://" + uriStr);
+ } else {
+ uri = new URI(uriStr);
+ }
+ if (uri.getScheme() != null && !"file".equals(uri.getScheme())) {
+ log.error("Bad URI scheme found: {}, URI={}", uri.getScheme(), uri);
+ throw new RepositoryException("The uri " + uriStr + " is not valid. Only file:// URI is allowed for maven.");
+ }
+ } catch (URISyntaxException e) {
+ String newCfg = "file://" + uriStr;
+ try {
+ uri = new URI(newCfg);
+ } catch (URISyntaxException e1) {
+ log.error("Could not create URI from {} -> ", uriStr, newCfg);
+ throw new RepositoryException("The config entry " + uriStr + " cannot be converted to URI.");
+ }
+ }
+ log.debug("Setting location uri: {}", uri);
+ return uri;
+ }
+
+ @Override
+ public ManagedRepository createManagedInstance(ManagedRepositoryConfiguration cfg) throws RepositoryException {
+ MavenManagedRepository repo = new MavenManagedRepository(cfg.getId(), cfg.getName(), archivaConfiguration.getRepositoryBaseDir());
+ updateManagedInstance(repo, cfg);
+ return repo;
+ }
+
+ @Override
+ public void updateManagedInstance(EditableManagedRepository repo, ManagedRepositoryConfiguration cfg) throws RepositoryException {
+ try {
+ repo.setLocation(getURIFromString(cfg.getLocation()));
+ } catch (UnsupportedURIException e) {
+ throw new RepositoryException("The location entry is not a valid uri: " + cfg.getLocation());
+ }
+ setBaseConfig(repo, cfg);
+ Path repoDir = repo.getLocalPath();
+ if (!Files.exists(repoDir)) {
+ log.debug("Creating repo directory {}", repoDir);
+ try {
+ Files.createDirectories(repoDir);
+ } catch (IOException e) {
+ log.error("Could not create directory {} for repository {}", repo.getLocalPath(), repo.getId(), e);
+ throw new RepositoryException("Could not create directory for repository " + repo.getLocalPath());
+ }
+ }
+ repo.setSchedulingDefinition(cfg.getRefreshCronExpression());
+ repo.setBlocksRedeployment(cfg.isBlockRedeployments());
+ repo.setScanned(cfg.isScanned());
+ if (cfg.isReleases()) {
+ repo.addActiveReleaseScheme(ReleaseScheme.RELEASE);
+ }
+ if (cfg.isSnapshots()) {
+ repo.addActiveReleaseScheme(ReleaseScheme.SNAPSHOT);
+ }
+
+ StagingRepositoryFeature stagingRepositoryFeature = repo.getFeature(StagingRepositoryFeature.class).get();
+ stagingRepositoryFeature.setStageRepoNeeded(cfg.isStageRepoNeeded());
+
+ IndexCreationFeature indexCreationFeature = repo.getFeature(IndexCreationFeature.class).get();
+ indexCreationFeature.setSkipPackedIndexCreation(cfg.isSkipPackedIndexCreation());
+ indexCreationFeature.setIndexPath(getURIFromString(cfg.getIndexDir()));
+ indexCreationFeature.setPackedIndexPath(getURIFromString(cfg.getPackedIndexDir()));
+ /* -> Should be created by MavenIndexProvider
+
+ Path indexPath;
+ if (indexCreationFeature.getIndexPath().getScheme() == null) {
+ indexPath = Paths.get(indexCreationFeature.getIndexPath().getPath());
+ } else {
+ indexPath = Paths.get(indexCreationFeature.getIndexPath());
+ }
+ Path absoluteIndexPath;
+ if (indexPath.isAbsolute()) {
+ absoluteIndexPath = indexPath;
+ } else {
+ absoluteIndexPath = PathUtil.getPathFromUri(repo.getLocation()).resolve(indexCreationFeature.getIndexPath().getPath());
+ }
+ try {
+ Files.createDirectories(absoluteIndexPath);
+ } catch (IOException e) {
+ log.error("Could not create index directory {}", absoluteIndexPath);
+ throw new RepositoryException("Could not create index directory " + absoluteIndexPath);
+ }*/
+
+ ArtifactCleanupFeature artifactCleanupFeature = repo.getFeature(ArtifactCleanupFeature.class).get();
+
+ artifactCleanupFeature.setDeleteReleasedSnapshots(cfg.isDeleteReleasedSnapshots());
+ artifactCleanupFeature.setRetentionCount(cfg.getRetentionCount());
+ artifactCleanupFeature.setRetentionPeriod(Period.ofDays(cfg.getRetentionPeriod()));
+ }
+
+
+ @Override
+ public ManagedRepository createStagingInstance(ManagedRepositoryConfiguration baseConfiguration) throws RepositoryException {
+ log.debug("Creating staging instance for {}", baseConfiguration.getId());
+ return createManagedInstance(getStageRepoConfig(baseConfiguration));
+ }
+
+
+ @Override
+ public RemoteRepository createRemoteInstance(RemoteRepositoryConfiguration cfg) throws RepositoryException {
+ MavenRemoteRepository repo = new MavenRemoteRepository(cfg.getId(), cfg.getName(), archivaConfiguration.getRemoteRepositoryBaseDir());
+ updateRemoteInstance(repo, cfg);
+ return repo;
+ }
+
+ private String convertUriToPath(URI uri) {
+ if (uri.getScheme() == null) {
+ return uri.getPath();
+ } else if ("file".equals(uri.getScheme())) {
+ return Paths.get(uri).toString();
+ } else {
+ return uri.toString();
+ }
+ }
+
+ @Override
+ public void updateRemoteInstance(EditableRemoteRepository repo, RemoteRepositoryConfiguration cfg) throws RepositoryException {
+ setBaseConfig(repo, cfg);
+ repo.setCheckPath(cfg.getCheckPath());
+ repo.setSchedulingDefinition(cfg.getRefreshCronExpression());
+ try {
+ repo.setLocation(new URI(cfg.getUrl()));
+ } catch (UnsupportedURIException | URISyntaxException e) {
+ log.error("Could not set remote url " + cfg.getUrl());
+ throw new RepositoryException("The url config is not a valid uri: " + cfg.getUrl());
+ }
+ repo.setTimeout(Duration.ofSeconds(cfg.getTimeout()));
+ RemoteIndexFeature remoteIndexFeature = repo.getFeature(RemoteIndexFeature.class).get();
+ remoteIndexFeature.setDownloadRemoteIndex(cfg.isDownloadRemoteIndex());
+ remoteIndexFeature.setDownloadRemoteIndexOnStartup(cfg.isDownloadRemoteIndexOnStartup());
+ remoteIndexFeature.setDownloadTimeout(Duration.ofSeconds(cfg.getRemoteDownloadTimeout()));
+ remoteIndexFeature.setProxyId(cfg.getRemoteDownloadNetworkProxyId());
+ if (cfg.isDownloadRemoteIndex()) {
+ try {
+ remoteIndexFeature.setIndexUri(new URI(cfg.getRemoteIndexUrl()));
+ } catch (URISyntaxException e) {
+ log.error("Could not set remote index url " + cfg.getRemoteIndexUrl());
+ remoteIndexFeature.setDownloadRemoteIndex(false);
+ remoteIndexFeature.setDownloadRemoteIndexOnStartup(false);
+ }
+ }
+ for ( Object key : cfg.getExtraHeaders().keySet() ) {
+ repo.addExtraHeader( key.toString(), cfg.getExtraHeaders().get(key).toString() );
+ }
+ for ( Object key : cfg.getExtraParameters().keySet() ) {
+ repo.addExtraParameter( key.toString(), cfg.getExtraParameters().get(key).toString() );
+ }
+ PasswordCredentials credentials = new PasswordCredentials("", new char[0]);
+ if (cfg.getPassword() != null && cfg.getUsername() != null) {
+ credentials.setPassword(cfg.getPassword().toCharArray());
+ credentials.setUsername(cfg.getUsername());
+ repo.setCredentials(credentials);
+ } else {
+ credentials.setPassword(new char[0]);
+ }
+ IndexCreationFeature indexCreationFeature = repo.getFeature(IndexCreationFeature.class).get();
+ if (cfg.getIndexDir() != null) {
+ indexCreationFeature.setIndexPath(getURIFromString(cfg.getIndexDir()));
+ }
+ if (cfg.getPackedIndexDir() != null) {
+ indexCreationFeature.setPackedIndexPath(getURIFromString(cfg.getPackedIndexDir()));
+ }
+ log.debug("Updated remote instance {}", repo);
+ }
+
+ @Override
+ public RemoteRepositoryConfiguration getRemoteConfiguration(RemoteRepository remoteRepository) throws RepositoryException {
+ if (!(remoteRepository instanceof MavenRemoteRepository)) {
+ log.error("Wrong remote repository type " + remoteRepository.getClass().getName());
+ throw new RepositoryException("The given repository type cannot be handled by the maven provider: " + remoteRepository.getClass().getName());
+ }
+ RemoteRepositoryConfiguration cfg = new RemoteRepositoryConfiguration();
+ cfg.setType(remoteRepository.getType().toString());
+ cfg.setId(remoteRepository.getId());
+ cfg.setName(remoteRepository.getName());
+ cfg.setDescription(remoteRepository.getDescription());
+ cfg.setUrl(remoteRepository.getLocation().toString());
+ cfg.setTimeout((int) remoteRepository.getTimeout().toMillis() / 1000);
+ cfg.setCheckPath(remoteRepository.getCheckPath());
+ RepositoryCredentials creds = remoteRepository.getLoginCredentials();
+ if (creds != null) {
+ if (creds instanceof PasswordCredentials) {
+ PasswordCredentials pCreds = (PasswordCredentials) creds;
+ cfg.setPassword(new String(pCreds.getPassword()));
+ cfg.setUsername(pCreds.getUsername());
+ }
+ }
+ cfg.setLayout(remoteRepository.getLayout());
+ cfg.setExtraParameters(remoteRepository.getExtraParameters());
+ cfg.setExtraHeaders(remoteRepository.getExtraHeaders());
+ cfg.setRefreshCronExpression(remoteRepository.getSchedulingDefinition());
+
+ IndexCreationFeature indexCreationFeature = remoteRepository.getFeature(IndexCreationFeature.class).get();
+ cfg.setIndexDir(convertUriToPath(indexCreationFeature.getIndexPath()));
+ cfg.setPackedIndexDir(convertUriToPath(indexCreationFeature.getPackedIndexPath()));
+
+ RemoteIndexFeature remoteIndexFeature = remoteRepository.getFeature(RemoteIndexFeature.class).get();
+ cfg.setRemoteIndexUrl(remoteIndexFeature.getIndexUri().toString());
+ cfg.setRemoteDownloadTimeout((int) remoteIndexFeature.getDownloadTimeout().get(ChronoUnit.SECONDS));
+ cfg.setDownloadRemoteIndexOnStartup(remoteIndexFeature.isDownloadRemoteIndexOnStartup());
+ cfg.setDownloadRemoteIndex(remoteIndexFeature.isDownloadRemoteIndex());
+ cfg.setRemoteDownloadNetworkProxyId(remoteIndexFeature.getProxyId());
+
+
+ return cfg;
+
+ }
+
+ @Override
+ public ManagedRepositoryConfiguration getManagedConfiguration(ManagedRepository managedRepository) throws RepositoryException {
+ if (!(managedRepository instanceof MavenManagedRepository || managedRepository instanceof BasicManagedRepository)) {
+ log.error("Wrong remote repository type " + managedRepository.getClass().getName());
+ throw new RepositoryException("The given repository type cannot be handled by the maven provider: " + managedRepository.getClass().getName());
+ }
+ ManagedRepositoryConfiguration cfg = new ManagedRepositoryConfiguration();
+ cfg.setType(managedRepository.getType().toString());
+ cfg.setId(managedRepository.getId());
+ cfg.setName(managedRepository.getName());
+ cfg.setDescription(managedRepository.getDescription());
+ cfg.setLocation(convertUriToPath(managedRepository.getLocation()));
+ cfg.setLayout(managedRepository.getLayout());
+ cfg.setRefreshCronExpression(managedRepository.getSchedulingDefinition());
+ cfg.setScanned(managedRepository.isScanned());
+ cfg.setBlockRedeployments(managedRepository.blocksRedeployments());
+ StagingRepositoryFeature stagingRepositoryFeature = managedRepository.getFeature(StagingRepositoryFeature.class).get();
+ cfg.setStageRepoNeeded(stagingRepositoryFeature.isStageRepoNeeded());
+ IndexCreationFeature indexCreationFeature = managedRepository.getFeature(IndexCreationFeature.class).get();
+ cfg.setIndexDir(convertUriToPath(indexCreationFeature.getIndexPath()));
+ cfg.setPackedIndexDir(convertUriToPath(indexCreationFeature.getPackedIndexPath()));
+ cfg.setSkipPackedIndexCreation(indexCreationFeature.isSkipPackedIndexCreation());
+
+ ArtifactCleanupFeature artifactCleanupFeature = managedRepository.getFeature(ArtifactCleanupFeature.class).get();
+ cfg.setRetentionCount(artifactCleanupFeature.getRetentionCount());
+ cfg.setRetentionPeriod(artifactCleanupFeature.getRetentionPeriod().getDays());
+ cfg.setDeleteReleasedSnapshots(artifactCleanupFeature.isDeleteReleasedSnapshots());
+
+ if (managedRepository.getActiveReleaseSchemes().contains(ReleaseScheme.RELEASE)) {
+ cfg.setReleases(true);
+ } else {
+ cfg.setReleases(false);
+ }
+ if (managedRepository.getActiveReleaseSchemes().contains(ReleaseScheme.SNAPSHOT)) {
+ cfg.setSnapshots(true);
+ } else {
+ cfg.setSnapshots(false);
+ }
+ return cfg;
+
+ }
+
+ private ManagedRepositoryConfiguration getStageRepoConfig(ManagedRepositoryConfiguration repository) {
+ ManagedRepositoryConfiguration stagingRepository = new ManagedRepositoryConfiguration();
+ stagingRepository.setId(repository.getId() + StagingRepositoryFeature.STAGING_REPO_POSTFIX);
+ stagingRepository.setLayout(repository.getLayout());
+ stagingRepository.setName(repository.getName() + StagingRepositoryFeature.STAGING_REPO_POSTFIX);
+ stagingRepository.setBlockRedeployments(repository.isBlockRedeployments());
+ stagingRepository.setRetentionPeriod(repository.getRetentionPeriod());
+ stagingRepository.setDeleteReleasedSnapshots(repository.isDeleteReleasedSnapshots());
+ stagingRepository.setStageRepoNeeded(false);
+
+ String path = repository.getLocation();
+ int lastIndex = path.replace('\\', '/').lastIndexOf('/');
+ stagingRepository.setLocation(path.substring(0, lastIndex) + "/" + stagingRepository.getId());
+
+ if (StringUtils.isNotBlank(repository.getIndexDir())) {
+ Path indexDir = null;
+ try {
+ indexDir = Paths.get(new URI(repository.getIndexDir().startsWith("file://") ? repository.getIndexDir() : "file://" + repository.getIndexDir()));
+ if (indexDir.isAbsolute()) {
+ Path newDir = indexDir.getParent().resolve(indexDir.getFileName() + StagingRepositoryFeature.STAGING_REPO_POSTFIX);
+ log.debug("Changing index directory {} -> {}", indexDir, newDir);
+ stagingRepository.setIndexDir(newDir.toString());
+ } else {
+ log.debug("Keeping index directory {}", repository.getIndexDir());
+ stagingRepository.setIndexDir(repository.getIndexDir());
+ }
+ } catch (URISyntaxException e) {
+ log.error("Could not parse index path as uri {}", repository.getIndexDir());
+ stagingRepository.setIndexDir("");
+ }
+ // in case of absolute dir do not use the same
+ }
+ if (StringUtils.isNotBlank(repository.getPackedIndexDir())) {
+ Path packedIndexDir = null;
+ try {
+ packedIndexDir = Paths.get(new URI(repository.getPackedIndexDir().startsWith("file://") ? repository.getPackedIndexDir() : "file://" + repository.getPackedIndexDir()));
+ if (packedIndexDir.isAbsolute()) {
+ Path newDir = packedIndexDir.getParent().resolve(packedIndexDir.getFileName() + StagingRepositoryFeature.STAGING_REPO_POSTFIX);
+ log.debug("Changing index directory {} -> {}", packedIndexDir, newDir);
+ stagingRepository.setPackedIndexDir(newDir.toString());
+ } else {
+ log.debug("Keeping index directory {}", repository.getPackedIndexDir());
+ stagingRepository.setPackedIndexDir(repository.getPackedIndexDir());
+ }
+ } catch (URISyntaxException e) {
+ log.error("Could not parse index path as uri {}", repository.getPackedIndexDir());
+ stagingRepository.setPackedIndexDir("");
+ }
+ // in case of absolute dir do not use the same
+ }
+ stagingRepository.setRefreshCronExpression(repository.getRefreshCronExpression());
+ stagingRepository.setReleases(repository.isReleases());
+ stagingRepository.setRetentionCount(repository.getRetentionCount());
+ stagingRepository.setScanned(repository.isScanned());
+ stagingRepository.setSnapshots(repository.isSnapshots());
+ stagingRepository.setSkipPackedIndexCreation(repository.isSkipPackedIndexCreation());
+ // do not duplicate description
+ //stagingRepository.getDescription("")
+ return stagingRepository;
+ }
+
+ private void setBaseConfig(EditableRepository repo, AbstractRepositoryConfiguration cfg) throws RepositoryException {
+
+ URI baseUri = archivaConfiguration.getRepositoryBaseDir().toUri();
+ repo.setBaseUri(baseUri);
+
+ repo.setName(repo.getPrimaryLocale(), cfg.getName());
+ repo.setDescription(repo.getPrimaryLocale(), cfg.getDescription());
+ repo.setLayout(cfg.getLayout());
+ }
+
+ public ArchivaConfiguration getArchivaConfiguration() {
+ return archivaConfiguration;
+ }
+
+ public void setArchivaConfiguration(ArchivaConfiguration archivaConfiguration) {
+ this.archivaConfiguration = archivaConfiguration;
+ }
+
+ @Override
+ public <T> void raise(RepositoryEvent<T> event) {
+ //
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenSystemManager.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenSystemManager.java
new file mode 100644
index 000000000..55b3fb6f8
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenSystemManager.java
@@ -0,0 +1,119 @@
+package org.apache.archiva.repository.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.dependency.tree.maven2.ArchivaRepositoryConnectorFactory;
+import org.apache.maven.repository.internal.DefaultArtifactDescriptorReader;
+import org.apache.maven.repository.internal.DefaultVersionRangeResolver;
+import org.apache.maven.repository.internal.DefaultVersionResolver;
+import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
+import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.collection.DependencySelector;
+import org.eclipse.aether.impl.ArtifactDescriptorReader;
+import org.eclipse.aether.impl.DefaultServiceLocator;
+import org.eclipse.aether.impl.VersionRangeResolver;
+import org.eclipse.aether.impl.VersionResolver;
+import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
+import org.eclipse.aether.repository.LocalRepository;
+import org.eclipse.aether.repository.LocalRepositoryManager;
+import org.eclipse.aether.repository.NoLocalRepositoryManagerException;
+import org.eclipse.aether.spi.connector.RepositoryConnectorFactory;
+import org.eclipse.aether.util.graph.selector.AndDependencySelector;
+import org.eclipse.aether.util.graph.selector.ExclusionDependencySelector;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * Some static utility methods that are used by different classes.
+ */
+@Service("mavenSystemManager")
+public class MavenSystemManager {
+
+ static Logger log = LoggerFactory.getLogger(MavenSystemManager.class);
+
+ private DefaultServiceLocator locator;
+ private RepositorySystem system;
+
+ @PostConstruct
+ private synchronized void init() {
+ locator = newLocator();
+ system = newRepositorySystem(locator);
+
+ }
+
+ /**
+ * Creates a new aether repository system session for the given directory and assigns the
+ * repository to this session.
+ *
+ * @param localRepoDir The repository directory
+ * @return The newly created session object.
+ */
+ public static RepositorySystemSession newRepositorySystemSession(String localRepoDir) {
+ DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession();
+
+ LocalRepository repo = new LocalRepository(localRepoDir);
+
+ DependencySelector depFilter = new AndDependencySelector(new ExclusionDependencySelector());
+ session.setDependencySelector(depFilter);
+ SimpleLocalRepositoryManagerFactory repFactory = new SimpleLocalRepositoryManagerFactory();
+ try {
+ LocalRepositoryManager manager = repFactory.newInstance(session, repo);
+ session.setLocalRepositoryManager(manager);
+ } catch (NoLocalRepositoryManagerException e) {
+ log.error("Could not assign the repository manager to the session: {}", e.getMessage(), e);
+ }
+
+ return session;
+ }
+
+ public RepositorySystem getRepositorySystem() {
+ return system;
+ }
+
+ public DefaultServiceLocator getLocator() {
+ return locator;
+ }
+
+ /**
+ * Finds the
+ *
+ * @return
+ */
+ public static RepositorySystem newRepositorySystem(DefaultServiceLocator locator) {
+ return locator.getService(RepositorySystem.class);
+ }
+
+ public static DefaultServiceLocator newLocator() {
+ DefaultServiceLocator locator = MavenRepositorySystemUtils.newServiceLocator();
+
+ locator.addService(RepositoryConnectorFactory.class,
+ ArchivaRepositoryConnectorFactory.class);// FileRepositoryConnectorFactory.class );
+ locator.addService(VersionResolver.class, DefaultVersionResolver.class);
+ locator.addService(VersionRangeResolver.class, DefaultVersionRangeResolver.class);
+ locator.addService(ArtifactDescriptorReader.class, DefaultArtifactDescriptorReader.class);
+
+ return locator;
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/resources/META-INF/spring-context.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/resources/META-INF/spring-context.xml
new file mode 100644
index 000000000..375a863fe
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/resources/META-INF/spring-context.xml
@@ -0,0 +1,40 @@
+<?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.
+ -->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+ http://www.springframework.org/schema/context
+ http://www.springframework.org/schema/context/spring-context-3.0.xsd"
+ default-lazy-init="true">
+
+ <context:annotation-config/>
+ <context:component-scan base-package="org.apache.archiva.dependency.tree.maven2,org.apache.archiva.metadata.repository.storage.maven2,
+ org.apache.archiva.repository.content.maven2"/>
+
+
+
+ <alias name="repositoryStorage#maven2" alias="repositoryStorage#default"/>
+ <alias name="repositoryStorage#maven2" alias="repositoryStorage#legacy"/>
+
+
+</beans> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/expected-poms/archiva-model-effective.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/expected-poms/archiva-model-effective.pom
new file mode 100644
index 000000000..37d9d112c
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/expected-poms/archiva-model-effective.pom
@@ -0,0 +1,804 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <parent>
+ <artifactId>archiva-base</artifactId>
+ <groupId>org.apache.maven.archiva</groupId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-model</artifactId>
+ <name>Archiva Base :: Model</name>
+ <version>1.0-SNAPSHOT</version>
+ <description>Archiva is an application for managing one or more remote repositories, including
+ administration, artifact handling,
+ browsing and searching.</description>
+ <url>http://maven.apache.org/archiva/archiva-base/archiva-model</url>
+ <issueManagement>
+ <system>jira</system>
+ <url>http://jira.codehaus.org/browse/MRM</url>
+ </issueManagement>
+ <ciManagement>
+ <system>continuum</system>
+ <url>http://maven.zones.apache.org:8080/continuum</url>
+ <notifiers>
+ <notifier>
+ <configuration>
+ <address>notifications@maven.apache.org</address>
+ </configuration>
+ </notifier>
+ </notifiers>
+ </ciManagement>
+ <inceptionYear>2002</inceptionYear>
+ <mailingLists>
+ <mailingList>
+ <name>Maven Archiva User List</name>
+ <subscribe>archiva-users-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>archiva-users-unsubscribe@maven.apache.org</unsubscribe>
+ <post>archiva-users@maven.apache.org</post>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-archiva-users</archive>
+ </mailingList>
+ <mailingList>
+ <name>Maven Archiva Developer List</name>
+ <subscribe>archiva-dev-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>archiva-dev-unsubscribe@maven.apache.org</unsubscribe>
+ <post>archiva-dev@maven.apache.org</post>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-archiva-dev</archive>
+ </mailingList>
+ <mailingList>
+ <name>Maven Archiva Commits List</name>
+ <subscribe>archiva-commits-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>archiva-commits-unsubscribe@maven.apache.org</unsubscribe>
+ <post>archiva-commits@maven.apache.org</post>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-archiva-commits</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>
+ <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/archiva/trunk/archiva-base/archiva-model</connection>
+ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/archiva/trunk/archiva-base/archiva-model</developerConnection>
+ <url>http://svn.apache.org/viewcvs.cgi/maven/archiva/trunk/archiva-base/archiva-model</url>
+ </scm>
+ <organization>
+ <name>Apache Software Foundation</name>
+ <url>http://www.apache.org/</url>
+ </organization>
+ <build>
+ <sourceDirectory>/home/joakim/code/maven/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/java</sourceDirectory>
+ <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
+ <testSourceDirectory>/home/joakim/code/maven/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/test/java</testSourceDirectory>
+ <outputDirectory>/home/joakim/code/maven/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/target/classes</outputDirectory>
+ <testOutputDirectory>/home/joakim/code/maven/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/target/test-classes</testOutputDirectory>
+ <resources>
+ <resource>
+ <directory>/home/joakim/code/maven/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/resources</directory>
+ </resource>
+ </resources>
+ <testResources>
+ <testResource>
+ <directory>/home/joakim/code/maven/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/test/resources</directory>
+ </testResource>
+ </testResources>
+ <directory>/home/joakim/code/maven/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/target</directory>
+ <finalName>archiva-model-1.0-SNAPSHOT</finalName>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-idea-plugin</artifactId>
+ <configuration>
+ <jdkLevel>1.4</jdkLevel>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-release-plugin</artifactId>
+ <configuration>
+ <tagBase>https://svn.apache.org/repos/asf/maven/archiva/tags</tagBase>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-maven-plugin</artifactId>
+ <version>1.3.3</version>
+ <executions>
+ <execution>
+ <id>generate</id>
+ <goals>
+ <goal>descriptor</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.4</source>
+ <target>1.4</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <version>1.0-alpha-15-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <id>archiva-base</id>
+ <goals>
+ <goal>java</goal>
+ <goal>xsd</goal>
+ <goal>jpox-jdo-mapping</goal>
+ <goal>jpox-metadata-class</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <version>1.0.0</version>
+ <packageWithVersion>false</packageWithVersion>
+ <model>src/main/mdo/archiva-base.xml</model>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>jpox-maven-plugin</artifactId>
+ <version>1.1.6</version>
+ <executions>
+ <execution>
+ <id>create-ddl</id>
+ <phase>generate-test-resources</phase>
+ <goals>
+ <goal>schema-create</goal>
+ </goals>
+ <configuration>
+ <outputFile>/home/joakim/code/maven/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/target/classes/org/apache/maven/archiva/model/schema.ddl</outputFile>
+ <toolProperties>
+ <property>
+ <name>javax.jdo.option.ConnectionDriverName</name>
+ <value>org.apache.derby.jdbc.EmbeddedDriver</value>
+ </property>
+ <property>
+ <name>javax.jdo.option.ConnectionURL</name>
+ <value>jdbc:derby:target/jdo-schema-create;create=true</value>
+ </property>
+ <property>
+ <name>javax.jdo.option.ConnectionUserName</name>
+ <value>sa</value>
+ </property>
+ <property>
+ <name>javax.jdo.option.ConnectionPassword</name>
+ <value></value>
+ </property>
+ <property>
+ <name>log4j.configuration</name>
+ <value>/home/joakim/code/maven/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/test/resources/log4j.xml</value>
+ </property>
+ <property>
+ <name>org.jpox.autoCreateTables</name>
+ <value>true</value>
+ </property>
+ </toolProperties>
+ </configuration>
+ </execution>
+ <execution>
+ <id>enhance</id>
+ <goals>
+ <goal>enhance</goal>
+ </goals>
+ </execution>
+ </executions>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <version>10.2.1.6</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>cobertura-maven-plugin</artifactId>
+ <configuration>
+ <instrumentation>
+ <excludes>
+ <exclude>org/apache/maven/archiva/reporting/model/**</exclude>
+ </excludes>
+ </instrumentation>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-help-plugin</artifactId>
+ <version>2.0.1</version>
+ </plugin>
+ </plugins>
+ </build>
+ <repositories>
+ <repository>
+ <releases />
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ <id>codehaus.org</id>
+ <url>http://repository.codehaus.org</url>
+ </repository>
+ <repository>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ <snapshots />
+ <id>snapshots.codehaus.org</id>
+ <url>http://snapshots.repository.codehaus.org</url>
+ </repository>
+ <repository>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ <id>apache.snapshots</id>
+ <name>Apache Snapshot Repository</name>
+ <url>http://people.apache.org/repo/m2-snapshot-repository</url>
+ </repository>
+ <repository>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ <id>central</id>
+ <name>Maven Repository Switchboard</name>
+ <url>http://repo1.maven.org/maven2</url>
+ </repository>
+ </repositories>
+ <pluginRepositories>
+ <pluginRepository>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ <snapshots />
+ <id>snapshots.codehaus.org</id>
+ <url>http://snapshots.repository.codehaus.org</url>
+ </pluginRepository>
+ <pluginRepository>
+ <releases>
+ <updatePolicy>never</updatePolicy>
+ </releases>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ <id>central</id>
+ <name>Maven Plugin Repository</name>
+ <url>http://repo1.maven.org/maven2</url>
+ </pluginRepository>
+ </pluginRepositories>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-common</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-test-A</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-test-B</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>1.4</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.jdo</groupId>
+ <artifactId>jdo2-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ <version>1.0-alpha-18</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>2.2</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>1.2</version>
+ </dependency>
+ </dependencies>
+ <reporting>
+ <outputDirectory>target/site</outputDirectory>
+ <plugins>
+ <plugin>
+ <artifactId>maven-checkstyle-plugin</artifactId>
+ <configuration>
+ <configLocation>config/maven_checks.xml</configLocation>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <source>1.4</source>
+ <aggregate>true</aggregate>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jxr-plugin</artifactId>
+ <configuration>
+ <aggregate>true</aggregate>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-pmd-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <artifactId>maven-surefire-report-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>changelog-maven-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>
+ </plugins>
+ </reporting>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-app-configuration-model</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-app-configuration-web</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ <version>1.0-alpha-18</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-api</artifactId>
+ <version>1.0-alpha-18</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>1.4</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <version>1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-repository-metadata</artifactId>
+ <version>2.0.5</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ <version>2.0.5</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact</artifactId>
+ <version>2.0.5</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact-manager</artifactId>
+ <version>2.0.5</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project</artifactId>
+ <version>2.0.5</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-model-converter</artifactId>
+ <version>2.0.5-SNAPSHOT</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-ssh</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>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-http-lightweight</artifactId>
+ <version>1.0-beta-2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-common</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-core</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-reports-standard</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-model</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-database</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-consumer-api</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-model</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-database</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-discoverer</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-repository-layer</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-indexer</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-proxy</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-applet</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-security</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-configuration</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-converter</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-utils</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-webapp</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-digest</artifactId>
+ <version>1.1-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-rbac-profile</artifactId>
+ <version>1.0-alpha-11-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-system</artifactId>
+ <version>1.0-alpha-11-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-system</artifactId>
+ <version>1.0-alpha-11-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-ui-web</artifactId>
+ <version>1.0-alpha-11-SNAPSHOT</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-ui-web-integration</artifactId>
+ <version>1.0-alpha-11-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-ui-web-taglib</artifactId>
+ <version>1.0-alpha-11-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-authentication-provider-user-manager</artifactId>
+ <version>1.0-alpha-11-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-authentication-provider-keystore</artifactId>
+ <version>1.0-alpha-11-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-user-management-api</artifactId>
+ <version>1.0-alpha-11-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-user-management-provider-jdo</artifactId>
+ <version>1.0-alpha-11-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-authorization-rbac-store-cached</artifactId>
+ <version>1.0-alpha-11-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-authorization-rbac-store-jdo</artifactId>
+ <version>1.0-alpha-11-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-authorization-api</artifactId>
+ <version>1.0-alpha-11-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-authorization-rbac-authorizer</artifactId>
+ <version>1.0-alpha-11-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-keys-jdo</artifactId>
+ <version>1.0-alpha-11-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>2.2</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <version>10.1.3.1</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <distributionManagement>
+ <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>
+ <site>
+ <id>apache.website</id>
+ <url>scpexe://people.apache.org/www/maven.apache.org/archiva/archiva-base/archiva-model</url>
+ </site>
+ </distributionManagement>
+ <properties>
+ <plexus-security.version>1.0-alpha-11-SNAPSHOT</plexus-security.version>
+ <wagon.version>1.0-beta-2</wagon.version>
+ <maven.version>2.0.5</maven.version>
+ <archiva.version>1.0-SNAPSHOT</archiva.version>
+ </properties>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/expected-poms/cocoon-1.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/expected-poms/cocoon-1.pom
new file mode 100644
index 000000000..dba957e59
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/expected-poms/cocoon-1.pom
@@ -0,0 +1,284 @@
+<?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>
+ <groupId>org.apache</groupId>
+ <artifactId>apache</artifactId>
+ <version>1</version>
+ </parent>
+ <groupId>org.apache.cocoon</groupId>
+ <artifactId>cocoon</artifactId>
+ <version>1</version>
+ <packaging>pom</packaging>
+ <name>Apache Cocoon</name>
+ <url>http://cocoon.apache.org</url>
+ <organization>
+ <name>The Apache Software Foundation</name>
+ <url>http://www.apache.org/</url>
+ </organization>
+ <issueManagement>
+ <system>jira</system>
+ <url>https://issues.apache.org/jira/browse/COCOON</url>
+ </issueManagement>
+ <ciManagement>
+ <system>continuum</system>
+ <url>http://cocoon.zones.apache.org:12000/continuum/servlet/continuum</url>
+ </ciManagement>
+ <mailingLists>
+ <mailingList>
+ <name>Cocoon User List</name>
+ <post>users@cocoon.apache.org</post>
+ <subscribe>users-subscribe@cocoon.apache.org</subscribe>
+ <unsubscribe>users-unsubscribe@cocoon.apache.org</unsubscribe>
+ <archive>http://mail-archives.apache.org/mod_mbox/cocoon-users</archive>
+ <otherArchives>
+ <otherArchive>http://www.mail-archive.com/users@cocoon.apache.org/</otherArchive>
+ <otherArchive>http://marc.theaimsgroup.com/?l=xml-cocoon-user</otherArchive>
+ <otherArchive>http://news.gmane.org/gmane.text.xml.cocoon.user</otherArchive>
+ </otherArchives>
+ </mailingList>
+ <mailingList>
+ <name>Cocoon Developer List</name>
+ <post>dev@cocoon.apache.org</post>
+ <subscribe>dev-subscribe@cocoon.apache.org</subscribe>
+ <unsubscribe>dev-unsubscribe@cocoon.apache.org</unsubscribe>
+ <archive>http://mail-archives.apache.org/mod_mbox/cocoon-dev</archive>
+ <otherArchives>
+ <otherArchive>http://www.mail-archive.com/dev@cocoon.apache.org/</otherArchive>
+ <otherArchive>http://marc.theaimsgroup.com/?l=xml-cocoon-dev</otherArchive>
+ <otherArchive>http://news.gmane.org/gmane.text.xml.cocoon.dev</otherArchive>
+ </otherArchives>
+ </mailingList>
+ <mailingList>
+ <name>Cocoon Documentation List</name>
+ <post>docs@cocoon.apache.org</post>
+ <subscribe>docs-subscribe@cocoon.apache.org</subscribe>
+ <unsubscribe>docs-unsubscribe@cocoon.apache.org</unsubscribe>
+ <archive>http://mail-archives.apache.org/mod_mbox/cocoon-docs</archive>
+ <otherArchives>
+ <otherArchive>http://www.mail-archive.com/dev@cocoon.apache.org/</otherArchive>
+ <otherArchive>http://marc.theaimsgroup.com/?l=xml-cocoon-docs</otherArchive>
+ <otherArchive>http://news.gmane.org/gmane.text.xml.cocoon.docs</otherArchive>
+ </otherArchives>
+ </mailingList>
+ <mailingList>
+ <name>Cocoon Subversion Repository List</name>
+ <subscribe>cvs-subscribe@cocoon.apache.org</subscribe>
+ <unsubscribe>cvs-unsubscribe@cocoon.apache.org</unsubscribe>
+ <archive>http://mail-archives.apache.org/mod_mbox/cocoon-cvs</archive>
+ <otherArchives>
+ <otherArchive>http://www.mail-archive.com/cvs@cocoon.apache.org/</otherArchive>
+ <otherArchive>http://marc.theaimsgroup.com/?l=xml-cocoon-cvs</otherArchive>
+ <otherArchive>http://news.gmane.org/gmane.text.xml.cocoon.cvs</otherArchive>
+ </otherArchives>
+ </mailingList>
+ </mailingLists>
+ <developers>
+ <developer>
+ <id>crossley</id>
+ <name>David Crossley</name>
+ <email>crossley@apache.org</email>
+ <organization>ASF</organization>
+ <organizationUrl>http://www.apache.org/</organizationUrl>
+ <timezone>+10</timezone>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>bdelacretaz</id>
+ <name>Bertrand Delacretaz</name>
+ <email>bdelacretaz@apache.org</email>
+ <organization>ASF</organization>
+ <organizationUrl>http://www.apache.org</organizationUrl>
+ <timezone>+1</timezone>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>danielf</id>
+ <name>Daniel Fagerstrom</name>
+ <email>danielf@apache.org</email>
+ <organization>ASF</organization>
+ <organizationUrl>http://www.apache.org</organizationUrl>
+ <timezone>+1</timezone>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>antonio</id>
+ <name>Antonio Gallardo</name>
+ <email>antonio@apache.org</email>
+ <organization>ASF</organization>
+ <organizationUrl>http://www.apache.org</organizationUrl>
+ <timezone>-6</timezone>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>lgawron</id>
+ <name>Leszek Gawron</name>
+ <email>lgawron@apache.org</email>
+ <organization>ASF</organization>
+ <organizationUrl>http://www.apache.org</organizationUrl>
+ <timezone>+1</timezone>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>joerg</id>
+ <name>Jorg Heinicke</name>
+ <email>joerg@apache.org</email>
+ <organization>ASF</organization>
+ <organizationUrl>http://www.apache.org</organizationUrl>
+ <timezone>+1</timezone>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>jheymans</id>
+ <name>Jorg Heymans</name>
+ <email>jheymans@apache.org</email>
+ <organization>ASF</organization>
+ <organizationUrl>http://www.apache.org</organizationUrl>
+ <timezone>+1</timezone>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>anathaniel</id>
+ <name>Alfred Nathaniel</name>
+ <email>anathaniel@apache.org</email>
+ <organization>ASF</organization>
+ <organizationUrl>http://www.apache.org</organizationUrl>
+ <timezone>+1</timezone>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>giacomo</id>
+ <name>Giacomo Pati</name>
+ <email>giacomo@apache.org</email>
+ <organization>ASF</organization>
+ <organizationUrl>http://www.apache.org</organizationUrl>
+ <timezone>+1</timezone>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>reinhard</id>
+ <name>Reinhard Poetz</name>
+ <email>reinhard@apache.org</email>
+ <organization>ASF</organization>
+ <organizationUrl>http://www.apache.org</organizationUrl>
+ <timezone>+1</timezone>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>jbq</id>
+ <name>Jean-Baptiste Quenot</name>
+ <email>jbq@apache.org</email>
+ <organization>ASF</organization>
+ <organizationUrl>http://www.apache.org</organizationUrl>
+ <timezone>+1</timezone>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>gianugo</id>
+ <name>Gianugo Rabellino</name>
+ <email>gianugo@apache.org</email>
+ <organization>ASF</organization>
+ <organizationUrl>http://www.apache.org</organizationUrl>
+ <timezone>+1</timezone>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>cziegeler</id>
+ <name>Carsten Ziegeler</name>
+ <email>cziegeler@apache.org</email>
+ <organization>ASF</organization>
+ <organizationUrl>http://www.apache.org</organizationUrl>
+ <timezone>+1</timezone>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>vgritsenko</id>
+ <name>Vadim Gritsenko</name>
+ <email>vgritsenko@apache.org</email>
+ <organization>ASF</organization>
+ <organizationUrl>http://www.apache.org</organizationUrl>
+ <timezone>-5</timezone>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ </developer>
+ </developers>
+ <licenses>
+ <license>
+ <name>Apache License, Version 2.0</name>
+ <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+ </license>
+ </licenses>
+ <repositories>
+ <repository>
+ <id>central</id>
+ <name>Maven central repository</name>
+ <url>http://ibiblio.org/maven2</url>
+ </repository>
+ <repository>
+ <id>apache.snapshot</id>
+ <name>Apache Snapshot Repository</name>
+ <url>http://svn.apache.org/maven-snapshot-repository</url>
+ </repository>
+ <repository>
+ <id>apache-cvs</id>
+ <name>Apache Maven Repository</name>
+ <url>http://svn.apache.org/repository</url>
+ <layout>legacy</layout>
+ </repository>
+ </repositories>
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-project-info-reports-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </reporting>
+ <scm>
+ <connection>scm:svn:https://svn.apache.org/repos/asf/cocoon/tags/cocoon-1</connection>
+ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/cocoon/tags/cocoon-1</developerConnection>
+ <url>https://svn.apache.org/repos/asf/cocoon/tags/cocoon-1</url>
+ </scm>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-release-plugin</artifactId>
+ </plugin>
+ </plugins>
+ <extensions>
+ <extension>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-ssh-external</artifactId>
+ <version>1.0-alpha-6</version>
+ </extension>
+ </extensions>
+ </build>
+</project> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/expected-poms/maven-parent-4.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/expected-poms/maven-parent-4.pom
new file mode 100644
index 000000000..c0ba6ed00
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/expected-poms/maven-parent-4.pom
@@ -0,0 +1,227 @@
+<?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>
+ <groupId>org.apache</groupId>
+ <artifactId>apache</artifactId>
+ <version>3</version>
+ </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>
+ </ciManagement>
+ <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>
+ <timezone>-5</timezone>
+ <roles>
+ <role>PMC Chair</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>brett</id>
+ <name>Brett Porter</name>
+ <email>brett@apache.org</email>
+ <organization>ASF</organization>
+ <timezone>+10</timezone>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>evenisse</id>
+ <name>Emmanuel Venisse</name>
+ <email>evenisse@apache.org</email>
+ <organization>ASF</organization>
+ <timezone>+1</timezone>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ </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>
+ <timezone>+1</timezone>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>vmassol</id>
+ <name>Vincent Massol</name>
+ <email>vmassol@apache.org</email>
+ <organization>ASF</organization>
+ <timezone>+1</timezone>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>fgiust</id>
+ <name>Fabrizio Giustina</name>
+ <email>fgiust@apache.org</email>
+ <organization>openmind</organization>
+ <timezone>+1</timezone>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>epunzalan</id>
+ <name>Edwin Punzalan</name>
+ <email>epunzalan@mergere.com</email>
+ <organization>Mergere</organization>
+ <timezone>+8</timezone>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>mperham</id>
+ <name>Mike Perham</name>
+ <email>mperham@gmail.com</email>
+ <organization>IBM</organization>
+ <timezone>-6</timezone>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>jdcasey</id>
+ <name>John Casey</name>
+ <email>jdcasey@apache.org</email>
+ <organization>ASF</organization>
+ <timezone>-5</timezone>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>trygvis</id>
+ <name>Trygve Laugstol</name>
+ <email>trygvis@apache.org</email>
+ <organization>ASF</organization>
+ <timezone>+1</timezone>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>vsiveton</id>
+ <name>Vincent Siveton</name>
+ <email>vsiveton@apache.org</email>
+ <organization>ASF</organization>
+ <timezone>-5</timezone>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>carlos</id>
+ <name>Carlos Sanchez</name>
+ <email>carlos@apache.org</email>
+ <organization>ASF</organization>
+ <timezone>+1</timezone>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>dennisl</id>
+ <name>Dennis Lundberg</name>
+ <email>dennisl@apache.org</email>
+ <organization>ASF</organization>
+ <timezone>+1</timezone>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ </developer>
+ </developers>
+ <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>
+ </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>
+ </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/archiva-modules/archiva-maven/archiva-maven-repository/src/test/expected-poms/model-write-400-simple.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/expected-poms/model-write-400-simple.pom
new file mode 100644
index 000000000..213765a92
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/expected-poms/model-write-400-simple.pom
@@ -0,0 +1,9 @@
+<?xml version="1.0" ?>
+
+<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.archiva.test</groupId>
+ <artifactId>simple-model-write</artifactId>
+ <version>1.0</version>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/expected-poms/test-project-model-effective.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/expected-poms/test-project-model-effective.pom
new file mode 100644
index 000000000..3057af98a
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/expected-poms/test-project-model-effective.pom
@@ -0,0 +1,243 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- ====================================================================== -->
+<!-- -->
+<!-- Generated by Maven Help Plugin on 9/17/08 5:36 PM -->
+<!-- See: http://maven.apache.org/plugins/maven-help-plugin/ -->
+<!-- -->
+<!-- ====================================================================== -->
+
+<!-- ====================================================================== -->
+<!-- -->
+<!-- Effective POM for project -->
+<!-- 'test-project:test-project-endpoint-ejb:ejb:2.4.4' -->
+<!-- -->
+<!-- ====================================================================== -->
+
+<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>test-project-endpoint-pom</artifactId>
+ <groupId>test-project</groupId>
+ <version>2.4.4</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>test-project</groupId>
+ <artifactId>test-project-endpoint-ejb</artifactId>
+ <packaging>ejb</packaging>
+ <name>Test Project Endpoint EJB</name>
+ <version>2.4.4</version>
+ <inceptionYear>2002</inceptionYear>
+ <organization>
+ <name>Company</name>
+ <url>http://www.company.com/</url>
+ </organization>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>test-project</groupId>
+ <artifactId>test-project-common</artifactId>
+ <version>2.4.4</version>
+ </dependency>
+ <dependency>
+ <groupId>test-project</groupId>
+ <artifactId>test-project-api</artifactId>
+ <version>2.4.4</version>
+ </dependency>
+ <dependency>
+ <groupId>test-project</groupId>
+ <artifactId>test-project-common</artifactId>
+ <version>2.4.4</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-id</groupId>
+ <artifactId>commons-id</artifactId>
+ <version>0.1-dev</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-discovery</groupId>
+ <artifactId>commons-discovery</artifactId>
+ <version>0.2</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>1.0.4</version>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>1.2.8</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.jms</groupId>
+ <artifactId>jms</artifactId>
+ <version>1.0.2</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.activation</groupId>
+ <artifactId>activation</artifactId>
+ <version>1.0.2</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.mail</groupId>
+ <artifactId>mail</artifactId>
+ <version>1.4</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>xml-apis</groupId>
+ <artifactId>xml-apis</artifactId>
+ <version>2.0.2</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.management</groupId>
+ <artifactId>jmxri</artifactId>
+ <version>1.2.1</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <version>2.4</version>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>javax.activation</groupId>
+ <artifactId>activation</artifactId>
+ <version>1.0.2</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.jms</groupId>
+ <artifactId>jms</artifactId>
+ <version>1.0.2</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.ejb</groupId>
+ <artifactId>ejb</artifactId>
+ <version>2.0</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <version>2.4</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.mail</groupId>
+ <artifactId>mail</artifactId>
+ <version>1.4</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>xml-apis</groupId>
+ <artifactId>xml-apis</artifactId>
+ <version>2.0.2</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>1.0.4</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ <version>3.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring</artifactId>
+ <version>2.0.7</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-mock</artifactId>
+ <version>2.0.7</version>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <artifactId>spring-jdbc</artifactId>
+ <groupId>org.springframework</groupId>
+ </exclusion>
+ <exclusion>
+ <artifactId>spring-web</artifactId>
+ <groupId>org.springframework</groupId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>1.2.8</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-discovery</groupId>
+ <artifactId>commons-discovery</artifactId>
+ <version>0.2</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-id</groupId>
+ <artifactId>commons-id</artifactId>
+ <version>0.1-dev</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.castor</groupId>
+ <artifactId>castor</artifactId>
+ <version>1.0.5-xml</version>
+ </dependency>
+ <dependency>
+ <groupId>xerces</groupId>
+ <artifactId>xerces</artifactId>
+ <version>2.4.0</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-httpclient</groupId>
+ <artifactId>commons-httpclient</artifactId>
+ <version>3.1</version>
+ </dependency>
+ <dependency>
+ <groupId>stax</groupId>
+ <artifactId>stax-api</artifactId>
+ <version>1.0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.woodstox</groupId>
+ <artifactId>wstx-asl</artifactId>
+ <version>3.2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>com.thoughtworks.xstream</groupId>
+ <artifactId>xstream</artifactId>
+ <version>1.2.2</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.management</groupId>
+ <artifactId>jmxri</artifactId>
+ <version>1.2.1</version>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+</project> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/configuration/MockRepoAdmin.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/configuration/MockRepoAdmin.java
new file mode 100644
index 000000000..74af31509
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/configuration/MockRepoAdmin.java
@@ -0,0 +1,328 @@
+package org.apache.archiva.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.archiva.admin.model.AuditInformation;
+import org.apache.archiva.admin.model.RepositoryAdminException;
+import org.apache.archiva.admin.model.beans.ManagedRepository;
+import org.apache.archiva.admin.model.beans.NetworkProxy;
+import org.apache.archiva.admin.model.beans.ProxyConnector;
+import org.apache.archiva.admin.model.beans.ProxyConnectorRule;
+import org.apache.archiva.admin.model.beans.RemoteRepository;
+import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
+import org.apache.archiva.admin.model.networkproxy.NetworkProxyAdmin;
+import org.apache.archiva.admin.model.proxyconnector.ProxyConnectorAdmin;
+import org.apache.archiva.admin.model.proxyconnector.ProxyConnectorOrderComparator;
+import org.apache.archiva.admin.model.remote.RemoteRepositoryAdmin;
+import org.apache.commons.lang.StringUtils;
+import org.apache.maven.index.context.IndexingContext;
+import org.modelmapper.ModelMapper;
+import org.springframework.stereotype.Service;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+/**
+ * @author Olivier Lamy
+ */
+@Service
+public class MockRepoAdmin
+ implements RemoteRepositoryAdmin, ManagedRepositoryAdmin, ProxyConnectorAdmin, NetworkProxyAdmin
+{
+ @Inject
+ @Named ( "archivaConfiguration#test" )
+ private ArchivaConfiguration archivaConfiguration;
+
+ @Override
+ public List<RemoteRepository> getRemoteRepositories()
+ throws RepositoryAdminException
+ {
+ List<RemoteRepository> remoteRepositories =
+ new ArrayList<>( archivaConfiguration.getConfiguration().getRemoteRepositories().size() );
+ for ( RemoteRepositoryConfiguration repositoryConfiguration : archivaConfiguration.getConfiguration().getRemoteRepositories() )
+ {
+ RemoteRepository remoteRepository =
+ new RemoteRepository( Locale.getDefault(), repositoryConfiguration.getId(), repositoryConfiguration.getName(),
+ repositoryConfiguration.getUrl(), repositoryConfiguration.getLayout(),
+ repositoryConfiguration.getUsername(), repositoryConfiguration.getPassword(),
+ repositoryConfiguration.getTimeout() );
+ remoteRepository.setDownloadRemoteIndex( repositoryConfiguration.isDownloadRemoteIndex() );
+ remoteRepository.setRemoteIndexUrl( repositoryConfiguration.getRemoteIndexUrl() );
+ remoteRepository.setCronExpression( repositoryConfiguration.getRefreshCronExpression() );
+ remoteRepository.setIndexDirectory( repositoryConfiguration.getIndexDir() );
+ remoteRepository.setRemoteDownloadNetworkProxyId(
+ repositoryConfiguration.getRemoteDownloadNetworkProxyId() );
+ remoteRepository.setRemoteDownloadTimeout( repositoryConfiguration.getRemoteDownloadTimeout() );
+ remoteRepository.setDownloadRemoteIndexOnStartup(
+ repositoryConfiguration.isDownloadRemoteIndexOnStartup() );
+ remoteRepositories.add( remoteRepository );
+ }
+ return remoteRepositories;
+ }
+
+ @Override
+ public RemoteRepository getRemoteRepository( String repositoryId )
+ throws RepositoryAdminException
+ {
+ for ( RemoteRepository remoteRepository : getRemoteRepositories() )
+ {
+ if ( StringUtils.equals( repositoryId, remoteRepository.getId() ) )
+ {
+ return remoteRepository;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public Boolean deleteRemoteRepository( String repositoryId, AuditInformation auditInformation )
+ throws RepositoryAdminException
+ {
+ return null; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+ @Override
+ public Boolean addRemoteRepository( RemoteRepository remoteRepository, AuditInformation auditInformation )
+ throws RepositoryAdminException
+ {
+ return null; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+ @Override
+ public Boolean updateRemoteRepository( RemoteRepository remoteRepository, AuditInformation auditInformation )
+ throws RepositoryAdminException
+ {
+ return null; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+ @Override
+ public Map<String, RemoteRepository> getRemoteRepositoriesAsMap()
+ throws RepositoryAdminException
+ {
+ return null; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+ @Override
+ public IndexingContext createIndexContext( RemoteRepository repository )
+ throws RepositoryAdminException
+ {
+ return null; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+ @Override
+ public List<ManagedRepository> getManagedRepositories()
+ throws RepositoryAdminException
+ {
+ return null; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+ @Override
+ public Map<String, ManagedRepository> getManagedRepositoriesAsMap()
+ throws RepositoryAdminException
+ {
+ return null; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+ @Override
+ public ManagedRepository getManagedRepository( String repositoryId )
+ throws RepositoryAdminException
+ {
+ for ( ManagedRepositoryConfiguration repoConfig : archivaConfiguration.getConfiguration().getManagedRepositories() )
+ {
+ if ( StringUtils.equals( repositoryId, repoConfig.getId() ) )
+ {
+ return new ManagedRepository( Locale.getDefault(), repoConfig.getId(), repoConfig.getName(), repoConfig.getLocation(),
+ repoConfig.getLayout(), repoConfig.isSnapshots(), repoConfig.isReleases(),
+ repoConfig.isBlockRedeployments(), repoConfig.getRefreshCronExpression(),
+ repoConfig.getIndexDir(), repoConfig.isScanned(),
+ repoConfig.getRetentionPeriod(), repoConfig.getRetentionCount(),
+ repoConfig.isDeleteReleasedSnapshots(), false );
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public Boolean deleteManagedRepository( String repositoryId, AuditInformation auditInformation,
+ boolean deleteContent )
+ throws RepositoryAdminException
+ {
+ return null; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+ @Override
+ public Boolean addManagedRepository( ManagedRepository managedRepository, boolean needStageRepo,
+ AuditInformation auditInformation )
+ throws RepositoryAdminException
+ {
+ return null; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+ @Override
+ public Boolean updateManagedRepository( ManagedRepository managedRepository, boolean needStageRepo,
+ AuditInformation auditInformation, boolean resetStats )
+ throws RepositoryAdminException
+ {
+ return null; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+
+ @Override
+ public List<ProxyConnector> getProxyConnectors()
+ throws RepositoryAdminException
+ {
+ List<ProxyConnectorConfiguration> proxyConnectorConfigurations =
+ archivaConfiguration.getConfiguration().getProxyConnectors();
+ List<ProxyConnector> proxyConnectors = new ArrayList<>( proxyConnectorConfigurations.size() );
+ for ( ProxyConnectorConfiguration configuration : proxyConnectorConfigurations )
+ {
+ proxyConnectors.add( getProxyConnector( configuration ) );
+ }
+ Collections.sort( proxyConnectors, ProxyConnectorOrderComparator.getInstance() );
+ return proxyConnectors;
+ }
+
+ @Override
+ public ProxyConnector getProxyConnector( String sourceRepoId, String targetRepoId )
+ throws RepositoryAdminException
+ {
+ return null; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+ @Override
+ public Boolean addProxyConnector( ProxyConnector proxyConnector, AuditInformation auditInformation )
+ throws RepositoryAdminException
+ {
+ return null; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+ @Override
+ public Boolean deleteProxyConnector( ProxyConnector proxyConnector, AuditInformation auditInformation )
+ throws RepositoryAdminException
+ {
+ return null; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+ @Override
+ public Boolean updateProxyConnector( ProxyConnector proxyConnector, AuditInformation auditInformation )
+ throws RepositoryAdminException
+ {
+ return null;
+ }
+
+ @Override
+ public Map<String, List<ProxyConnector>> getProxyConnectorAsMap()
+ throws RepositoryAdminException
+ {
+ Map<String, List<ProxyConnector>> proxyConnectorMap = new HashMap<>();
+
+ Iterator<ProxyConnector> it = getProxyConnectors().iterator();
+ while ( it.hasNext() )
+ {
+ ProxyConnector proxyConfig = it.next();
+ String key = proxyConfig.getSourceRepoId();
+
+ List<ProxyConnector> connectors = proxyConnectorMap.get( key );
+ if ( connectors == null )
+ {
+ connectors = new ArrayList<>( 1 );
+ proxyConnectorMap.put( key, connectors );
+ }
+
+ connectors.add( proxyConfig );
+
+ Collections.sort( connectors, ProxyConnectorOrderComparator.getInstance() );
+ }
+
+ return proxyConnectorMap;
+ }
+
+ @Override
+ public List<NetworkProxy> getNetworkProxies()
+ throws RepositoryAdminException
+ {
+ return null; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+ @Override
+ public NetworkProxy getNetworkProxy( String networkProxyId )
+ throws RepositoryAdminException
+ {
+ return null; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+ @Override
+ public void addNetworkProxy( NetworkProxy networkProxy, AuditInformation auditInformation )
+ throws RepositoryAdminException
+ {
+ //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+ @Override
+ public void updateNetworkProxy( NetworkProxy networkProxy, AuditInformation auditInformation )
+ throws RepositoryAdminException
+ {
+ //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+ @Override
+ public void deleteNetworkProxy( String networkProxyId, AuditInformation auditInformation )
+ throws RepositoryAdminException
+ {
+ //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+ protected ProxyConnector getProxyConnector( ProxyConnectorConfiguration proxyConnectorConfiguration )
+ {
+ return proxyConnectorConfiguration == null
+ ? null
+ : new ModelMapper().map( proxyConnectorConfiguration, ProxyConnector.class );
+ }
+
+ public List<ProxyConnectorRule> getProxyConnectorRules()
+ throws RepositoryAdminException
+ {
+ return null;
+ }
+
+ public void addProxyConnectorRule( ProxyConnectorRule proxyConnectorRule )
+ throws RepositoryAdminException
+ {
+
+ }
+
+ public void deleteProxyConnectorRule( ProxyConnectorRule proxyConnectorRule )
+ throws RepositoryAdminException
+ {
+
+ }
+
+ public void updateProxyConnectorRule( ProxyConnectorRule proxyConnectorRule )
+ throws RepositoryAdminException
+ {
+
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/configuration/TestConfiguration.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/configuration/TestConfiguration.java
new file mode 100644
index 000000000..ac24a3462
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/configuration/TestConfiguration.java
@@ -0,0 +1,127 @@
+package org.apache.archiva.configuration;
+
+import org.apache.archiva.redback.components.registry.RegistryException;
+import org.apache.archiva.redback.components.registry.RegistryListener;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.stereotype.Service;
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+import java.util.Locale;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+@Service("archivaConfiguration#test")
+public class TestConfiguration
+ implements ArchivaConfiguration
+{
+ private Configuration configuration;
+
+ @Override
+ public Configuration getConfiguration()
+ {
+ return configuration;
+ }
+
+ @Override
+ public void save( Configuration configuration )
+ throws RegistryException, IndeterminateConfigurationException
+ {
+ this.configuration = configuration;
+ }
+
+ @Override
+ public boolean isDefaulted()
+ {
+ return false;
+ }
+
+ @Override
+ public void addListener( ConfigurationListener listener )
+ {
+ // no op
+ }
+
+ @Override
+ public void removeListener( ConfigurationListener listener )
+ {
+ // no op
+ }
+
+ @Override
+ public void addChangeListener( RegistryListener listener )
+ {
+ // no op
+ }
+
+ @Override
+ public void removeChangeListener( RegistryListener listener )
+ {
+ // no op
+ }
+
+ @Override
+ public void reload()
+ {
+ // no op
+ }
+
+ @Override
+ public Locale getDefaultLocale( )
+ {
+ return Locale.getDefault();
+ }
+
+ @Override
+ public List<Locale.LanguageRange> getLanguagePriorities( )
+ {
+ return Locale.LanguageRange.parse("en,fr,de");
+ }
+
+ @Override
+ public Path getAppServerBaseDir() {
+ if (System.getProperties().containsKey("appserver.base")) {
+ return Paths.get(System.getProperty("appserver.base"));
+ } else {
+ return Paths.get("");
+ }
+ }
+
+ @Override
+ public Path getRepositoryBaseDir() {
+ return getDataDirectory().resolve("");
+ }
+
+ @Override
+ public Path getRemoteRepositoryBaseDir() {
+ return getDataDirectory().resolve("remotes");
+ }
+
+ @Override
+ public Path getDataDirectory() {
+ if (configuration!=null && configuration.getArchivaRuntimeConfiguration()!=null &&
+ StringUtils.isNotEmpty(configuration.getArchivaRuntimeConfiguration().getDataDirectory())) {
+ return Paths.get(configuration.getArchivaRuntimeConfiguration().getDataDirectory());
+ } else {
+ return getAppServerBaseDir().resolve("data");
+ }
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/dependency/tree/maven2/DependencyTreeBuilderTestMaven3.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/dependency/tree/maven2/DependencyTreeBuilderTestMaven3.java
new file mode 100644
index 000000000..7dbb4dab9
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/dependency/tree/maven2/DependencyTreeBuilderTestMaven3.java
@@ -0,0 +1,140 @@
+package org.apache.archiva.dependency.tree.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.common.plexusbridge.PlexusSisuBridge;
+import org.apache.archiva.configuration.ArchivaConfiguration;
+import org.apache.archiva.configuration.Configuration;
+import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
+import org.apache.archiva.maven2.model.Artifact;
+import org.apache.archiva.maven2.model.TreeEntry;
+import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.test.context.ContextConfiguration;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import java.nio.file.Paths;
+import java.util.Collections;
+import java.util.List;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@RunWith( ArchivaSpringJUnit4ClassRunner.class )
+@ContextConfiguration( { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml" } )
+public class DependencyTreeBuilderTestMaven3
+ extends TestCase
+{
+ @Inject
+ @Named( "dependencyTreeBuilder#maven3" )
+ private Maven3DependencyTreeBuilder builder;
+
+ @Inject
+ private PlexusSisuBridge plexusSisuBridge;
+
+ private static final String TEST_REPO_ID = "test";
+
+ private static final String TEST_VERSION = "1.2.1";
+
+ private static final String TEST_ARTIFACT_ID = "archiva-common";
+
+ private static final String TEST_GROUP_ID = "org.apache.archiva";
+
+
+ @Inject
+ @Named( "archivaConfiguration#test" )
+ ArchivaConfiguration config;
+
+ @Before
+ @Override
+ public void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ Configuration configuration = new Configuration();
+ ManagedRepositoryConfiguration repoConfig = new ManagedRepositoryConfiguration();
+ repoConfig.setId( TEST_REPO_ID );
+ repoConfig.setLocation(Paths.get("target/test-repository").toAbsolutePath().toString() );
+ configuration.addManagedRepository( repoConfig );
+ config.save( configuration );
+
+ //artifactFactory = ((DefaultDependencyTreeBuilder)this.builder).getFactory();
+ }
+
+
+ private Artifact createArtifact( String groupId, String artifactId, String version )
+ {
+ return new Artifact( groupId, artifactId, version );
+ }
+
+ private String getId( Artifact artifact )
+ {
+ return artifact.getGroupId() + ":" + artifact.getArtifactId() + ":" + artifact.getVersion();
+ }
+
+ @Test
+ public void testBuilderDependencies()
+ throws Exception
+ {
+
+ List<TreeEntry> treeEntries =
+ builder.buildDependencyTree( Collections.singletonList( TEST_REPO_ID ), TEST_GROUP_ID, TEST_ARTIFACT_ID,
+ TEST_VERSION );
+
+ Artifact artifact = new Artifact( TEST_GROUP_ID, TEST_ARTIFACT_ID, TEST_VERSION, "", "" );
+ artifact.setFileExtension("jar");
+ assertThat( treeEntries ).isNotNull().isNotEmpty().contains(new TreeEntry(artifact) );
+
+ artifact = new Artifact( "commons-lang", "commons-lang", "2.2", "compile", "" );
+ artifact.setFileExtension("jar");
+ assertThat( treeEntries.get( 0 ).getChilds() ).isNotNull().isNotEmpty().contains(
+ new TreeEntry(artifact) );
+ }
+
+
+ public static class TestTreeEntry
+ extends TreeEntry
+ {
+ Artifact a;
+
+ public TestTreeEntry( Artifact a )
+ {
+ this.a = a;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return this.a.hashCode();
+ }
+
+ @Override
+ public boolean equals( Object o )
+ {
+ Artifact artifact = ( (TreeEntry) o ).getArtifact();
+ return artifact.equals( this.a );
+ }
+ }
+
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/MockRepositoryArchivaTaskScheduler.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/MockRepositoryArchivaTaskScheduler.java
new file mode 100644
index 000000000..08bcd9640
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/MockRepositoryArchivaTaskScheduler.java
@@ -0,0 +1,58 @@
+package org.apache.archiva.metadata.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.archiva.redback.components.taskqueue.TaskQueueException;
+import org.apache.archiva.scheduler.repository.model.RepositoryArchivaTaskScheduler;
+import org.apache.archiva.scheduler.repository.model.RepositoryTask;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author Olivier Lamy
+ */
+@Service ("archivaTaskScheduler#repositoryMock")
+public class MockRepositoryArchivaTaskScheduler
+ implements RepositoryArchivaTaskScheduler
+{
+ @Override
+ public boolean isProcessingRepositoryTask( String repositoryId )
+ {
+ return false;
+ }
+
+ @Override
+ public boolean isProcessingRepositoryTask( RepositoryTask task )
+ {
+ return false;
+ }
+
+ @Override
+ public void queueTask( RepositoryTask task )
+ throws TaskQueueException
+ {
+ // no op
+ }
+
+ @Override
+ public boolean unQueueTask( RepositoryTask task )
+ throws TaskQueueException
+ {
+ return false;
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/TestMetadataResolver.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/TestMetadataResolver.java
new file mode 100644
index 000000000..702077325
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/TestMetadataResolver.java
@@ -0,0 +1,87 @@
+package org.apache.archiva.metadata.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.archiva.metadata.model.ArtifactMetadata;
+import org.apache.archiva.metadata.model.ProjectVersionMetadata;
+import org.apache.archiva.metadata.model.ProjectVersionReference;
+import org.springframework.stereotype.Service;
+
+import java.util.Collection;
+
+// FIXME: remove - this is useless, better to mock it or avoid needing it
+@Service( "metadataResolver#test" )
+public class TestMetadataResolver
+ implements MetadataResolver
+{
+ @Override
+ public ProjectVersionMetadata resolveProjectVersion( RepositorySession session, String repoId, String namespace,
+ String projectId, String projectVersion )
+ throws MetadataResolutionException
+ {
+ return null;
+ }
+
+ @Override
+ public Collection<ProjectVersionReference> resolveProjectReferences( RepositorySession session, String repoId,
+ String namespace, String projectId,
+ String projectVersion )
+ throws MetadataResolutionException
+ {
+ return null;
+ }
+
+ @Override
+ public Collection<String> resolveRootNamespaces( RepositorySession session, String repoId )
+ throws MetadataResolutionException
+ {
+ return null;
+ }
+
+ @Override
+ public Collection<String> resolveNamespaces( RepositorySession session, String repoId, String namespace )
+ throws MetadataResolutionException
+ {
+ return null;
+ }
+
+ @Override
+ public Collection<String> resolveProjects( RepositorySession session, String repoId, String namespace )
+ throws MetadataResolutionException
+ {
+ return null;
+ }
+
+ @Override
+ public Collection<String> resolveProjectVersions( RepositorySession session, String repoId, String namespace,
+ String projectId )
+ throws MetadataResolutionException
+ {
+ return null;
+ }
+
+ @Override
+ public Collection<ArtifactMetadata> resolveArtifacts( RepositorySession session, String repoId, String namespace,
+ String projectId, String projectVersion )
+ throws MetadataResolutionException
+ {
+ return null;
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/AbstractDefaultRepositoryContentTestCase.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/AbstractDefaultRepositoryContentTestCase.java
new file mode 100644
index 000000000..c3b85ccf1
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/AbstractDefaultRepositoryContentTestCase.java
@@ -0,0 +1,491 @@
+package org.apache.archiva.metadata.repository.storage.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.model.ArtifactReference;
+import org.apache.archiva.repository.AbstractRepositoryLayerTestCase;
+import org.apache.archiva.repository.LayoutException;
+import org.apache.commons.lang.StringUtils;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * AbstractDefaultRepositoryContentTestCase
+ */
+public abstract class AbstractDefaultRepositoryContentTestCase
+ extends AbstractRepositoryLayerTestCase
+{
+ @Test
+ public void testBadPathMissingType()
+ {
+ assertBadPath( "invalid/invalid/1/invalid-1", "missing type" );
+ }
+
+ @Test
+ public void testBadPathReleaseInSnapshotDir()
+ {
+ assertBadPath( "invalid/invalid/1.0-SNAPSHOT/invalid-1.0.jar",
+ "non snapshot artifact inside of a snapshot dir" );
+ }
+
+ @Test
+ public void testBadPathTimestampedSnapshotNotInSnapshotDir()
+ {
+ assertBadPath( "invalid/invalid/1.0-20050611.123456-1/invalid-1.0-20050611.123456-1.jar",
+ "Timestamped Snapshot artifact not inside of an Snapshot dir" );
+ }
+
+ @Test
+ public void testBadPathTooShort()
+ {
+ assertBadPath( "invalid/invalid-1.0.jar", "path is too short" );
+ }
+
+ @Test
+ public void testBadPathVersionMismatchA()
+ {
+ assertBadPath( "invalid/invalid/1.0/invalid-2.0.jar", "version mismatch between path and artifact" );
+ }
+
+ @Test
+ public void testBadPathVersionMismatchB()
+ {
+ assertBadPath( "invalid/invalid/1.0/invalid-1.0b.jar", "version mismatch between path and artifact" );
+ }
+
+ @Test
+ public void testBadPathWrongArtifactId()
+ {
+ assertBadPath( "org/apache/maven/test/1.0-SNAPSHOT/wrong-artifactId-1.0-20050611.112233-1.jar",
+ "wrong artifact id" );
+ }
+
+ /**
+ * [MRM-432] Oddball version spec.
+ * Example of an oddball / unusual version spec.
+ *
+ * @throws LayoutException
+ *
+ */
+ @Test
+ public void testGoodButOddVersionSpecGanymedSsh2()
+ throws LayoutException
+ {
+ String groupId = "ch.ethz.ganymed";
+ String artifactId = "ganymed-ssh2";
+ String version = "build210";
+ String classifier = null;
+ String type = "jar";
+ String path = "ch/ethz/ganymed/ganymed-ssh2/build210/ganymed-ssh2-build210.jar";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ /**
+ * [MRM-432] Oddball version spec.
+ * Example of an oddball / unusual version spec.
+ *
+ * @throws LayoutException
+ *
+ */
+ @Test
+ public void testGoodButOddVersionSpecJavaxComm()
+ throws LayoutException
+ {
+ String groupId = "javax";
+ String artifactId = "comm";
+ String version = "3.0-u1";
+ String classifier = null;
+ String type = "jar";
+ String path = "javax/comm/3.0-u1/comm-3.0-u1.jar";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ /**
+ * Test the ejb-client type spec.
+ * Type specs are not a 1 to 1 map to the extension.
+ * This tests that effect.
+ * @throws LayoutException
+ */
+ /* TODO: Re-enabled in the future.
+ public void testGoodFooEjbClient()
+ throws LayoutException
+ {
+ String groupId = "com.foo";
+ String artifactId = "foo-client";
+ String version = "1.0";
+ String classifier = null;
+ String type = "ejb-client"; // oddball type-spec (should result in jar extension)
+ String path = "com/foo/foo-client/1.0/foo-client-1.0.jar";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+ */
+
+ /**
+ * [MRM-432] Oddball version spec.
+ * Example of an oddball / unusual version spec.
+ *
+ * @throws LayoutException
+ *
+ */
+ @Test
+ public void testGoodButOddVersionSpecJavaxPersistence()
+ throws LayoutException
+ {
+ String groupId = "javax.persistence";
+ String artifactId = "ejb";
+ String version = "3.0-public_review";
+ String classifier = null;
+ String type = "jar";
+ String path = "javax/persistence/ejb/3.0-public_review/ejb-3.0-public_review.jar";
+
+ /*
+ * The version id of "public_review" can cause problems. is it part of
+ * the version spec? or the classifier?
+ * Since the path spec below shows it in the path, then it is really
+ * part of the version spec.
+ */
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ @Test
+ public void testGoodComFooTool()
+ throws LayoutException
+ {
+ String groupId = "com.foo";
+ String artifactId = "foo-tool";
+ String version = "1.0";
+ String classifier = null;
+ String type = "jar";
+ String path = "com/foo/foo-tool/1.0/foo-tool-1.0.jar";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ @Test
+ public void testGoodCommonsLang()
+ throws LayoutException
+ {
+ String groupId = "commons-lang";
+ String artifactId = "commons-lang";
+ String version = "2.1";
+ String classifier = null;
+ String type = "jar";
+ String path = "commons-lang/commons-lang/2.1/commons-lang-2.1.jar";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ /**
+ * [MRM-486] Can not deploy artifact test.maven-arch:test-arch due to "No ArtifactID Detected"
+ */
+ @Test
+ public void testGoodDashedArtifactId()
+ throws LayoutException
+ {
+ String groupId = "test.maven-arch";
+ String artifactId = "test-arch";
+ String version = "2.0.3-SNAPSHOT";
+ String classifier = null;
+ String type = "pom";
+ String path = "test/maven-arch/test-arch/2.0.3-SNAPSHOT/test-arch-2.0.3-SNAPSHOT.pom";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ /**
+ * It may seem odd, but this is a valid artifact.
+ */
+ @Test
+ public void testGoodDotNotationArtifactId()
+ throws LayoutException
+ {
+ String groupId = "com.company.department";
+ String artifactId = "com.company.department";
+ String version = "0.2";
+ String classifier = null;
+ String type = "pom";
+ String path = "com/company/department/com.company.department/0.2/com.company.department-0.2.pom";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ /**
+ * It may seem odd, but this is a valid artifact.
+ */
+ @Test
+ public void testGoodDotNotationSameGroupIdAndArtifactId()
+ throws LayoutException
+ {
+ String groupId = "com.company.department";
+ String artifactId = "com.company.department.project";
+ String version = "0.3";
+ String classifier = null;
+ String type = "pom";
+ String path =
+ "com/company/department/com.company.department.project/0.3/com.company.department.project-0.3.pom";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ /**
+ * Test the classifier, and java-source type spec.
+ *
+ * @throws LayoutException
+ *
+ */
+ @Test
+ public void testGoodFooLibSources()
+ throws LayoutException
+ {
+ String groupId = "com.foo.lib";
+ String artifactId = "foo-lib";
+ String version = "2.1-alpha-1";
+ String classifier = "sources";
+ String type = "java-source"; // oddball type-spec (should result in jar extension)
+ String path = "com/foo/lib/foo-lib/2.1-alpha-1/foo-lib-2.1-alpha-1-sources.jar";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ /**
+ * A timestamped versioned artifact, should reside in a SNAPSHOT baseversion directory.
+ *
+ * @throws LayoutException
+ *
+ */
+ @Test
+ public void testGoodSnapshotMavenTest()
+ throws LayoutException
+ {
+ String groupId = "org.apache.archiva.test";
+ String artifactId = "redonkulous";
+ String version = "3.1-beta-1-20050831.101112-42";
+ String classifier = null;
+ String type = "jar";
+ String path =
+ "org/apache/archiva/test/redonkulous/3.1-beta-1-SNAPSHOT/redonkulous-3.1-beta-1-20050831.101112-42.jar";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ /**
+ * [MRM-519] version identifiers within filename cause misidentification of version.
+ * Example uses "test" in artifact Id, which is also part of the versionKeyword list.
+ */
+ @Test
+ public void testGoodVersionKeywordInArtifactId()
+ throws LayoutException
+ {
+ String groupId = "maven";
+ String artifactId = "maven-test-plugin";
+ String version = "1.8.2";
+ String classifier = null;
+ String type = "pom";
+ String path = "maven/maven-test-plugin/1.8.2/maven-test-plugin-1.8.2.pom";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ /**
+ * [MRM-562] Artifact type "maven-plugin" is not detected correctly in .toArtifactReference() methods.
+ * Example uses "test" in artifact Id, which is also part of the versionKeyword list.
+ */
+ @Test
+ public void testGoodDetectMavenTestPlugin()
+ throws LayoutException
+ {
+ String groupId = "maven";
+ String artifactId = "maven-test-plugin";
+ String version = "1.8.2";
+ String classifier = null;
+ String type = "maven-plugin";
+ String path = "maven/maven-test-plugin/1.8.2/maven-test-plugin-1.8.2.jar";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ /**
+ * [MRM-562] Artifact type "maven-plugin" is not detected correctly in .toArtifactReference() methods.
+ */
+ @Test
+ public void testGoodDetectCoberturaMavenPlugin()
+ throws LayoutException
+ {
+ String groupId = "org.codehaus.mojo";
+ String artifactId = "cobertura-maven-plugin";
+ String version = "2.1";
+ String classifier = null;
+ String type = "maven-plugin";
+ String path = "org/codehaus/mojo/cobertura-maven-plugin/2.1/cobertura-maven-plugin-2.1.jar";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ @Test
+ public void testToArtifactOnEmptyPath()
+ {
+ try
+ {
+ toArtifactReference( "" );
+ fail( "Should have failed due to empty path." );
+ }
+ catch ( LayoutException e )
+ {
+ /* expected path */
+ }
+ }
+
+ @Test
+ public void testToArtifactOnNullPath()
+ {
+ try
+ {
+ toArtifactReference( null );
+ fail( "Should have failed due to null path." );
+ }
+ catch ( LayoutException e )
+ {
+ /* expected path */
+ }
+ }
+
+ @Test
+ public void testToArtifactReferenceOnEmptyPath()
+ {
+ try
+ {
+ toArtifactReference( "" );
+ fail( "Should have failed due to empty path." );
+ }
+ catch ( LayoutException e )
+ {
+ /* expected path */
+ }
+ }
+
+ @Test
+ public void testToArtifactReferenceOnNullPath()
+ {
+ try
+ {
+ toArtifactReference( null );
+ fail( "Should have failed due to null path." );
+ }
+ catch ( LayoutException e )
+ {
+ /* expected path */
+ }
+ }
+
+ @Test
+ public void testToPathOnNullArtifactReference()
+
+ {
+ try
+ {
+ ArtifactReference reference = null;
+ toPath( reference );
+ fail( "Should have failed due to null artifact reference." );
+ }
+ catch ( IllegalArgumentException e )
+ {
+ /* expected path */
+ }
+ }
+
+ private void assertArtifactReference( ArtifactReference actualReference, String groupId, String artifactId,
+ String version, String classifier, String type )
+ {
+ String expectedId =
+ "ArtifactReference - " + groupId + ":" + artifactId + ":" + version + ":" + classifier + ":" + type;
+
+ assertNotNull( expectedId + " - Should not be null.", actualReference );
+
+ assertEquals( expectedId + " - Group ID", groupId, actualReference.getGroupId() );
+ assertEquals( expectedId + " - Artifact ID", artifactId, actualReference.getArtifactId() );
+ if ( StringUtils.isNotBlank( classifier ) )
+ {
+ assertEquals( expectedId + " - Classifier", classifier, actualReference.getClassifier() );
+ }
+ assertEquals( expectedId + " - Version ID", version, actualReference.getVersion() );
+ assertEquals( expectedId + " - Type", type, actualReference.getType() );
+ }
+
+ private void assertBadPath( String path, String reason )
+ {
+ try
+ {
+ toArtifactReference( path );
+ fail(
+ "Should have thrown a LayoutException on the invalid path [" + path + "] because of [" + reason + "]" );
+ }
+ catch ( LayoutException e )
+ {
+ /* expected path */
+ }
+ }
+
+ /**
+ * Perform a roundtrip through the layout routines to determine success.
+ */
+ private void assertLayout( String path, String groupId, String artifactId, String version, String classifier,
+ String type )
+ throws LayoutException
+ {
+ ArtifactReference expectedArtifact = createArtifact( groupId, artifactId, version, classifier, type );
+
+ // --- Artifact Tests.
+
+ // Artifact to Path
+ assertEquals( "Artifact <" + expectedArtifact + "> to path:", path, toPath( expectedArtifact ) );
+
+ // --- Artifact Reference Tests
+
+ // Path to Artifact Reference.
+ ArtifactReference testReference = toArtifactReference( path );
+ assertArtifactReference( testReference, groupId, artifactId, version, classifier, type );
+
+ // And back again, using test Reference from previous step.
+ assertEquals( "Artifact <" + expectedArtifact + "> to path:", path, toPath( testReference ) );
+ }
+
+ protected ArtifactReference createArtifact( String groupId, String artifactId, String version, String classifier,
+ String type )
+ {
+ ArtifactReference artifact = new ArtifactReference();
+ artifact.setGroupId( groupId );
+ artifact.setArtifactId( artifactId );
+ artifact.setVersion( version );
+ artifact.setClassifier( classifier );
+ artifact.setType( type );
+ assertNotNull( artifact );
+ return artifact;
+ }
+
+ protected abstract ArtifactReference toArtifactReference( String path )
+ throws LayoutException;
+
+ protected abstract String toPath( ArtifactReference reference );
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/ManagedDefaultRepositoryContentTest.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/ManagedDefaultRepositoryContentTest.java
new file mode 100644
index 000000000..59c15a21d
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/ManagedDefaultRepositoryContentTest.java
@@ -0,0 +1,244 @@
+package org.apache.archiva.metadata.repository.storage.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.common.utils.VersionComparator;
+import org.apache.archiva.configuration.ArchivaConfiguration;
+import org.apache.archiva.configuration.FileType;
+import org.apache.archiva.configuration.FileTypes;
+import org.apache.archiva.model.ArtifactReference;
+import org.apache.archiva.model.ProjectReference;
+import org.apache.archiva.model.VersionedReference;
+import org.apache.archiva.repository.EditableManagedRepository;
+import org.apache.archiva.repository.LayoutException;
+import org.apache.archiva.repository.content.maven2.ManagedDefaultRepositoryContent;
+import org.apache.archiva.repository.maven2.MavenManagedRepository;
+import org.junit.Before;
+import org.junit.Test;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+/**
+ * ManagedDefaultRepositoryContentTest
+ */
+public class ManagedDefaultRepositoryContentTest
+ extends AbstractDefaultRepositoryContentTestCase
+{
+ private ManagedDefaultRepositoryContent repoContent;
+
+ @Inject
+ FileTypes fileTypes;
+
+ @Inject
+ @Named ( "archivaConfiguration#default" )
+ ArchivaConfiguration archivaConfiguration;
+
+ @Inject
+ List<? extends ArtifactMappingProvider> artifactMappingProviders;
+
+ @Before
+ public void setUp()
+ throws Exception
+ {
+ Path repoDir = Paths.get( "src/test/repositories/default-repository" );
+
+ MavenManagedRepository repository = createRepository( "testRepo", "Unit Test Repo", repoDir );
+
+ FileType fileType = archivaConfiguration.getConfiguration().getRepositoryScanning().getFileTypes().get( 0 );
+ fileType.addPattern( "**/*.xml" );
+ assertEquals( FileTypes.ARTIFACTS, fileType.getId() );
+
+ fileTypes.afterConfigurationChange( null, "fileType", null );
+
+ repoContent = new ManagedDefaultRepositoryContent(artifactMappingProviders, fileTypes);
+ //repoContent = (ManagedRepositoryContent) lookup( ManagedRepositoryContent.class, "default" );
+ repoContent.setRepository( repository );
+ }
+
+ @Test
+ public void testGetVersionsBadArtifact()
+ throws Exception
+ {
+ assertGetVersions( "bad_artifact", Collections.<String>emptyList() );
+ }
+
+ @Test
+ public void testGetVersionsMissingMultipleVersions()
+ throws Exception
+ {
+ assertGetVersions( "missing_metadata_b", Arrays.asList( "1.0", "1.0.1", "2.0", "2.0.1", "2.0-20070821-dev" ) );
+ }
+
+ @Test
+ public void testGetVersionsSimple()
+ throws Exception
+ {
+ assertVersions( "proxied_multi", "2.1", new String[]{ "2.1" } );
+ }
+
+ @Test
+ public void testGetVersionsSimpleYetIncomplete()
+ throws Exception
+ {
+ assertGetVersions( "incomplete_metadata_a", Collections.singletonList( "1.0" ) );
+ }
+
+ @Test
+ public void testGetVersionsSimpleYetMissing()
+ throws Exception
+ {
+ assertGetVersions( "missing_metadata_a", Collections.singletonList( "1.0" ) );
+ }
+
+ @Test
+ public void testGetVersionsSnapshotA()
+ throws Exception
+ {
+ assertVersions( "snap_shots_a", "1.0-alpha-11-SNAPSHOT",
+ new String[]{ "1.0-alpha-11-SNAPSHOT", "1.0-alpha-11-20070221.194724-2",
+ "1.0-alpha-11-20070302.212723-3", "1.0-alpha-11-20070303.152828-4",
+ "1.0-alpha-11-20070305.215149-5", "1.0-alpha-11-20070307.170909-6",
+ "1.0-alpha-11-20070314.211405-9", "1.0-alpha-11-20070316.175232-11" } );
+ }
+
+ @Test
+ public void testToMetadataPathFromProjectReference()
+ {
+ ProjectReference reference = new ProjectReference();
+ reference.setGroupId( "com.foo" );
+ reference.setArtifactId( "foo-tool" );
+
+ assertEquals( "com/foo/foo-tool/maven-metadata.xml", repoContent.toMetadataPath( reference ) );
+ }
+
+ @Test
+ public void testToMetadataPathFromVersionReference()
+ {
+ VersionedReference reference = new VersionedReference();
+ reference.setGroupId( "com.foo" );
+ reference.setArtifactId( "foo-tool" );
+ reference.setVersion( "1.0" );
+
+ assertEquals( "com/foo/foo-tool/1.0/maven-metadata.xml", repoContent.toMetadataPath( reference ) );
+ }
+
+ @Test
+ @Override
+ public void testToPathOnNullArtifactReference()
+ {
+ try
+ {
+ ArtifactReference reference = null;
+ repoContent.toPath( reference );
+ fail( "Should have failed due to null artifact reference." );
+ }
+ catch ( IllegalArgumentException e )
+ {
+ /* expected path */
+ }
+ }
+
+ @Test
+ public void testExcludeMetadataFile()
+ throws Exception
+ {
+ assertVersions( "include_xml", "1.0", new String[]{ "1.0" } );
+ }
+
+ private void assertGetVersions( String artifactId, List<String> expectedVersions )
+ throws Exception
+ {
+ ProjectReference reference = new ProjectReference();
+ reference.setGroupId( "org.apache.archiva.metadata.tests" );
+ reference.setArtifactId( artifactId );
+
+ // Use the test metadata-repository, which is already setup for
+ // These kind of version tests.
+ Path repoDir = Paths.get( "src/test/repositories/metadata-repository" );
+ (( EditableManagedRepository)repoContent.getRepository()).setLocation( repoDir.toAbsolutePath().toUri() );
+
+ // Request the versions.
+ Set<String> testedVersionSet = repoContent.getVersions( reference );
+
+ // Sort the list (for asserts)
+ List<String> testedVersions = new ArrayList<>();
+ testedVersions.addAll( testedVersionSet );
+ Collections.sort( testedVersions, new VersionComparator() );
+
+ // Test the expected array of versions, to the actual tested versions
+ assertEquals( "available versions", expectedVersions, testedVersions );
+ }
+
+ private void assertVersions( String artifactId, String version, String[] expectedVersions )
+ throws Exception
+ {
+ VersionedReference reference = new VersionedReference();
+ reference.setGroupId( "org.apache.archiva.metadata.tests" );
+ reference.setArtifactId( artifactId );
+ reference.setVersion( version );
+
+ // Use the test metadata-repository, which is already setup for
+ // These kind of version tests.
+ Path repoDir = Paths.get( "src/test/repositories/metadata-repository" );
+ ((EditableManagedRepository)repoContent.getRepository()).setLocation( repoDir.toAbsolutePath().toUri() );
+
+ // Request the versions.
+ Set<String> testedVersionSet = repoContent.getVersions( reference );
+
+ // Sort the list (for asserts later)
+ List<String> testedVersions = new ArrayList<>();
+ testedVersions.addAll( testedVersionSet );
+ Collections.sort( testedVersions, new VersionComparator() );
+
+ // Test the expected array of versions, to the actual tested versions
+ assertEquals( "Assert Versions: length/size", expectedVersions.length, testedVersions.size() );
+
+ for ( int i = 0; i < expectedVersions.length; i++ )
+ {
+ String actualVersion = testedVersions.get( i );
+ assertEquals( "Versions[" + i + "]", expectedVersions[i], actualVersion );
+ }
+ }
+
+
+ @Override
+ protected ArtifactReference toArtifactReference( String path )
+ throws LayoutException
+ {
+ return repoContent.toArtifactReference( path );
+ }
+
+ @Override
+ protected String toPath( ArtifactReference reference )
+ {
+ return repoContent.toPath( reference );
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverMRM1411RepoGroupTest.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverMRM1411RepoGroupTest.java
new file mode 100644
index 000000000..c10f13dc4
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverMRM1411RepoGroupTest.java
@@ -0,0 +1,550 @@
+package org.apache.archiva.metadata.repository.storage.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.configuration.ArchivaConfiguration;
+import org.apache.archiva.configuration.Configuration;
+import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
+import org.apache.archiva.configuration.ProxyConnectorConfiguration;
+import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
+import org.apache.archiva.configuration.RepositoryGroupConfiguration;
+import org.apache.archiva.metadata.model.ArtifactMetadata;
+import org.apache.archiva.metadata.model.Dependency;
+import org.apache.archiva.metadata.model.License;
+import org.apache.archiva.metadata.model.MailingList;
+import org.apache.archiva.metadata.model.ProjectVersionMetadata;
+import org.apache.archiva.metadata.repository.filter.AllFilter;
+import org.apache.archiva.metadata.repository.filter.Filter;
+import org.apache.archiva.metadata.repository.storage.ReadMetadataRequest;
+import org.apache.archiva.proxy.maven.WagonFactory;
+import org.apache.archiva.proxy.maven.WagonFactoryRequest;
+import org.apache.archiva.repository.RepositoryRegistry;
+import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
+import org.apache.commons.io.FileUtils;
+import org.apache.maven.wagon.Wagon;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.test.context.ContextConfiguration;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+
+@RunWith ( ArchivaSpringJUnit4ClassRunner.class )
+@ContextConfiguration ( { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml" } )
+public class Maven2RepositoryMetadataResolverMRM1411RepoGroupTest
+ extends TestCase
+{
+ private static final Filter<String> ALL = new AllFilter<String>();
+
+ @Inject
+ @Named ( "repositoryStorage#maven2")
+ private Maven2RepositoryStorage storage;
+
+ private static final String TEST_REPO_ID = "test";
+
+ private static final String TEST_SNAP_REPO_ID = "tests";
+
+ private static final String TEST_REPO_GROUP_ID = "testrg";
+
+ private static final String TEST_REMOTE_REPO_ID = "central";
+
+ private static final String ASF_SCM_CONN_BASE = "scm:svn:http://svn.apache.org/repos/asf/";
+
+ private static final String ASF_SCM_DEV_CONN_BASE = "scm:svn:https://svn.apache.org/repos/asf/";
+
+ private static final String ASF_SCM_VIEWVC_BASE = "http://svn.apache.org/viewvc/";
+
+ private static final String TEST_SCM_CONN_BASE = "scm:svn:http://svn.example.com/repos/";
+
+ private static final String TEST_SCM_DEV_CONN_BASE = "scm:svn:https://svn.example.com/repos/";
+
+ private static final String TEST_SCM_URL_BASE = "http://svn.example.com/repos/";
+
+ private static final String EMPTY_MD5 = "d41d8cd98f00b204e9800998ecf8427e";
+
+ private static final String EMPTY_SHA1 = "da39a3ee5e6b4b0d3255bfef95601890afd80709";
+
+ @Inject
+ @Named ( "archivaConfiguration#default" )
+ private ArchivaConfiguration configuration;
+
+ @Inject
+ RepositoryRegistry repositoryRegistry;
+
+ private WagonFactory wagonFactory;
+
+ ManagedRepositoryConfiguration testRepo;
+
+ ManagedRepositoryConfiguration testRepoS;
+
+ Configuration c;
+
+ @Before
+ @Override
+ public void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ c = new Configuration();
+
+ testRepo = new ManagedRepositoryConfiguration();
+ testRepo.setId( TEST_REPO_ID );
+ testRepo.setLocation( Paths.get( "target/test-repository" ).toAbsolutePath().toString() );
+ testRepo.setReleases( true );
+ testRepo.setSnapshots( false );
+ c.addManagedRepository( testRepo );
+
+ testRepoS = new ManagedRepositoryConfiguration();
+ testRepoS.setId( TEST_SNAP_REPO_ID );
+ testRepoS.setLocation( Paths.get( "target/test-repositorys" ).toAbsolutePath().toString() );
+ testRepoS.setReleases( false );
+ testRepoS.setSnapshots( true );
+ c.addManagedRepository( testRepoS );
+
+ RemoteRepositoryConfiguration testRemoteRepo = new RemoteRepositoryConfiguration();
+ testRemoteRepo.setId( TEST_REMOTE_REPO_ID );
+ testRemoteRepo.setLayout( "default" );
+ testRemoteRepo.setName( "Central Repository" );
+ testRemoteRepo.setUrl( "http://central.repo.com/maven2" );
+ testRemoteRepo.setTimeout( 10 );
+ c.addRemoteRepository( testRemoteRepo );
+
+ ProxyConnectorConfiguration proxyConnector = new ProxyConnectorConfiguration();
+ proxyConnector.setSourceRepoId( TEST_REPO_ID );
+ proxyConnector.setTargetRepoId( TEST_REMOTE_REPO_ID );
+ proxyConnector.setDisabled( false );
+ c.addProxyConnector( proxyConnector );
+
+ ProxyConnectorConfiguration proxyConnectors = new ProxyConnectorConfiguration();
+ proxyConnectors.setSourceRepoId( TEST_SNAP_REPO_ID );
+ proxyConnectors.setTargetRepoId( TEST_REMOTE_REPO_ID );
+ proxyConnectors.setDisabled( false );
+ c.addProxyConnector( proxyConnectors );
+
+ List<String> repos = new ArrayList<>();
+ repos.add( TEST_REPO_ID );
+ repos.add( TEST_SNAP_REPO_ID );
+
+ RepositoryGroupConfiguration repoGroup = new RepositoryGroupConfiguration();
+ repoGroup.setId( TEST_REPO_GROUP_ID );
+ repoGroup.setRepositories( repos );
+ c.addRepositoryGroup( repoGroup );
+
+ configuration.save( c );
+ repositoryRegistry.reload();
+
+ assertFalse( c.getManagedRepositories().get( 0 ).isSnapshots() );
+ assertTrue( c.getManagedRepositories().get( 0 ).isReleases() );
+
+ assertTrue( c.getManagedRepositories().get( 1 ).isSnapshots() );
+ assertFalse( c.getManagedRepositories().get( 1 ).isReleases() );
+
+ wagonFactory = mock( WagonFactory.class );
+
+ storage.setWagonFactory( wagonFactory );
+
+ Wagon wagon = new MockWagon();
+ when( wagonFactory.getWagon( new WagonFactoryRequest().protocol( "wagon#http" ) ) ).thenReturn( wagon );
+ }
+
+ // Tests for MRM-1411 - START
+ @Test
+ public void testGetProjectVersionMetadataWithParentSuccessful()
+ throws Exception
+ {
+ copyTestArtifactWithParent( "src/test/resources/com/example/test/test-artifact-module-a",
+ "target/test-repository/com/example/test/test-artifact-module-a" );
+ copyTestArtifactWithParent( "src/test/resources/com/example/test/test-artifact-root",
+ "target/test-repository/com/example/test/test-artifact-root" );
+ copyTestArtifactWithParent( "src/test/resources/com/example/test/test-artifact-parent",
+ "target/test-repository/com/example/test/test-artifact-parent" );
+
+ ReadMetadataRequest readMetadataRequest =
+ new ReadMetadataRequest().repositoryId( TEST_REPO_ID ).namespace( "com.example.test" ).projectId(
+ "test-artifact-module-a" ).projectVersion( "1.0" );
+ ProjectVersionMetadata metadata = storage.readProjectVersionMetadata( readMetadataRequest );
+
+ MavenProjectFacet facet = (MavenProjectFacet) metadata.getFacet( MavenProjectFacet.FACET_ID );
+ assertEquals( "jar", facet.getPackaging() );
+ assertEquals( "http://maven.apache.org", metadata.getUrl() );
+ assertEquals( "com.example.test", facet.getParent().getGroupId() );
+ assertEquals( "test-artifact-root", facet.getParent().getArtifactId() );
+ assertEquals( "1.0", facet.getParent().getVersion() );
+ assertEquals( "test-artifact-module-a", facet.getArtifactId() );
+ assertEquals( "com.example.test", facet.getGroupId() );
+ assertNull( metadata.getCiManagement() );
+ assertNotNull( metadata.getDescription() );
+
+ checkApacheLicense( metadata );
+
+ assertEquals( "1.0", metadata.getId() );
+ assertEquals( "Test Artifact :: Module A", metadata.getName() );
+ String path = "test-artifact/trunk/test-artifact-module-a";
+ assertEquals( TEST_SCM_CONN_BASE + path, metadata.getScm().getConnection() );
+ assertEquals( TEST_SCM_DEV_CONN_BASE + path, metadata.getScm().getDeveloperConnection() );
+ assertEquals( TEST_SCM_URL_BASE + path, metadata.getScm().getUrl() );
+
+ List<Dependency> dependencies = metadata.getDependencies();
+ assertEquals( 2, dependencies.size() );
+ assertDependency( dependencies.get( 0 ), "commons-io", "commons-io", "1.4" );
+ assertDependency( dependencies.get( 1 ), "junit", "junit", "3.8.1", "test" );
+
+ List<String> paths = new ArrayList<>();
+ paths.add( "target/test-repository/com/example/test/test-artifact-module-a" );
+ paths.add( "target/test-repository/com/example/test/test-artifact-parent" );
+ paths.add( "target/test-repository/com/example/test/test-artifact-root" );
+
+ deleteTestArtifactWithParent( paths );
+ }
+
+ @Test
+ public void testGetProjectVersionMetadataWithParentNoRemoteReposConfigured()
+ throws Exception
+ {
+ // remove configuration
+ Configuration config = configuration.getConfiguration();
+ RemoteRepositoryConfiguration remoteRepo = config.findRemoteRepositoryById( TEST_REMOTE_REPO_ID );
+ config.removeRemoteRepository( remoteRepo );
+
+ configuration.save( config );
+
+ copyTestArtifactWithParent( "src/test/resources/com/example/test/test-artifact-module-a",
+ "target/test-repository/com/example/test/test-artifact-module-a" );
+ copyTestArtifactWithParent( "src/test/resources/com/example/test/test-artifact-root",
+ "target/test-repository/com/example/test/test-artifact-root" );
+ copyTestArtifactWithParent( "src/test/resources/com/example/test/test-artifact-parent",
+ "target/test-repository/com/example/test/test-artifact-parent" );
+
+ ReadMetadataRequest readMetadataRequest =
+ new ReadMetadataRequest().repositoryId( TEST_REPO_ID ).namespace( "com.example.test" ).projectId(
+ "test-artifact-module-a" ).projectVersion( "1.0" );
+ ProjectVersionMetadata metadata = storage.readProjectVersionMetadata( readMetadataRequest );
+ assertEquals( "1.0", metadata.getId() );
+
+ MavenProjectFacet facet = (MavenProjectFacet) metadata.getFacet( MavenProjectFacet.FACET_ID );
+ assertNotNull( facet );
+ assertEquals( "com.example.test", facet.getGroupId() );
+ assertEquals( "test-artifact-module-a", facet.getArtifactId() );
+ assertEquals( "jar", facet.getPackaging() );
+
+ List<String> paths = new ArrayList<>();
+ paths.add( "target/test-repository/com/example/test/test-artifact-module-a" );
+ paths.add( "target/test-repository/com/example/test/test-artifact-parent" );
+ paths.add( "target/test-repository/com/example/test/test-artifact-root" );
+
+ deleteTestArtifactWithParent( paths );
+ }
+
+ @Test
+ public void testGetProjectVersionMetadataWithParentNotInAnyRemoteRepo()
+ throws Exception
+ {
+ copyTestArtifactWithParent( "src/test/resources/com/example/test/test-artifact-module-a",
+ "target/test-repository/com/example/test/test-artifact-module-a" );
+
+ ReadMetadataRequest readMetadataRequest =
+ new ReadMetadataRequest().repositoryId( TEST_REPO_ID ).namespace( "com.example.test" ).projectId(
+ "missing-parent" ).projectVersion( "1.1" );
+
+ ProjectVersionMetadata metadata = storage.readProjectVersionMetadata( readMetadataRequest );
+
+ assertEquals( "1.1", metadata.getId() );
+
+ MavenProjectFacet facet = (MavenProjectFacet) metadata.getFacet( MavenProjectFacet.FACET_ID );
+ assertNotNull( facet );
+ assertEquals( "com.example.test", facet.getGroupId() );
+ assertEquals( "missing-parent", facet.getArtifactId() );
+ assertEquals( "jar", facet.getPackaging() );
+
+ List<String> paths = new ArrayList<>();
+ paths.add( "target/test-repository/com/example/test/test-artifact-module-a" );
+ paths.add( "target/test-repository/com/example/test/test-artifact-parent" );
+ paths.add( "target/test-repository/com/example/test/test-artifact-root" );
+
+ deleteTestArtifactWithParent( paths );
+ }
+
+ @Test
+ public void testGetProjectVersionMetadataWithParentSnapshotVersion()
+ throws Exception
+ {
+ copyTestArtifactWithParent( "target/test-classes/com/example/test/test-snapshot-artifact-module-a",
+ "target/test-repositorys/com/example/test/test-snapshot-artifact-module-a" );
+ copyTestArtifactWithParent( "target/test-classes/com/example/test/test-snapshot-artifact-root",
+ "target/test-repositorys/com/example/test/test-snapshot-artifact-root" );
+ copyTestArtifactWithParent( "src/test/resources/com/example/test/test-artifact-parent",
+ "target/test-repositorys/com/example/test/test-artifact-parent" );
+
+ ReadMetadataRequest readMetadataRequest =
+ new ReadMetadataRequest( TEST_SNAP_REPO_ID, "com.example.test", "test-snapshot-artifact-module-a",
+ "1.1-SNAPSHOT" );
+
+ ProjectVersionMetadata metadata = storage.readProjectVersionMetadata( readMetadataRequest );
+
+ MavenProjectFacet facet = (MavenProjectFacet) metadata.getFacet( MavenProjectFacet.FACET_ID );
+ assertEquals( "jar", facet.getPackaging() );
+ assertEquals( "com.example.test", facet.getParent().getGroupId() );
+ assertEquals( "test-snapshot-artifact-root", facet.getParent().getArtifactId() );
+ assertEquals( "1.1-SNAPSHOT", facet.getParent().getVersion() );
+ assertEquals( "test-snapshot-artifact-module-a", facet.getArtifactId() );
+ assertEquals( "com.example.test", facet.getGroupId() );
+ assertNull( metadata.getCiManagement() );
+ assertNotNull( metadata.getDescription() );
+
+ checkApacheLicense( metadata );
+
+ assertEquals( "1.1-SNAPSHOT", metadata.getId() );
+ assertEquals( "Test Snapshot Artifact :: Module A", metadata.getName() );
+ String path = "test-snapshot-artifact/trunk/test-snapshot-artifact-module-a";
+ assertEquals( TEST_SCM_CONN_BASE + path, metadata.getScm().getConnection() );
+ assertEquals( TEST_SCM_DEV_CONN_BASE + path, metadata.getScm().getDeveloperConnection() );
+ assertEquals( TEST_SCM_URL_BASE + path, metadata.getScm().getUrl() );
+
+ List<Dependency> dependencies = metadata.getDependencies();
+ assertEquals( 2, dependencies.size() );
+ assertDependency( dependencies.get( 0 ), "commons-io", "commons-io", "1.4" );
+ assertDependency( dependencies.get( 1 ), "junit", "junit", "3.8.1", "test" );
+
+ List<String> paths = new ArrayList<>();
+ paths.add( "target/test-repositorys/com/example/test/test-snapshot-artifact-module-a" );
+ paths.add( "target/test-repositorys/com/example/test/test-snapshot-artifact-root" );
+ deleteTestArtifactWithParent( paths );
+ }
+
+ @Test
+ public void testGetProjectVersionMetadataWithParentSnapshotVersionAndSnapNotAllowed()
+ throws Exception
+ {
+ copyTestArtifactWithParent( "target/test-classes/com/example/test/test-snapshot-artifact-module-a",
+ "target/test-repositorys/com/example/test/test-snapshot-artifact-module-a" );
+ copyTestArtifactWithParent( "src/test/resources/com/example/test/test-artifact-parent",
+ "target/test-repositorys/com/example/test/test-artifact-parent" );
+ copyTestArtifactWithParent( "src/test/resources/com/example/test/test-snapshot-artifact-root",
+ "target/test-repositorys/com/example/test/test-snapshot-artifact-root" );
+
+ ReadMetadataRequest readMetadataRequest =
+ new ReadMetadataRequest().repositoryId( TEST_SNAP_REPO_ID ).namespace( "com.example.test" ).projectId(
+ "test-snapshot-artifact-module-a" ).projectVersion( "1.1-SNAPSHOT" );
+ ProjectVersionMetadata metadata = storage.readProjectVersionMetadata( readMetadataRequest );
+
+ MavenProjectFacet facet = (MavenProjectFacet) metadata.getFacet( MavenProjectFacet.FACET_ID );
+ assertEquals( "jar", facet.getPackaging() );
+ assertEquals( "com.example.test", facet.getParent().getGroupId() );
+ assertEquals( "test-snapshot-artifact-root", facet.getParent().getArtifactId() );
+ assertEquals( "1.1-SNAPSHOT", facet.getParent().getVersion() );
+ assertEquals( "test-snapshot-artifact-module-a", facet.getArtifactId() );
+ assertEquals( "com.example.test", facet.getGroupId() );
+ assertNull( metadata.getCiManagement() );
+ assertNotNull( metadata.getDescription() );
+
+ checkApacheLicense( metadata );
+
+ assertEquals( "1.1-SNAPSHOT", metadata.getId() );
+ assertEquals( "Test Snapshot Artifact :: Module A", metadata.getName() );
+ String path = "test-snapshot-artifact/trunk/test-snapshot-artifact-module-a";
+ assertEquals( TEST_SCM_CONN_BASE + path, metadata.getScm().getConnection() );
+ assertEquals( TEST_SCM_DEV_CONN_BASE + path, metadata.getScm().getDeveloperConnection() );
+ assertEquals( TEST_SCM_URL_BASE + path, metadata.getScm().getUrl() );
+
+ List<Dependency> dependencies = metadata.getDependencies();
+ assertEquals( 2, dependencies.size() );
+ assertDependency( dependencies.get( 0 ), "commons-io", "commons-io", "1.4" );
+ assertDependency( dependencies.get( 1 ), "junit", "junit", "3.8.1", "test" );
+
+ List<String> paths = new ArrayList<>();
+ paths.add( "target/test-repositorys/com/example/test/test-snapshot-artifact-module-a" );
+ paths.add( "target/test-repositorys/com/example/test/test-snapshot-artifact-root" );
+
+ deleteTestArtifactWithParent( paths );
+ }
+
+ @Test
+ public void testGetProjectVersionMetadataWithParentSnapshotVersionAndSnapNotAllowed2()
+ throws Exception
+ {
+ copyTestArtifactWithParent( "src/test/resources/com/example/test/test-artifact-module-b",
+ "target/test-repository/com/example/test/test-artifact-module-b" );
+ copyTestArtifactWithParent( "src/test/resources/com/example/test/test-artifact-parent",
+ "target/test-repository/com/example/test/test-artifact-parent" );
+ copyTestArtifactWithParent( "src/test/resources/com/example/test/test-snapshot-artifact-root",
+ "target/test-repository/com/example/test/test-snapshot-artifact-root" );
+
+ ReadMetadataRequest readMetadataRequest =
+ new ReadMetadataRequest().repositoryId( TEST_REPO_ID ).namespace( "com.example.test" ).projectId(
+ "test-artifact-module-b" ).projectVersion( "1.0" );
+
+ ProjectVersionMetadata metadata = storage.readProjectVersionMetadata( readMetadataRequest );
+
+ MavenProjectFacet facet = (MavenProjectFacet) metadata.getFacet( MavenProjectFacet.FACET_ID );
+ assertEquals( "jar", facet.getPackaging() );
+ assertEquals( "com.example.test", facet.getParent().getGroupId() );
+ assertEquals( "test-snapshot-artifact-root", facet.getParent().getArtifactId() );
+ assertEquals( "1.1-SNAPSHOT", facet.getParent().getVersion() );
+ assertEquals( "test-artifact-module-b", facet.getArtifactId() );
+ assertEquals( "com.example.test", facet.getGroupId() );
+ assertNull( metadata.getCiManagement() );
+ assertNotNull( metadata.getDescription() );
+
+ checkApacheLicense( metadata );
+
+ assertEquals( "1.0", metadata.getId() );
+ assertEquals( "Test Artifact :: Module B", metadata.getName() );
+ String path = "test-snapshot-artifact/trunk/test-artifact-module-b";
+ assertEquals( TEST_SCM_CONN_BASE + path, metadata.getScm().getConnection() );
+ assertEquals( TEST_SCM_DEV_CONN_BASE + path, metadata.getScm().getDeveloperConnection() );
+ assertEquals( TEST_SCM_URL_BASE + path, metadata.getScm().getUrl() );
+
+ List<Dependency> dependencies = metadata.getDependencies();
+ assertEquals( 2, dependencies.size() );
+ assertDependency( dependencies.get( 0 ), "commons-io", "commons-io", "1.4" );
+ assertDependency( dependencies.get( 1 ), "junit", "junit", "3.8.1", "test" );
+
+ List<String> paths = new ArrayList<>();
+ paths.add( "target/test-repository/com/example/test/test-artifact-module-b" );
+ paths.add( "target/test-repository/com/example/test/test-snapshot-artifact-root" );
+
+ deleteTestArtifactWithParent( paths );
+ }
+ // Tests for MRM-1411 - END
+
+ private void assertDependency( Dependency dependency, String groupId, String artifactId, String version )
+ {
+ assertDependency( dependency, groupId, artifactId, version, "compile" );
+ }
+
+ private void assertDependency( Dependency dependency, String groupId, String artifactId, String version,
+ String scope )
+ {
+ assertEquals( artifactId, dependency.getArtifactId() );
+ assertEquals( "jar", dependency.getType() );
+ assertEquals( version, dependency.getVersion() );
+ assertEquals( groupId, dependency.getGroupId() );
+ assertEquals( scope, dependency.getScope() );
+ assertNull( dependency.getClassifier() );
+ assertNull( dependency.getSystemPath() );
+ }
+
+ private void assertArtifact( ArtifactMetadata artifact, String id, int size, String sha1, String md5 )
+ {
+ assertEquals( id, artifact.getId() );
+ assertEquals( md5, artifact.getMd5() );
+ assertEquals( sha1, artifact.getSha1() );
+ assertEquals( size, artifact.getSize() );
+ assertEquals( "org.codehaus.plexus", artifact.getNamespace() );
+ assertEquals( "plexus-spring", artifact.getProject() );
+ assertEquals( "1.2", artifact.getVersion() );
+ assertEquals( TEST_REPO_ID, artifact.getRepositoryId() );
+ }
+
+ private void assertMailingList( MailingList mailingList, String name, String archive, String post, String subscribe,
+ String unsubscribe, List<String> otherArchives, boolean allowPost )
+ {
+ assertEquals( archive, mailingList.getMainArchiveUrl() );
+ if ( allowPost )
+ {
+ assertEquals( post, mailingList.getPostAddress() );
+ }
+ else
+ {
+ assertNull( mailingList.getPostAddress() );
+ }
+ assertEquals( subscribe, mailingList.getSubscribeAddress() );
+ assertEquals( unsubscribe, mailingList.getUnsubscribeAddress() );
+ assertEquals( name, mailingList.getName() );
+ assertEquals( otherArchives, mailingList.getOtherArchives() );
+ }
+
+ private void assertMailingList( String prefix, MailingList mailingList, String name, boolean allowPost,
+ String nabbleUrl )
+ {
+ List<String> otherArchives = new ArrayList<>();
+ otherArchives.add( "http://www.mail-archive.com/" + prefix + "@archiva.apache.org" );
+ if ( nabbleUrl != null )
+ {
+ otherArchives.add( nabbleUrl );
+ }
+ otherArchives.add( "http://markmail.org/list/org.apache.archiva." + prefix );
+ assertMailingList( mailingList, name, "http://mail-archives.apache.org/mod_mbox/archiva-" + prefix + "/",
+ prefix + "@archiva.apache.org", prefix + "-subscribe@archiva.apache.org",
+ prefix + "-unsubscribe@archiva.apache.org", otherArchives, allowPost );
+ }
+
+ private void checkApacheLicense( ProjectVersionMetadata metadata )
+ {
+ assertEquals( Arrays.asList( new License( "The Apache Software License, Version 2.0",
+ "http://www.apache.org/licenses/LICENSE-2.0.txt" ) ),
+ metadata.getLicenses() );
+ }
+
+ private void checkOrganizationApache( ProjectVersionMetadata metadata )
+ {
+ assertEquals( "The Apache Software Foundation", metadata.getOrganization().getName() );
+ assertEquals( "http://www.apache.org/", metadata.getOrganization().getUrl() );
+ }
+
+ private void deleteTestArtifactWithParent( List<String> pathsToBeDeleted )
+ throws IOException
+ {
+ for ( String path : pathsToBeDeleted )
+ {
+ Path dir = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), path );
+ org.apache.archiva.common.utils.FileUtils.deleteDirectory( dir );
+
+ assertFalse( Files.exists(dir) );
+ }
+ Path dest = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/test-repository/com/example/test/test-artifact-module-a" );
+ Path parentPom = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/test-repository/com/example/test/test-artifact-parent" );
+ Path rootPom = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/test-repository/com/example/test/test-artifact-root" );
+
+ org.apache.archiva.common.utils.FileUtils.deleteDirectory( dest );
+ org.apache.archiva.common.utils.FileUtils.deleteDirectory( parentPom );
+ org.apache.archiva.common.utils.FileUtils.deleteDirectory( rootPom );
+
+ assertFalse( Files.exists(dest) );
+ assertFalse( Files.exists(parentPom) );
+ assertFalse( Files.exists(rootPom) );
+ }
+
+ private Path copyTestArtifactWithParent( String srcPath, String destPath )
+ throws IOException
+ {
+ Path src = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), srcPath );
+ Path dest = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), destPath );
+
+ FileUtils.copyDirectory( src.toFile(), dest.toFile() );
+ assertTrue( Files.exists(dest) );
+ return dest;
+ }
+
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverMRM1411Test.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverMRM1411Test.java
new file mode 100644
index 000000000..e094a20ad
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverMRM1411Test.java
@@ -0,0 +1,447 @@
+package org.apache.archiva.metadata.repository.storage.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.configuration.ArchivaConfiguration;
+import org.apache.archiva.configuration.Configuration;
+import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
+import org.apache.archiva.configuration.ProxyConnectorConfiguration;
+import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
+import org.apache.archiva.metadata.model.ArtifactMetadata;
+import org.apache.archiva.metadata.model.Dependency;
+import org.apache.archiva.metadata.model.License;
+import org.apache.archiva.metadata.model.MailingList;
+import org.apache.archiva.metadata.model.ProjectVersionMetadata;
+import org.apache.archiva.metadata.repository.filter.AllFilter;
+import org.apache.archiva.metadata.repository.filter.Filter;
+import org.apache.archiva.metadata.repository.storage.ReadMetadataRequest;
+import org.apache.archiva.metadata.repository.storage.RepositoryStorageRuntimeException;
+import org.apache.archiva.proxy.maven.WagonFactory;
+import org.apache.archiva.proxy.maven.WagonFactoryRequest;
+import org.apache.archiva.repository.RepositoryRegistry;
+import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
+import org.apache.commons.io.FileUtils;
+import org.apache.maven.wagon.Wagon;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.test.context.ContextConfiguration;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+@RunWith ( ArchivaSpringJUnit4ClassRunner.class )
+@ContextConfiguration ( { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml" } )
+public class Maven2RepositoryMetadataResolverMRM1411Test
+ extends TestCase
+{
+ private static final Filter<String> ALL = new AllFilter<String>();
+
+ @Inject
+ @Named ( "repositoryStorage#maven2")
+ private Maven2RepositoryStorage storage;
+
+ private static final String TEST_REPO_ID = "test";
+
+ private static final String TEST_REMOTE_REPO_ID = "central";
+
+ private static final String ASF_SCM_CONN_BASE = "scm:svn:http://svn.apache.org/repos/asf/";
+
+ private static final String ASF_SCM_DEV_CONN_BASE = "scm:svn:https://svn.apache.org/repos/asf/";
+
+ private static final String ASF_SCM_VIEWVC_BASE = "http://svn.apache.org/viewvc/";
+
+ private static final String TEST_SCM_CONN_BASE = "scm:svn:http://svn.example.com/repos/";
+
+ private static final String TEST_SCM_DEV_CONN_BASE = "scm:svn:https://svn.example.com/repos/";
+
+ private static final String TEST_SCM_URL_BASE = "http://svn.example.com/repos/";
+
+ private static final String EMPTY_MD5 = "d41d8cd98f00b204e9800998ecf8427e";
+
+ private static final String EMPTY_SHA1 = "da39a3ee5e6b4b0d3255bfef95601890afd80709";
+
+ @Inject
+ @Named ( "archivaConfiguration#default" )
+ private ArchivaConfiguration configuration;
+
+ @Inject
+ RepositoryRegistry repositoryRegistry;
+
+ private WagonFactory wagonFactory;
+
+ ManagedRepositoryConfiguration testRepo;
+
+ Configuration c;
+
+ @Before
+ @Override
+ public void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ c = new Configuration();
+ testRepo = new ManagedRepositoryConfiguration();
+ testRepo.setId( TEST_REPO_ID );
+ testRepo.setLocation( Paths.get( "target/test-repository" ).toAbsolutePath().toString() );
+ testRepo.setReleases( true );
+ testRepo.setSnapshots( true );
+ c.addManagedRepository( testRepo );
+
+ RemoteRepositoryConfiguration testRemoteRepo = new RemoteRepositoryConfiguration();
+ testRemoteRepo.setId( TEST_REMOTE_REPO_ID );
+ testRemoteRepo.setLayout( "default" );
+ testRemoteRepo.setName( "Central Repository" );
+ testRemoteRepo.setUrl( "http://central.repo.com/maven2" );
+ testRemoteRepo.setTimeout( 10 );
+ c.addRemoteRepository( testRemoteRepo );
+
+ ProxyConnectorConfiguration proxyConnector = new ProxyConnectorConfiguration();
+ proxyConnector.setSourceRepoId( TEST_REPO_ID );
+ proxyConnector.setTargetRepoId( TEST_REMOTE_REPO_ID );
+ proxyConnector.setDisabled( false );
+ c.addProxyConnector( proxyConnector );
+
+ configuration.save( c );
+
+ repositoryRegistry.reload();
+
+ assertTrue( c.getManagedRepositories().get( 0 ).isSnapshots() );
+ assertTrue( c.getManagedRepositories().get( 0 ).isReleases() );
+
+ wagonFactory = mock( WagonFactory.class );
+
+ storage.setWagonFactory( wagonFactory );
+
+ Wagon wagon = new MockWagon();
+ when( wagonFactory.getWagon(
+ new WagonFactoryRequest( "wagon#http", new HashMap<String, String>() ) ) ).thenReturn( wagon );
+ }
+
+ // Tests for MRM-1411 - START
+ @Test
+ public void testGetProjectVersionMetadataWithParentSuccessful()
+ throws Exception
+ {
+ copyTestArtifactWithParent( "target/test-classes/com/example/test/test-artifact-module-a",
+ "target/test-repository/com/example/test/test-artifact-module-a" );
+ copyTestArtifactWithParent( "src/test/resources/com/example/test/test-artifact-parent",
+ "target/test-repository/com/example/test/test-artifact-parent" );
+
+ copyTestArtifactWithParent( "target/test-classes/com/example/test/test-artifact-root",
+ "target/test-repository/com/example/test/test-artifact-root" );
+
+ ProjectVersionMetadata metadata = storage.readProjectVersionMetadata(
+ new ReadMetadataRequest( TEST_REPO_ID, "com.example.test", "test-artifact-module-a", "1.0" ) );
+
+ MavenProjectFacet facet = (MavenProjectFacet) metadata.getFacet( MavenProjectFacet.FACET_ID );
+ assertEquals( "jar", facet.getPackaging() );
+ assertEquals( "http://maven.apache.org", metadata.getUrl() );
+ assertEquals( "com.example.test", facet.getParent().getGroupId() );
+ assertEquals( "test-artifact-root", facet.getParent().getArtifactId() );
+ assertEquals( "1.0", facet.getParent().getVersion() );
+ assertEquals( "test-artifact-module-a", facet.getArtifactId() );
+ assertEquals( "com.example.test", facet.getGroupId() );
+ assertNull( metadata.getCiManagement() );
+ assertNotNull( metadata.getDescription() );
+
+ checkApacheLicense( metadata );
+
+ assertEquals( "1.0", metadata.getId() );
+ assertEquals( "Test Artifact :: Module A", metadata.getName() );
+ String path = "test-artifact/trunk/test-artifact-module-a";
+ assertEquals( TEST_SCM_CONN_BASE + path, metadata.getScm().getConnection() );
+ assertEquals( TEST_SCM_DEV_CONN_BASE + path, metadata.getScm().getDeveloperConnection() );
+ assertEquals( TEST_SCM_URL_BASE + path, metadata.getScm().getUrl() );
+
+ List<Dependency> dependencies = metadata.getDependencies();
+ assertEquals( 2, dependencies.size() );
+ assertDependency( dependencies.get( 0 ), "commons-io", "commons-io", "1.4" );
+ assertDependency( dependencies.get( 1 ), "junit", "junit", "3.8.1", "test" );
+
+ List<String> paths = new ArrayList<>();
+ paths.add( "target/test-repository/com/example/test/test-artifact-module-a" );
+ paths.add( "target/test-repository/com/example/test/test-artifact-parent" );
+ paths.add( "target/test-repository/com/example/test/test-artifact-root" );
+
+ deleteTestArtifactWithParent( paths );
+ }
+
+ @Test
+ public void testGetProjectVersionMetadataWithParentNoRemoteReposConfigured()
+ throws Exception
+ {
+ // remove configuration
+ Configuration config = configuration.getConfiguration();
+ RemoteRepositoryConfiguration remoteRepo = config.findRemoteRepositoryById( TEST_REMOTE_REPO_ID );
+ config.removeRemoteRepository( remoteRepo );
+
+ configuration.save( config );
+
+ copyTestArtifactWithParent( "target/test-classes/com/example/test/test-artifact-module-a",
+ "target/test-repository/com/example/test/test-artifact-module-a" );
+
+ ProjectVersionMetadata metadata = storage.readProjectVersionMetadata(
+ new ReadMetadataRequest( TEST_REPO_ID, "com.example.test", "test-artifact-module-a", "1.0" ) );
+ assertEquals( "1.0", metadata.getId() );
+
+ MavenProjectFacet facet = (MavenProjectFacet) metadata.getFacet( MavenProjectFacet.FACET_ID );
+ assertNotNull( facet );
+ assertEquals( "com.example.test", facet.getGroupId() );
+ assertEquals( "test-artifact-module-a", facet.getArtifactId() );
+ assertEquals( "jar", facet.getPackaging() );
+
+ List<String> paths = new ArrayList<>();
+ paths.add( "target/test-repository/com/example/test/test-artifact-module-a" );
+ paths.add( "target/test-repository/com/example/test/test-artifact-parent" );
+ paths.add( "target/test-repository/com/example/test/test-artifact-root" );
+
+ deleteTestArtifactWithParent( paths );
+ }
+
+ @Test
+ public void testGetProjectVersionMetadataWithParentNotInAnyRemoteRepo()
+ throws Exception
+ {
+ copyTestArtifactWithParent( "target/test-classes/com/example/test/test-artifact-module-a",
+ "target/test-repository/com/example/test/test-artifact-module-a" );
+
+ ProjectVersionMetadata metadata = storage.readProjectVersionMetadata(
+ new ReadMetadataRequest( TEST_REPO_ID, "com.example.test", "missing-parent", "1.1" ) );
+
+ assertEquals( "1.1", metadata.getId() );
+
+ MavenProjectFacet facet = (MavenProjectFacet) metadata.getFacet( MavenProjectFacet.FACET_ID );
+ assertNotNull( facet );
+ assertEquals( "com.example.test", facet.getGroupId() );
+ assertEquals( "missing-parent", facet.getArtifactId() );
+ assertEquals( "jar", facet.getPackaging() );
+
+ List<String> paths = new ArrayList<>();
+ paths.add( "target/test-repository/com/example/test/test-artifact-module-a" );
+ paths.add( "target/test-repository/com/example/test/test-artifact-parent" );
+ paths.add( "target/test-repository/com/example/test/test-artifact-root" );
+
+ deleteTestArtifactWithParent( paths );
+ }
+
+ @Test
+ public void testGetProjectVersionMetadataWithParentSnapshotVersion()
+ throws Exception
+ {
+
+ copyTestArtifactWithParent( "target/test-classes/com/example/test/test-snapshot-artifact-module-a",
+ "target/test-repository/com/example/test/test-snapshot-artifact-module-a" );
+
+ copyTestArtifactWithParent( "src/test/resources/com/example/test/test-artifact-parent",
+ "target/test-repository/com/example/test/test-artifact-parent" );
+
+ copyTestArtifactWithParent( "target/test-classes/com/example/test/test-snapshot-artifact-root",
+ "target/test-repository/com/example/test/test-snapshot-artifact-root" );
+
+ ProjectVersionMetadata metadata = storage.readProjectVersionMetadata(
+ new ReadMetadataRequest( TEST_REPO_ID, "com.example.test", "test-snapshot-artifact-module-a",
+ "1.1-SNAPSHOT" ) );
+
+ MavenProjectFacet facet = (MavenProjectFacet) metadata.getFacet( MavenProjectFacet.FACET_ID );
+ assertEquals( "jar", facet.getPackaging() );
+ assertEquals( "com.example.test", facet.getParent().getGroupId() );
+ assertEquals( "test-snapshot-artifact-root", facet.getParent().getArtifactId() );
+ assertEquals( "1.1-SNAPSHOT", facet.getParent().getVersion() );
+ assertEquals( "test-snapshot-artifact-module-a", facet.getArtifactId() );
+ assertEquals( "com.example.test", facet.getGroupId() );
+ assertNull( metadata.getCiManagement() );
+ assertNotNull( metadata.getDescription() );
+
+ checkApacheLicense( metadata );
+
+ assertEquals( "1.1-SNAPSHOT", metadata.getId() );
+ assertEquals( "Test Snapshot Artifact :: Module A", metadata.getName() );
+ String path = "test-snapshot-artifact/trunk/test-snapshot-artifact-module-a";
+ assertEquals( TEST_SCM_CONN_BASE + path, metadata.getScm().getConnection() );
+ assertEquals( TEST_SCM_DEV_CONN_BASE + path, metadata.getScm().getDeveloperConnection() );
+ assertEquals( TEST_SCM_URL_BASE + path, metadata.getScm().getUrl() );
+
+ List<Dependency> dependencies = metadata.getDependencies();
+ assertEquals( 2, dependencies.size() );
+ assertDependency( dependencies.get( 0 ), "commons-io", "commons-io", "1.4" );
+ assertDependency( dependencies.get( 1 ), "junit", "junit", "3.8.1", "test" );
+
+ List<String> paths = new ArrayList<>();
+ paths.add( "target/test-repository/com/example/test/test-snapshot-artifact-module-a" );
+ paths.add( "target/test-repository/com/example/test/test-snapshot-artifact-root" );
+
+ deleteTestArtifactWithParent( paths );
+ }
+
+ @Test
+ public void testGetProjectVersionMetadataWithParentSnapshotVersionAndSnapNotAllowed()
+ throws Exception
+ {
+ testRepo.setSnapshots( false );
+ configuration.save( c );
+ repositoryRegistry.reload();
+ assertFalse( c.getManagedRepositories().get( 0 ).isSnapshots() );
+ copyTestArtifactWithParent( "target/test-classes/com/example/test/test-snapshot-artifact-module-a",
+ "target/test-repository/com/example/test/test-snapshot-artifact-module-a" );
+
+ try
+ {
+ ProjectVersionMetadata metadata = storage.readProjectVersionMetadata(
+ new ReadMetadataRequest( TEST_REPO_ID, "com.example.test", "test-snapshot-artifact-module-a",
+ "1.1-SNAPSHOT" ) );
+ fail( "Should not be found" );
+ }
+ catch ( RepositoryStorageRuntimeException e )
+ {
+ }
+
+ List<String> paths = new ArrayList<>();
+ paths.add( "target/test-repository/com/example/test/test-snapshot-artifact-module-a" );
+ paths.add( "target/test-repository/com/example/test/test-snapshot-artifact-root" );
+
+ deleteTestArtifactWithParent( paths );
+ }
+ // Tests for MRM-1411 - END
+
+ private void assertDependency( Dependency dependency, String groupId, String artifactId, String version )
+ {
+ assertDependency( dependency, groupId, artifactId, version, "compile" );
+ }
+
+ private void assertDependency( Dependency dependency, String groupId, String artifactId, String version,
+ String scope )
+ {
+ assertEquals( artifactId, dependency.getArtifactId() );
+ assertEquals( "jar", dependency.getType() );
+ assertEquals( version, dependency.getVersion() );
+ assertEquals( groupId, dependency.getGroupId() );
+ assertEquals( scope, dependency.getScope() );
+ assertNull( dependency.getClassifier() );
+ assertNull( dependency.getSystemPath() );
+ }
+
+ private void assertArtifact( ArtifactMetadata artifact, String id, int size, String sha1, String md5 )
+ {
+ assertEquals( id, artifact.getId() );
+ assertEquals( md5, artifact.getMd5() );
+ assertEquals( sha1, artifact.getSha1() );
+ assertEquals( size, artifact.getSize() );
+ assertEquals( "org.codehaus.plexus", artifact.getNamespace() );
+ assertEquals( "plexus-spring", artifact.getProject() );
+ assertEquals( "1.2", artifact.getVersion() );
+ assertEquals( TEST_REPO_ID, artifact.getRepositoryId() );
+ }
+
+ private void assertMailingList( MailingList mailingList, String name, String archive, String post, String subscribe,
+ String unsubscribe, List<String> otherArchives, boolean allowPost )
+ {
+ assertEquals( archive, mailingList.getMainArchiveUrl() );
+ if ( allowPost )
+ {
+ assertEquals( post, mailingList.getPostAddress() );
+ }
+ else
+ {
+ assertNull( mailingList.getPostAddress() );
+ }
+ assertEquals( subscribe, mailingList.getSubscribeAddress() );
+ assertEquals( unsubscribe, mailingList.getUnsubscribeAddress() );
+ assertEquals( name, mailingList.getName() );
+ assertEquals( otherArchives, mailingList.getOtherArchives() );
+ }
+
+ private void assertMailingList( String prefix, MailingList mailingList, String name, boolean allowPost,
+ String nabbleUrl )
+ {
+ List<String> otherArchives = new ArrayList<>();
+ otherArchives.add( "http://www.mail-archive.com/" + prefix + "@archiva.apache.org" );
+ if ( nabbleUrl != null )
+ {
+ otherArchives.add( nabbleUrl );
+ }
+ otherArchives.add( "http://markmail.org/list/org.apache.archiva." + prefix );
+ assertMailingList( mailingList, name, "http://mail-archives.apache.org/mod_mbox/archiva-" + prefix + "/",
+ prefix + "@archiva.apache.org", prefix + "-subscribe@archiva.apache.org",
+ prefix + "-unsubscribe@archiva.apache.org", otherArchives, allowPost );
+ }
+
+ private void checkApacheLicense( ProjectVersionMetadata metadata )
+ {
+ assertEquals( Arrays.asList( new License( "The Apache Software License, Version 2.0",
+ "http://www.apache.org/licenses/LICENSE-2.0.txt" ) ),
+ metadata.getLicenses() );
+ }
+
+ private void checkOrganizationApache( ProjectVersionMetadata metadata )
+ {
+ assertEquals( "The Apache Software Foundation", metadata.getOrganization().getName() );
+ assertEquals( "http://www.apache.org/", metadata.getOrganization().getUrl() );
+ }
+
+ private void deleteTestArtifactWithParent( List<String> pathsToBeDeleted )
+ throws IOException
+ {
+ for ( String path : pathsToBeDeleted )
+ {
+ Path dir = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), path );
+ org.apache.archiva.common.utils.FileUtils.deleteDirectory( dir );
+
+ assertFalse(Files.exists( dir) );
+ }
+ Path dest = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/test-repository/com/example/test/test-artifact-module-a" );
+ Path parentPom =
+ Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/test-repository/com/example/test/test-artifact-parent" );
+ Path rootPom = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/test-repository/com/example/test/test-artifact-root" );
+
+ org.apache.archiva.common.utils.FileUtils.deleteDirectory( dest );
+ org.apache.archiva.common.utils.FileUtils.deleteDirectory( parentPom );
+ org.apache.archiva.common.utils.FileUtils.deleteDirectory( rootPom );
+
+ assertFalse( Files.exists(dest) );
+ assertFalse( Files.exists(parentPom) );
+ assertFalse( Files.exists(rootPom) );
+ }
+
+ private Path copyTestArtifactWithParent( String srcPath, String destPath )
+ throws IOException
+ {
+ Path src = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), srcPath );
+ Path dest = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), destPath );
+
+ FileUtils.copyDirectory( src.toFile(), dest.toFile() );
+ assertTrue( Files.exists(dest) );
+ return dest;
+ }
+
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverManagedReleaseTest.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverManagedReleaseTest.java
new file mode 100644
index 000000000..a5dc3491c
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverManagedReleaseTest.java
@@ -0,0 +1,142 @@
+package org.apache.archiva.metadata.repository.storage.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.metadata.model.ProjectVersionMetadata;
+import org.apache.archiva.metadata.repository.filter.AllFilter;
+import org.apache.archiva.metadata.repository.filter.Filter;
+import org.apache.archiva.metadata.repository.storage.ReadMetadataRequest;
+import org.apache.archiva.metadata.repository.storage.RepositoryStorageRuntimeException;
+import org.apache.archiva.proxy.maven.WagonFactory;
+import org.apache.archiva.repository.RepositoryRegistry;
+import org.junit.Before;
+import org.junit.Test;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+
+public class Maven2RepositoryMetadataResolverManagedReleaseTest
+ extends Maven2RepositoryMetadataResolverTest
+{
+ private static final Filter<String> ALL = new AllFilter<String>();
+
+ @Inject
+ @Named ( "repositoryStorage#maven2")
+ private Maven2RepositoryStorage storage;
+
+ @Inject
+ RepositoryRegistry repositoryRegistry;
+
+ private static final String TEST_REPO_ID = "test";
+
+ private static final String TEST_REMOTE_REPO_ID = "central";
+
+ private static final String ASF_SCM_CONN_BASE = "scm:svn:http://svn.apache.org/repos/asf/";
+
+ private static final String ASF_SCM_DEV_CONN_BASE = "scm:svn:https://svn.apache.org/repos/asf/";
+
+ private static final String ASF_SCM_VIEWVC_BASE = "http://svn.apache.org/viewvc/";
+
+ private static final String TEST_SCM_CONN_BASE = "scm:svn:http://svn.example.com/repos/";
+
+ private static final String TEST_SCM_DEV_CONN_BASE = "scm:svn:https://svn.example.com/repos/";
+
+ private static final String TEST_SCM_URL_BASE = "http://svn.example.com/repos/";
+
+ private static final String EMPTY_MD5 = "d41d8cd98f00b204e9800998ecf8427e";
+
+ private static final String EMPTY_SHA1 = "da39a3ee5e6b4b0d3255bfef95601890afd80709";
+
+ private WagonFactory wagonFactory;
+
+ @Before
+ @Override
+ public void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ testRepo.setReleases( true );
+ testRepo.setSnapshots( false );
+
+ configuration.save( c );
+
+ repositoryRegistry.reload();
+
+ assertFalse( c.getManagedRepositories().get( 0 ).isSnapshots() );
+ assertTrue( c.getManagedRepositories().get( 0 ).isReleases() );
+
+ }
+
+ @Test
+ @Override
+ public void testModelWithJdkProfileActivation()
+ throws Exception
+ {
+ // skygo IMHO must fail because TEST_REPO_ID ( is snap ,no release) and we seek for a snapshot
+
+ ReadMetadataRequest readMetadataRequest =
+ new ReadMetadataRequest().repositoryId( TEST_REPO_ID ).namespace( "org.apache.maven" ).projectId(
+ "maven-archiver" ).projectVersion( "2.4.1" );
+
+ ProjectVersionMetadata metadata = storage.readProjectVersionMetadata( readMetadataRequest );
+ }
+
+ @Test (expected = RepositoryStorageRuntimeException.class)
+ @Override
+ public void testGetProjectVersionMetadataForTimestampedSnapshotMissingMetadata()
+ throws Exception
+ {
+ ReadMetadataRequest readMetadataRequest =
+ new ReadMetadataRequest().repositoryId( TEST_REPO_ID ).namespace( "com.example.test" ).projectId(
+ "missing-metadata" ).projectVersion( "1.0-SNAPSHOT" );
+ storage.readProjectVersionMetadata( readMetadataRequest );
+ }
+
+ @Test (expected = RepositoryStorageRuntimeException.class)
+ @Override
+ public void testGetProjectVersionMetadataForTimestampedSnapshotMalformedMetadata()
+ throws Exception
+ {
+ ReadMetadataRequest readMetadataRequest =
+ new ReadMetadataRequest().repositoryId( TEST_REPO_ID ).namespace( "com.example.test" ).projectVersion(
+ "malformed-metadata" ).projectVersion( "1.0-SNAPSHOT" );
+ storage.readProjectVersionMetadata( readMetadataRequest );
+ }
+
+ @Test (expected = RepositoryStorageRuntimeException.class)
+ @Override
+ public void testGetProjectVersionMetadataForTimestampedSnapshot()
+ throws Exception
+ {
+ super.testGetProjectVersionMetadataForTimestampedSnapshot();
+ }
+
+
+ @Test (expected = RepositoryStorageRuntimeException.class)
+ @Override
+ public void testGetProjectVersionMetadataForTimestampedSnapshotIncompleteMetadata()
+ throws Exception
+ {
+ super.testGetProjectVersionMetadataForTimestampedSnapshotIncompleteMetadata();
+ }
+
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverManagedSnapshotTest.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverManagedSnapshotTest.java
new file mode 100644
index 000000000..03a67cdea
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverManagedSnapshotTest.java
@@ -0,0 +1,141 @@
+package org.apache.archiva.metadata.repository.storage.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.metadata.model.ProjectVersionMetadata;
+import org.apache.archiva.metadata.repository.filter.AllFilter;
+import org.apache.archiva.metadata.repository.filter.Filter;
+import org.apache.archiva.metadata.repository.storage.ReadMetadataRequest;
+import org.apache.archiva.metadata.repository.storage.RepositoryStorageRuntimeException;
+import org.apache.archiva.repository.RepositoryRegistry;
+import org.junit.Before;
+import org.junit.Test;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+public class Maven2RepositoryMetadataResolverManagedSnapshotTest
+ extends Maven2RepositoryMetadataResolverTest
+{
+ private static final Filter<String> ALL = new AllFilter<String>();
+
+ @Inject
+ @Named ( "repositoryStorage#maven2")
+ private Maven2RepositoryStorage storage;
+
+ @Inject
+ RepositoryRegistry repositoryRegistry;
+
+ private static final String TEST_REPO_ID = "test";
+
+ private static final String TEST_REMOTE_REPO_ID = "central";
+
+ private static final String ASF_SCM_CONN_BASE = "scm:svn:http://svn.apache.org/repos/asf/";
+
+ private static final String ASF_SCM_DEV_CONN_BASE = "scm:svn:https://svn.apache.org/repos/asf/";
+
+ private static final String ASF_SCM_VIEWVC_BASE = "http://svn.apache.org/viewvc/";
+
+ private static final String TEST_SCM_CONN_BASE = "scm:svn:http://svn.example.com/repos/";
+
+ private static final String TEST_SCM_DEV_CONN_BASE = "scm:svn:https://svn.example.com/repos/";
+
+ private static final String TEST_SCM_URL_BASE = "http://svn.example.com/repos/";
+
+ private static final String EMPTY_MD5 = "d41d8cd98f00b204e9800998ecf8427e";
+
+
+ private static final String EMPTY_SHA1 = "da39a3ee5e6b4b0d3255bfef95601890afd80709";
+
+
+ @Before
+ @Override
+ public void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ testRepo.setReleases( false );
+ testRepo.setSnapshots( true );
+
+ configuration.save( c );
+
+ repositoryRegistry.reload();
+
+ assertTrue( c.getManagedRepositories().get( 0 ).isSnapshots() );
+ assertFalse( c.getManagedRepositories().get( 0 ).isReleases() );
+ }
+
+ @Test (expected = RepositoryStorageRuntimeException.class)
+ @Override
+ public void testModelWithJdkProfileActivation()
+ throws Exception
+ {
+ // skygo IMHO must fail because TEST_REPO_ID ( is snap ,no release) and we seek for a snapshot
+
+ ReadMetadataRequest readMetadataRequest =
+ new ReadMetadataRequest().repositoryId( TEST_REPO_ID ).namespace( "org.apache.maven" ).projectId(
+ "maven-archiver" ).projectVersion( "2.4.1" );
+
+ ProjectVersionMetadata metadata = storage.readProjectVersionMetadata( readMetadataRequest );
+ }
+
+ @Test (expected = RepositoryStorageRuntimeException.class)
+ @Override
+ public void testGetProjectVersionMetadataForMislocatedPom()
+ throws Exception
+ {
+ ReadMetadataRequest readMetadataRequest =
+ new ReadMetadataRequest().repositoryId( TEST_REPO_ID ).namespace( "com.example.test" ).projectId(
+ "mislocated-pom" ).projectVersion( "1.0" );
+ storage.readProjectVersionMetadata( readMetadataRequest );
+
+ }
+
+ @Test
+ @Override
+ public void testGetProjectVersionMetadata()
+ throws Exception
+ {
+ // super test is on release
+ }
+
+ @Test (expected = RepositoryStorageRuntimeException.class)
+ @Override
+ public void testGetProjectVersionMetadataForInvalidPom()
+ throws Exception
+ {
+ ReadMetadataRequest readMetadataRequest =
+ new ReadMetadataRequest().repositoryId( TEST_REPO_ID ).namespace( "com.example.test" ).projectId(
+ "invalid-pom" ).projectVersion( "1.0" );
+ storage.readProjectVersionMetadata( readMetadataRequest );
+ }
+
+ @Test (expected = RepositoryStorageRuntimeException.class)
+ @Override
+ public void testGetProjectVersionMetadataForMissingPom()
+ throws Exception
+ {
+ ReadMetadataRequest readMetadataRequest =
+ new ReadMetadataRequest().repositoryId( TEST_REPO_ID ).namespace( "com.example.test" ).projectId(
+ "missing-pom" ).projectVersion( "1.0" );
+ storage.readProjectVersionMetadata( readMetadataRequest );
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverTest.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverTest.java
new file mode 100644
index 000000000..9f1b4c523
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverTest.java
@@ -0,0 +1,815 @@
+package org.apache.archiva.metadata.repository.storage.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.configuration.ArchivaConfiguration;
+import org.apache.archiva.configuration.Configuration;
+import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
+import org.apache.archiva.configuration.ProxyConnectorConfiguration;
+import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
+import org.apache.archiva.configuration.RepositoryScanningConfiguration;
+import org.apache.archiva.metadata.model.ArtifactMetadata;
+import org.apache.archiva.metadata.model.Dependency;
+import org.apache.archiva.metadata.model.License;
+import org.apache.archiva.metadata.model.MailingList;
+import org.apache.archiva.metadata.model.ProjectVersionMetadata;
+import org.apache.archiva.metadata.model.maven2.MavenArtifactFacet;
+import org.apache.archiva.metadata.repository.filter.AllFilter;
+import org.apache.archiva.metadata.repository.filter.ExcludesFilter;
+import org.apache.archiva.metadata.repository.filter.Filter;
+import org.apache.archiva.metadata.repository.storage.ReadMetadataRequest;
+import org.apache.archiva.metadata.repository.storage.RepositoryStorageMetadataInvalidException;
+import org.apache.archiva.metadata.repository.storage.RepositoryStorageMetadataNotFoundException;
+import org.apache.archiva.proxy.maven.WagonFactory;
+import org.apache.archiva.proxy.maven.WagonFactoryRequest;
+import org.apache.archiva.repository.RepositoryRegistry;
+import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
+import org.apache.commons.io.FileUtils;
+import org.apache.maven.wagon.Wagon;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.test.context.ContextConfiguration;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import java.io.IOException;
+import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+@RunWith ( ArchivaSpringJUnit4ClassRunner.class )
+@ContextConfiguration ( { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml" } )
+public class Maven2RepositoryMetadataResolverTest
+ extends TestCase
+{
+ private static final Filter<String> ALL = new AllFilter<String>();
+
+ @Inject
+ @Named ( "repositoryStorage#maven2" )
+ private Maven2RepositoryStorage storage;
+
+ @Inject
+ RepositoryRegistry repositoryRegistry;
+
+ private static final String TEST_REPO_ID = "test";
+
+ private static final String TEST_REMOTE_REPO_ID = "central";
+
+ private static final String ASF_SCM_CONN_BASE = "scm:svn:http://svn.apache.org/repos/asf/";
+
+ private static final String ASF_SCM_DEV_CONN_BASE = "scm:svn:https://svn.apache.org/repos/asf/";
+
+ private static final String ASF_SCM_VIEWVC_BASE = "http://svn.apache.org/viewvc/";
+
+ private static final String TEST_SCM_CONN_BASE = "scm:svn:http://svn.example.com/repos/";
+
+ private static final String TEST_SCM_DEV_CONN_BASE = "scm:svn:https://svn.example.com/repos/";
+
+ private static final String TEST_SCM_URL_BASE = "http://svn.example.com/repos/";
+
+ private static final String EMPTY_MD5 = "d41d8cd98f00b204e9800998ecf8427e";
+
+ private static final String EMPTY_SHA1 = "da39a3ee5e6b4b0d3255bfef95601890afd80709";
+
+ @Inject
+ @Named ( "archivaConfiguration#default" )
+ protected ArchivaConfiguration configuration;
+
+ private WagonFactory wagonFactory;
+
+ ManagedRepositoryConfiguration testRepo;
+
+ Configuration c;
+
+ @Before
+ @Override
+ public void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ c = new Configuration();
+
+ c.setVersion("2.0");
+ testRepo = new ManagedRepositoryConfiguration();
+ testRepo.setId( TEST_REPO_ID );
+ testRepo.setLocation( Paths.get( "target/test-repository" ).toAbsolutePath().toString() );
+ testRepo.setReleases( true );
+ testRepo.setSnapshots( true );
+ c.addManagedRepository( testRepo );
+
+ RemoteRepositoryConfiguration testRemoteRepo = new RemoteRepositoryConfiguration();
+ testRemoteRepo.setId( TEST_REMOTE_REPO_ID );
+ testRemoteRepo.setLayout( "default" );
+ testRemoteRepo.setName( "Central Repository" );
+ testRemoteRepo.setUrl( "http://central.repo.com/maven2" );
+ testRemoteRepo.setTimeout( 10 );
+ c.addRemoteRepository( testRemoteRepo );
+
+ ProxyConnectorConfiguration proxyConnector = new ProxyConnectorConfiguration();
+ proxyConnector.setSourceRepoId( TEST_REPO_ID );
+ proxyConnector.setTargetRepoId( TEST_REMOTE_REPO_ID );
+ proxyConnector.setDisabled( false );
+ c.addProxyConnector( proxyConnector );
+
+ RepositoryScanningConfiguration scCfg = new RepositoryScanningConfiguration();
+ c.setRepositoryScanning(scCfg);
+
+ configuration.save( c );
+ assertFalse(configuration.isDefaulted());
+ repositoryRegistry.reload();
+
+ assertTrue( c.getManagedRepositories().get( 0 ).isSnapshots() );
+ assertTrue( c.getManagedRepositories().get( 0 ).isReleases() );
+
+ wagonFactory = mock( WagonFactory.class );
+
+ storage.setWagonFactory( wagonFactory );
+
+ Wagon wagon = new MockWagon();
+ when( wagonFactory.getWagon( new WagonFactoryRequest().protocol( "wagon#http" ) ) ).thenReturn( wagon );
+ }
+
+ @Test
+ public void testModelWithJdkProfileActivation()
+ throws Exception
+ {
+ ReadMetadataRequest readMetadataRequest =
+ new ReadMetadataRequest().repositoryId( TEST_REPO_ID ).namespace( "org.apache.maven" ).projectId(
+ "maven-archiver" ).projectVersion( "2.4.1" );
+ ProjectVersionMetadata metadata = storage.readProjectVersionMetadata( readMetadataRequest );
+ MavenProjectFacet facet = (MavenProjectFacet) metadata.getFacet( MavenProjectFacet.FACET_ID );
+ }
+
+ @Test
+ public void testGetProjectVersionMetadata()
+ throws Exception
+ {
+ ProjectVersionMetadata metadata = storage.readProjectVersionMetadata(
+ new ReadMetadataRequest( TEST_REPO_ID, "org.apache.archiva", "archiva-common", "1.2.1" ) );
+ MavenProjectFacet facet = (MavenProjectFacet) metadata.getFacet( MavenProjectFacet.FACET_ID );
+ assertEquals( "jar", facet.getPackaging() );
+ assertEquals( "http://archiva.apache.org/ref/1.2.1/archiva-base/archiva-common", metadata.getUrl() );
+ assertEquals( "org.apache.archiva", facet.getParent().getGroupId() );
+ assertEquals( "archiva-base", facet.getParent().getArtifactId() );
+ assertEquals( "1.2.1", facet.getParent().getVersion() );
+ assertEquals( "archiva-common", facet.getArtifactId() );
+ assertEquals( "org.apache.archiva", facet.getGroupId() );
+ assertEquals( "continuum", metadata.getCiManagement().getSystem() );
+ assertEquals( "http://vmbuild.apache.org/continuum", metadata.getCiManagement().getUrl() );
+ assertNotNull( metadata.getDescription() );
+ // TODO: this would be better
+// assertEquals(
+// "Archiva is an application for managing one or more remote repositories, including administration, artifact handling, browsing and searching.",
+// metadata.getDescription() );
+ assertEquals( "1.2.1", metadata.getId() );
+ assertEquals( "jira", metadata.getIssueManagement().getSystem() );
+ assertEquals( "http://jira.codehaus.org/browse/MRM", metadata.getIssueManagement().getUrl() );
+ checkApacheLicense( metadata );
+ assertEquals( "Archiva Base :: Common", metadata.getName() );
+ String path = "archiva/tags/archiva-1.2.1/archiva-modules/archiva-base/archiva-common";
+ assertEquals( ASF_SCM_CONN_BASE + path, metadata.getScm().getConnection() );
+ assertEquals( ASF_SCM_DEV_CONN_BASE + path, metadata.getScm().getDeveloperConnection() );
+ assertEquals( ASF_SCM_VIEWVC_BASE + path, metadata.getScm().getUrl() );
+ checkOrganizationApache( metadata );
+
+ assertEquals( 4, metadata.getMailingLists().size() );
+ assertMailingList( "users", metadata.getMailingLists().get( 0 ), "Archiva User List", true,
+ "http://www.nabble.com/archiva-users-f16426.html" );
+ assertMailingList( "dev", metadata.getMailingLists().get( 1 ), "Archiva Developer List", true,
+ "http://www.nabble.com/archiva-dev-f16427.html" );
+ assertMailingList( "commits", metadata.getMailingLists().get( 2 ), "Archiva Commits List", false, null );
+ assertMailingList( "issues", metadata.getMailingLists().get( 3 ), "Archiva Issues List", false,
+ "http://www.nabble.com/Archiva---Issues-f29617.html" );
+
+ List<Dependency> dependencies = metadata.getDependencies();
+ assertEquals( 10, dependencies.size() );
+ assertDependency( dependencies.get( 0 ), "commons-lang", "commons-lang", "2.2" );
+ assertDependency( dependencies.get( 1 ), "commons-io", "commons-io", "1.4" );
+ assertDependency( dependencies.get( 2 ), "org.slf4j", "slf4j-api", "1.5.0" );
+ assertDependency( dependencies.get( 3 ), "org.codehaus.plexus", "plexus-component-api", "1.0-alpha-22" );
+ assertDependency( dependencies.get( 4 ), "org.codehaus.plexus", "plexus-spring", "1.2", "test" );
+ assertDependency( dependencies.get( 5 ), "xalan", "xalan", "2.7.0" );
+ assertDependency( dependencies.get( 6 ), "dom4j", "dom4j", "1.6.1", "test" );
+ assertDependency( dependencies.get( 7 ), "junit", "junit", "3.8.1", "test" );
+ assertDependency( dependencies.get( 8 ), "easymock", "easymock", "1.2_Java1.3", "test" );
+ assertDependency( dependencies.get( 9 ), "easymock", "easymockclassextension", "1.2", "test" );
+
+ assertEquals( 8, metadata.getProperties().size() );
+ assertEquals( "http://www.apache.org/images/asf_logo_wide.gif", metadata.getProperties().get("organization.logo") );
+ }
+
+ @Test
+ public void testGetArtifactMetadata()
+ throws Exception
+ {
+ Collection<ArtifactMetadata> springArtifacts = storage.readArtifactsMetadata(
+ new ReadMetadataRequest( TEST_REPO_ID, "org.codehaus.plexus", "plexus-spring", "1.2", ALL ) );
+ List<ArtifactMetadata> artifacts = new ArrayList<>( springArtifacts );
+ Collections.sort( artifacts, new Comparator<ArtifactMetadata>()
+ {
+ @Override
+ public int compare( ArtifactMetadata o1, ArtifactMetadata o2 )
+ {
+ return o1.getId().compareTo( o2.getId() );
+ }
+ } );
+
+ assertEquals( 3, artifacts.size() );
+
+ ArtifactMetadata artifactMetadata = artifacts.get( 0 );
+ assertEquals( "plexus-spring-1.2-sources.jar", artifactMetadata.getId() );
+ MavenArtifactFacet facet = (MavenArtifactFacet) artifactMetadata.getFacet( MavenArtifactFacet.FACET_ID );
+ assertEquals( 0, facet.getBuildNumber() );
+ assertNull( facet.getTimestamp() );
+ assertEquals( "sources", facet.getClassifier() );
+ assertEquals( "java-source", facet.getType() );
+
+ artifactMetadata = artifacts.get( 1 );
+ assertEquals( "plexus-spring-1.2.jar", artifactMetadata.getId() );
+ facet = (MavenArtifactFacet) artifactMetadata.getFacet( MavenArtifactFacet.FACET_ID );
+ assertEquals( 0, facet.getBuildNumber() );
+ assertNull( facet.getTimestamp() );
+ assertNull( facet.getClassifier() );
+ assertEquals( "jar", facet.getType() );
+
+ artifactMetadata = artifacts.get( 2 );
+ assertEquals( "plexus-spring-1.2.pom", artifactMetadata.getId() );
+ facet = (MavenArtifactFacet) artifactMetadata.getFacet( MavenArtifactFacet.FACET_ID );
+ assertEquals( 0, facet.getBuildNumber() );
+ assertNull( facet.getTimestamp() );
+ assertNull( facet.getClassifier() );
+ assertEquals( "pom", facet.getType() );
+ }
+
+ @Test
+ public void testGetArtifactMetadataSnapshots()
+ throws Exception
+ {
+ Collection<ArtifactMetadata> testArtifacts = storage.readArtifactsMetadata(
+ new ReadMetadataRequest( TEST_REPO_ID, "com.example.test", "test-artifact", "1.0-SNAPSHOT", ALL ) );
+ List<ArtifactMetadata> artifacts = new ArrayList<>( testArtifacts );
+ Collections.sort( artifacts, new Comparator<ArtifactMetadata>()
+ {
+ @Override
+ public int compare( ArtifactMetadata o1, ArtifactMetadata o2 )
+ {
+ return o1.getId().compareTo( o2.getId() );
+ }
+ } );
+
+ assertEquals( 6, artifacts.size() );
+
+ ArtifactMetadata artifactMetadata = artifacts.get( 0 );
+ assertEquals( "test-artifact-1.0-20100308.230825-1.jar", artifactMetadata.getId() );
+ MavenArtifactFacet facet = (MavenArtifactFacet) artifactMetadata.getFacet( MavenArtifactFacet.FACET_ID );
+ assertEquals( 1, facet.getBuildNumber() );
+ assertEquals( "20100308.230825", facet.getTimestamp() );
+ assertNull( facet.getClassifier() );
+ assertEquals( "jar", facet.getType() );
+
+ artifactMetadata = artifacts.get( 1 );
+ assertEquals( "test-artifact-1.0-20100308.230825-1.pom", artifactMetadata.getId() );
+ facet = (MavenArtifactFacet) artifactMetadata.getFacet( MavenArtifactFacet.FACET_ID );
+ assertEquals( 1, facet.getBuildNumber() );
+ assertEquals( "20100308.230825", facet.getTimestamp() );
+ assertNull( facet.getClassifier() );
+ assertEquals( "pom", facet.getType() );
+
+ artifactMetadata = artifacts.get( 2 );
+ assertEquals( "test-artifact-1.0-20100310.014828-2-javadoc.jar", artifactMetadata.getId() );
+ facet = (MavenArtifactFacet) artifactMetadata.getFacet( MavenArtifactFacet.FACET_ID );
+ assertEquals( 2, facet.getBuildNumber() );
+ assertEquals( "20100310.014828", facet.getTimestamp() );
+ assertEquals( "javadoc", facet.getClassifier() );
+ assertEquals( "javadoc", facet.getType() );
+
+ artifactMetadata = artifacts.get( 3 );
+ assertEquals( "test-artifact-1.0-20100310.014828-2-sources.jar", artifactMetadata.getId() );
+ facet = (MavenArtifactFacet) artifactMetadata.getFacet( MavenArtifactFacet.FACET_ID );
+ assertEquals( 2, facet.getBuildNumber() );
+ assertEquals( "20100310.014828", facet.getTimestamp() );
+ assertEquals( "sources", facet.getClassifier() );
+ assertEquals( "java-source", facet.getType() );
+
+ artifactMetadata = artifacts.get( 4 );
+ assertEquals( "test-artifact-1.0-20100310.014828-2.jar", artifactMetadata.getId() );
+ facet = (MavenArtifactFacet) artifactMetadata.getFacet( MavenArtifactFacet.FACET_ID );
+ assertEquals( 2, facet.getBuildNumber() );
+ assertEquals( "20100310.014828", facet.getTimestamp() );
+ assertNull( facet.getClassifier() );
+ assertEquals( "jar", facet.getType() );
+
+ artifactMetadata = artifacts.get( 5 );
+ assertEquals( "test-artifact-1.0-20100310.014828-2.pom", artifactMetadata.getId() );
+ facet = (MavenArtifactFacet) artifactMetadata.getFacet( MavenArtifactFacet.FACET_ID );
+ assertEquals( 2, facet.getBuildNumber() );
+ assertEquals( "20100310.014828", facet.getTimestamp() );
+ assertNull( facet.getClassifier() );
+ assertEquals( "pom", facet.getType() );
+ }
+
+ @Test
+ public void testGetArtifactMetadataSnapshotsMRM1859()
+ throws Exception
+ {
+ Path repoDir = Paths.get("target/test-repository/com/example/test/test-artifact/1.0-SNAPSHOT");
+ URL url = Thread.currentThread().getContextClassLoader().getResource("resolver-status.properties");
+ Path resFile = Paths.get(url.toURI());
+ Path destFile = repoDir.resolve(resFile.getFileName());
+ Files.copy(resFile, destFile, StandardCopyOption.REPLACE_EXISTING);
+ URL url2 = Thread.currentThread().getContextClassLoader().getResource("test01.properties");
+ Path resFile2 = Paths.get(url2.toURI());
+ Path destFile2 = repoDir.resolve(resFile2.getFileName());
+ Files.copy(resFile2, destFile2, StandardCopyOption.REPLACE_EXISTING);
+
+ try {
+
+
+ Collection<ArtifactMetadata> testArtifacts = storage.readArtifactsMetadata(
+ new ReadMetadataRequest(TEST_REPO_ID, "com.example.test", "test-artifact", "1.0-SNAPSHOT", ALL));
+ List<ArtifactMetadata> artifacts = new ArrayList<>(testArtifacts);
+ Collections.sort(artifacts, new Comparator<ArtifactMetadata>() {
+ @Override
+ public int compare(ArtifactMetadata o1, ArtifactMetadata o2) {
+ return o1.getId().compareTo(o2.getId());
+ }
+ });
+
+ assertEquals(6, artifacts.size());
+
+ ArtifactMetadata artifactMetadata = artifacts.get(0);
+ assertEquals("test-artifact-1.0-20100308.230825-1.jar", artifactMetadata.getId());
+ MavenArtifactFacet facet = (MavenArtifactFacet) artifactMetadata.getFacet(MavenArtifactFacet.FACET_ID);
+ assertEquals(1, facet.getBuildNumber());
+ assertEquals("20100308.230825", facet.getTimestamp());
+ assertNull(facet.getClassifier());
+ assertEquals("jar", facet.getType());
+
+ artifactMetadata = artifacts.get(1);
+ assertEquals("test-artifact-1.0-20100308.230825-1.pom", artifactMetadata.getId());
+ facet = (MavenArtifactFacet) artifactMetadata.getFacet(MavenArtifactFacet.FACET_ID);
+ assertEquals(1, facet.getBuildNumber());
+ assertEquals("20100308.230825", facet.getTimestamp());
+ assertNull(facet.getClassifier());
+ assertEquals("pom", facet.getType());
+
+ artifactMetadata = artifacts.get(2);
+ assertEquals("test-artifact-1.0-20100310.014828-2-javadoc.jar", artifactMetadata.getId());
+ facet = (MavenArtifactFacet) artifactMetadata.getFacet(MavenArtifactFacet.FACET_ID);
+ assertEquals(2, facet.getBuildNumber());
+ assertEquals("20100310.014828", facet.getTimestamp());
+ assertEquals("javadoc", facet.getClassifier());
+ assertEquals("javadoc", facet.getType());
+
+ artifactMetadata = artifacts.get(3);
+ assertEquals("test-artifact-1.0-20100310.014828-2-sources.jar", artifactMetadata.getId());
+ facet = (MavenArtifactFacet) artifactMetadata.getFacet(MavenArtifactFacet.FACET_ID);
+ assertEquals(2, facet.getBuildNumber());
+ assertEquals("20100310.014828", facet.getTimestamp());
+ assertEquals("sources", facet.getClassifier());
+ assertEquals("java-source", facet.getType());
+
+ artifactMetadata = artifacts.get(4);
+ assertEquals("test-artifact-1.0-20100310.014828-2.jar", artifactMetadata.getId());
+ facet = (MavenArtifactFacet) artifactMetadata.getFacet(MavenArtifactFacet.FACET_ID);
+ assertEquals(2, facet.getBuildNumber());
+ assertEquals("20100310.014828", facet.getTimestamp());
+ assertNull(facet.getClassifier());
+ assertEquals("jar", facet.getType());
+
+ artifactMetadata = artifacts.get(5);
+ assertEquals("test-artifact-1.0-20100310.014828-2.pom", artifactMetadata.getId());
+ facet = (MavenArtifactFacet) artifactMetadata.getFacet(MavenArtifactFacet.FACET_ID);
+ assertEquals(2, facet.getBuildNumber());
+ assertEquals("20100310.014828", facet.getTimestamp());
+ assertNull(facet.getClassifier());
+ assertEquals("pom", facet.getType());
+
+ } finally {
+ Files.delete(destFile);
+ Files.delete(destFile2);
+ }
+
+ }
+
+ private void assertDependency( Dependency dependency, String groupId, String artifactId, String version )
+ {
+ assertDependency( dependency, groupId, artifactId, version, "compile" );
+ }
+
+ private void assertDependency( Dependency dependency, String groupId, String artifactId, String version,
+ String scope )
+ {
+ assertEquals( artifactId, dependency.getArtifactId() );
+ assertEquals( "jar", dependency.getType() );
+ assertEquals( version, dependency.getVersion() );
+ assertEquals( groupId, dependency.getGroupId() );
+ assertEquals( scope, dependency.getScope() );
+ assertNull( dependency.getClassifier() );
+ assertNull( dependency.getSystemPath() );
+ }
+
+ @Test
+ public void testGetProjectVersionMetadataForTimestampedSnapshot()
+ throws Exception
+ {
+ ProjectVersionMetadata metadata = storage.readProjectVersionMetadata(
+ new ReadMetadataRequest( TEST_REPO_ID, "org.apache", "apache", "5-SNAPSHOT" ) );
+ MavenProjectFacet facet = MavenProjectFacet.class.cast( metadata.getFacet( MavenProjectFacet.FACET_ID ) );
+ assertEquals( "pom", facet.getPackaging() );
+ assertEquals( "http://www.apache.org/", metadata.getUrl() );
+ assertNull( facet.getParent() );
+ assertEquals( "org.apache", facet.getGroupId() );
+ assertEquals( "apache", facet.getArtifactId() );
+ assertNull( metadata.getCiManagement() );
+ assertNotNull( metadata.getDescription() );
+ // TODO: this would be better
+// assertEquals(
+// "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.", metadata.getDescription() );
+ assertEquals( "5-SNAPSHOT", metadata.getId() );
+ assertNull( metadata.getIssueManagement() );
+ checkApacheLicense( metadata );
+ assertEquals( "The Apache Software Foundation", metadata.getName() );
+ String path = "maven/pom/trunk/asf";
+ assertEquals( ASF_SCM_CONN_BASE + path, metadata.getScm().getConnection() );
+ assertEquals( ASF_SCM_DEV_CONN_BASE + path, metadata.getScm().getDeveloperConnection() );
+ assertEquals( ASF_SCM_VIEWVC_BASE + path, metadata.getScm().getUrl() );
+ checkOrganizationApache( metadata );
+ assertEquals( 1, metadata.getMailingLists().size() );
+ assertMailingList( metadata.getMailingLists().get( 0 ), "Apache Announce List",
+ "http://mail-archives.apache.org/mod_mbox/www-announce/", "announce@apache.org",
+ "announce-subscribe@apache.org", "announce-unsubscribe@apache.org",
+ Collections.<String>emptyList(), true );
+ assertEquals( Collections.<Dependency>emptyList(), metadata.getDependencies() );
+ }
+
+ @Test
+ public void testGetProjectVersionMetadataForTimestampedSnapshotMissingMetadata()
+ throws Exception
+ {
+ try
+ {
+ storage.readProjectVersionMetadata(
+ new ReadMetadataRequest( TEST_REPO_ID, "com.example.test", "missing-metadata", "1.0-SNAPSHOT" ) );
+ fail( "Should not be found" );
+ }
+ catch ( RepositoryStorageMetadataNotFoundException e )
+ {
+ assertEquals( "missing-pom", e.getId() );
+ }
+ }
+
+ @Test
+ public void testGetProjectVersionMetadataForTimestampedSnapshotMalformedMetadata()
+ throws Exception
+ {
+ try
+ {
+ storage.readProjectVersionMetadata(
+ new ReadMetadataRequest( TEST_REPO_ID, "com.example.test", "malformed-metadata", "1.0-SNAPSHOT" ) );
+ fail( "Should not be found" );
+ }
+ catch ( RepositoryStorageMetadataNotFoundException e )
+ {
+ assertEquals( "missing-pom", e.getId() );
+ }
+ }
+
+ @Test
+ public void testGetProjectVersionMetadataForTimestampedSnapshotIncompleteMetadata()
+ throws Exception
+ {
+ try
+ {
+ storage.readProjectVersionMetadata(
+ new ReadMetadataRequest( TEST_REPO_ID, "com.example.test", "incomplete-metadata", "1.0-SNAPSHOT" ) );
+ fail( "Should not be found" );
+ }
+ catch ( RepositoryStorageMetadataNotFoundException e )
+ {
+ assertEquals( "missing-pom", e.getId() );
+ }
+ }
+
+ @Test
+ public void testGetProjectVersionMetadataForInvalidPom()
+ throws Exception
+ {
+ try
+ {
+ storage.readProjectVersionMetadata(
+ new ReadMetadataRequest( TEST_REPO_ID, "com.example.test", "invalid-pom", "1.0" ) );
+ fail( "Should have received an exception due to invalid POM" );
+ }
+ catch ( RepositoryStorageMetadataInvalidException e )
+ {
+ assertEquals( "invalid-pom", e.getId() );
+ }
+ }
+
+ @Test
+ public void testGetProjectVersionMetadataForMislocatedPom()
+ throws Exception
+ {
+ try
+ {
+ storage.readProjectVersionMetadata(
+ new ReadMetadataRequest( TEST_REPO_ID, "com.example.test", "mislocated-pom", "1.0" ) );
+ fail( "Should have received an exception due to mislocated POM" );
+ }
+ catch ( RepositoryStorageMetadataInvalidException e )
+ {
+ assertEquals( "mislocated-pom", e.getId() );
+ }
+ }
+
+ @Test
+ public void testGetProjectVersionMetadataForMissingPom()
+ throws Exception
+ {
+ try
+ {
+ storage.readProjectVersionMetadata(
+ new ReadMetadataRequest( TEST_REPO_ID, "com.example.test", "missing-pom", "1.0" ) );
+ fail( "Should not be found" );
+ }
+ catch ( RepositoryStorageMetadataNotFoundException e )
+ {
+ assertEquals( "missing-pom", e.getId() );
+ }
+ }
+
+ @Test
+ public void testGetRootNamespaces()
+ throws Exception
+ {
+ assertEquals( Arrays.asList( "com", "org"), storage.listRootNamespaces( TEST_REPO_ID, ALL ) );
+ }
+
+ @Test
+ public void testGetNamespaces()
+ throws Exception
+ {
+ assertEquals( Arrays.asList( "example" ), storage.listNamespaces( TEST_REPO_ID, "com", ALL ) );
+ assertEquals( Arrays.asList( "test" ), storage.listNamespaces( TEST_REPO_ID, "com.example", ALL ) );
+ assertEquals( Collections.<String>emptyList(),
+ storage.listNamespaces( TEST_REPO_ID, "com.example.test", ALL ) );
+
+ assertEquals( Arrays.asList( "apache", "codehaus" ), storage.listNamespaces( TEST_REPO_ID, "org", ALL ) );
+ assertEquals( Arrays.asList( "archiva", "maven" ), storage.listNamespaces( TEST_REPO_ID, "org.apache", ALL ) );
+ assertEquals( Collections.<String>emptyList(),
+ storage.listNamespaces( TEST_REPO_ID, "org.apache.archiva", ALL ) );
+ assertEquals( Arrays.asList( "plugins", "shared" ),
+ storage.listNamespaces( TEST_REPO_ID, "org.apache.maven", ALL ) );
+ assertEquals( Collections.<String>emptyList(),
+ storage.listNamespaces( TEST_REPO_ID, "org.apache.maven.plugins", ALL ) );
+ assertEquals( Collections.<String>emptyList(),
+ storage.listNamespaces( TEST_REPO_ID, "org.apache.maven.shared", ALL ) );
+
+ assertEquals( Arrays.asList( "plexus" ), storage.listNamespaces( TEST_REPO_ID, "org.codehaus", ALL ) );
+ assertEquals( Collections.<String>emptyList(),
+ storage.listNamespaces( TEST_REPO_ID, "org.codehaus.plexus", ALL ) );
+ }
+
+ @Test
+ public void testGetProjects()
+ throws Exception
+ {
+ assertEquals( Collections.<String>emptyList(), storage.listProjects( TEST_REPO_ID, "com", ALL ) );
+ assertEquals( Collections.<String>emptyList(), storage.listProjects( TEST_REPO_ID, "com.example", ALL ) );
+ assertEquals( Arrays.asList( "incomplete-metadata", "invalid-pom", "malformed-metadata", "mislocated-pom",
+ "missing-metadata", "missing-parent", "test-artifact" ),
+ storage.listProjects( TEST_REPO_ID, "com.example.test", ALL ) );
+
+ assertEquals( Collections.<String>emptyList(), storage.listProjects( TEST_REPO_ID, "org", ALL ) );
+ assertEquals( Arrays.asList( "apache" ), storage.listProjects( TEST_REPO_ID, "org.apache", ALL ) );
+ assertEquals( Arrays.asList( "archiva", "archiva-base", "archiva-common", "archiva-modules", "archiva-parent" ),
+ storage.listProjects( TEST_REPO_ID, "org.apache.archiva", ALL ) );
+ assertEquals( Arrays.asList( "maven-archiver", "maven-parent" ),
+ storage.listProjects( TEST_REPO_ID, "org.apache.maven", ALL ) );
+ assertEquals( Collections.<String>emptyList(),
+ storage.listProjects( TEST_REPO_ID, "org.apache.maven.plugins", ALL ) );
+ assertEquals( Arrays.asList( "maven-downloader", "maven-shared-components" ),
+ storage.listProjects( TEST_REPO_ID, "org.apache.maven.shared", ALL ) );
+ }
+
+ @Test
+ public void testGetProjectVersions()
+ throws Exception
+ {
+ assertEquals( Arrays.asList( "1.0-SNAPSHOT" ),
+ storage.listProjectVersions( TEST_REPO_ID, "com.example.test", "incomplete-metadata", ALL ) );
+ assertEquals( Arrays.asList( "1.0-SNAPSHOT" ),
+ storage.listProjectVersions( TEST_REPO_ID, "com.example.test", "malformed-metadata", ALL ) );
+ assertEquals( Arrays.asList( "1.0-SNAPSHOT" ),
+ storage.listProjectVersions( TEST_REPO_ID, "com.example.test", "missing-metadata", ALL ) );
+ assertEquals( Arrays.asList( "1.0" ),
+ storage.listProjectVersions( TEST_REPO_ID, "com.example.test", "invalid-pom", ALL ) );
+
+ assertEquals( Arrays.asList( "4", "5-SNAPSHOT", "7" ),
+ storage.listProjectVersions( TEST_REPO_ID, "org.apache", "apache", ALL ) );
+
+ assertEquals( Arrays.asList( "1.2.1", "1.2.2" ),
+ storage.listProjectVersions( TEST_REPO_ID, "org.apache.archiva", "archiva", ALL ) );
+ assertEquals( Arrays.asList( "1.2.1" ),
+ storage.listProjectVersions( TEST_REPO_ID, "org.apache.archiva", "archiva-base", ALL ) );
+ assertEquals( Arrays.asList( "1.2.1" ),
+ storage.listProjectVersions( TEST_REPO_ID, "org.apache.archiva", "archiva-common", ALL ) );
+ assertEquals( Arrays.asList( "1.2.1" ),
+ storage.listProjectVersions( TEST_REPO_ID, "org.apache.archiva", "archiva-modules", ALL ) );
+ assertEquals( Arrays.asList( "3" ),
+ storage.listProjectVersions( TEST_REPO_ID, "org.apache.archiva", "archiva-parent", ALL ) );
+
+ assertEquals( Collections.<String>emptyList(),
+ storage.listProjectVersions( TEST_REPO_ID, "org.apache.maven.shared", "maven-downloader", ALL ) );
+ }
+
+ @Test
+ public void testGetArtifacts()
+ throws Exception
+ {
+ List<ArtifactMetadata> artifacts = new ArrayList<>( storage.readArtifactsMetadata(
+ new ReadMetadataRequest( TEST_REPO_ID, "org.codehaus.plexus", "plexus-spring", "1.2", ALL ) ) );
+ assertEquals( 3, artifacts.size() );
+ Collections.sort( artifacts, new Comparator<ArtifactMetadata>()
+ {
+ @Override
+ public int compare( ArtifactMetadata o1, ArtifactMetadata o2 )
+ {
+ return o1.getId().compareTo( o2.getId() );
+ }
+ } );
+
+ assertArtifact( artifacts.get( 0 ), "plexus-spring-1.2-sources.jar", 0, EMPTY_SHA1, EMPTY_MD5 );
+ assertArtifact( artifacts.get( 1 ), "plexus-spring-1.2.jar", 0, EMPTY_SHA1, EMPTY_MD5 );
+ assertArtifact( artifacts.get( 2 ), "plexus-spring-1.2.pom", 7407, "96b14cf880e384b2d15e8193c57b65c5420ca4c5",
+ "f83aa25f016212a551a4b2249985effc" );
+ }
+
+ @Test
+ public void testGetArtifactsFiltered()
+ throws Exception
+ {
+ ExcludesFilter<String> filter =
+ new ExcludesFilter<String>( Collections.singletonList( "plexus-spring-1.2.pom" ) );
+ List<ArtifactMetadata> artifacts = new ArrayList<>( storage.readArtifactsMetadata(
+ new ReadMetadataRequest( TEST_REPO_ID, "org.codehaus.plexus", "plexus-spring", "1.2", filter ) ) );
+ assertEquals( 2, artifacts.size() );
+ Collections.sort( artifacts, new Comparator<ArtifactMetadata>()
+ {
+ @Override
+ public int compare( ArtifactMetadata o1, ArtifactMetadata o2 )
+ {
+ return o1.getId().compareTo( o2.getId() );
+ }
+ } );
+
+ assertArtifact( artifacts.get( 0 ), "plexus-spring-1.2-sources.jar", 0, EMPTY_SHA1, EMPTY_MD5 );
+ assertArtifact( artifacts.get( 1 ), "plexus-spring-1.2.jar", 0, EMPTY_SHA1, EMPTY_MD5 );
+ }
+
+ @Test
+ public void testGetArtifactsTimestampedSnapshots()
+ throws Exception
+ {
+ List<ArtifactMetadata> artifacts = new ArrayList<ArtifactMetadata>( storage.readArtifactsMetadata(
+ new ReadMetadataRequest( TEST_REPO_ID, "com.example.test", "missing-metadata", "1.0-SNAPSHOT", ALL ) ) );
+ assertEquals( 1, artifacts.size() );
+
+ ArtifactMetadata artifact = artifacts.get( 0 );
+ assertEquals( "missing-metadata-1.0-20091101.112233-1.pom", artifact.getId() );
+ assertEquals( "com.example.test", artifact.getNamespace() );
+ assertEquals( "missing-metadata", artifact.getProject() );
+ assertEquals( "1.0-20091101.112233-1", artifact.getVersion() );
+ assertEquals( TEST_REPO_ID, artifact.getRepositoryId() );
+ }
+
+ private void assertArtifact( ArtifactMetadata artifact, String id, int size, String sha1, String md5 )
+ {
+ assertEquals( id, artifact.getId() );
+ assertEquals( md5, artifact.getMd5() );
+ assertEquals( sha1, artifact.getSha1() );
+ assertEquals( size, artifact.getSize() );
+ assertEquals( "org.codehaus.plexus", artifact.getNamespace() );
+ assertEquals( "plexus-spring", artifact.getProject() );
+ assertEquals( "1.2", artifact.getVersion() );
+ assertEquals( TEST_REPO_ID, artifact.getRepositoryId() );
+ }
+
+ private void assertMailingList( MailingList mailingList, String name, String archive, String post, String subscribe,
+ String unsubscribe, List<String> otherArchives, boolean allowPost )
+ {
+ assertEquals( archive, mailingList.getMainArchiveUrl() );
+ if ( allowPost )
+ {
+ assertEquals( post, mailingList.getPostAddress() );
+ }
+ else
+ {
+ assertNull( mailingList.getPostAddress() );
+ }
+ assertEquals( subscribe, mailingList.getSubscribeAddress() );
+ assertEquals( unsubscribe, mailingList.getUnsubscribeAddress() );
+ assertEquals( name, mailingList.getName() );
+ assertEquals( otherArchives, mailingList.getOtherArchives() );
+ }
+
+ private void assertMailingList( String prefix, MailingList mailingList, String name, boolean allowPost,
+ String nabbleUrl )
+ {
+ List<String> otherArchives = new ArrayList<>();
+ otherArchives.add( "http://www.mail-archive.com/" + prefix + "@archiva.apache.org" );
+ if ( nabbleUrl != null )
+ {
+ otherArchives.add( nabbleUrl );
+ }
+ otherArchives.add( "http://markmail.org/list/org.apache.archiva." + prefix );
+ assertMailingList( mailingList, name, "http://mail-archives.apache.org/mod_mbox/archiva-" + prefix + "/",
+ prefix + "@archiva.apache.org", prefix + "-subscribe@archiva.apache.org",
+ prefix + "-unsubscribe@archiva.apache.org", otherArchives, allowPost );
+ }
+
+ private void checkApacheLicense( ProjectVersionMetadata metadata )
+ {
+ assertEquals( Arrays.asList( new License( "The Apache Software License, Version 2.0",
+ "http://www.apache.org/licenses/LICENSE-2.0.txt" ) ),
+ metadata.getLicenses() );
+ }
+
+ private void checkOrganizationApache( ProjectVersionMetadata metadata )
+ {
+ assertEquals( "The Apache Software Foundation", metadata.getOrganization().getName() );
+ assertEquals( "http://www.apache.org/", metadata.getOrganization().getUrl() );
+ }
+
+ private void deleteTestArtifactWithParent( List<String> pathsToBeDeleted )
+ throws IOException
+ {
+ for ( String path : pathsToBeDeleted )
+ {
+ Path dir = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), path );
+ org.apache.archiva.common.utils.FileUtils.deleteDirectory( dir );
+
+ assertFalse( Files.exists(dir) );
+ }
+ Path dest = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/test-repository/com/example/test/test-artifact-module-a" );
+ Path parentPom =
+ Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/test-repository/com/example/test/test-artifact-parent" );
+ Path rootPom = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/test-repository/com/example/test/test-artifact-root" );
+
+ org.apache.archiva.common.utils.FileUtils.deleteDirectory( dest );
+ org.apache.archiva.common.utils.FileUtils.deleteDirectory( parentPom );
+ org.apache.archiva.common.utils.FileUtils.deleteDirectory( rootPom );
+
+ assertFalse( Files.exists(dest) );
+ assertFalse( Files.exists(parentPom) );
+ assertFalse( Files.exists(rootPom) );
+ }
+
+ private Path copyTestArtifactWithParent( String srcPath, String destPath )
+ throws IOException
+ {
+ Path src = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), srcPath );
+ Path dest = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), destPath );
+
+ FileUtils.copyDirectory( src.toFile(), dest.toFile() );
+ assertTrue( Files.exists(dest) );
+ return dest;
+ }
+
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/MavenRepositoryMetadataReaderTest.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/MavenRepositoryMetadataReaderTest.java
new file mode 100644
index 000000000..e2fec5010
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/MavenRepositoryMetadataReaderTest.java
@@ -0,0 +1,128 @@
+package org.apache.archiva.metadata.repository.storage.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.maven2.metadata.MavenMetadataReader;
+import org.apache.archiva.model.ArchivaRepositoryMetadata;
+import org.apache.archiva.model.Plugin;
+import org.apache.archiva.test.utils.ArchivaBlockJUnit4ClassRunner;
+import org.apache.archiva.xml.XMLException;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Arrays;
+
+/**
+ * RepositoryMetadataReaderTest
+ *
+ *
+ */
+@RunWith( ArchivaBlockJUnit4ClassRunner.class )
+public class MavenRepositoryMetadataReaderTest
+ extends TestCase
+{
+ private Path defaultRepoDir;
+
+ @Test
+ public void testGroupMetadata()
+ throws XMLException
+ {
+ Path metadataFile = defaultRepoDir.resolve( "org/apache/maven/plugins/maven-metadata.xml" );
+
+ ArchivaRepositoryMetadata metadata = MavenMetadataReader.read( metadataFile );
+
+ assertNotNull( metadata );
+ assertEquals( "org.apache.maven.plugins", metadata.getGroupId() );
+ assertNull( metadata.getArtifactId() );
+ assertNull( metadata.getReleasedVersion() );
+ assertNull( metadata.getLatestVersion() );
+ assertTrue( metadata.getAvailableVersions().isEmpty() );
+ assertNull( metadata.getSnapshotVersion() );
+ assertNull( metadata.getLastUpdated() );
+
+ Plugin cleanPlugin = new Plugin();
+ cleanPlugin.setPrefix( "clean" );
+ cleanPlugin.setArtifactId( "maven-clean-plugin" );
+ cleanPlugin.setName( "Maven Clean Plugin" );
+
+ Plugin compilerPlugin = new Plugin();
+ compilerPlugin.setPrefix( "compiler" );
+ compilerPlugin.setArtifactId( "maven-compiler-plugin" );
+ compilerPlugin.setName( "Maven Compiler Plugin" );
+
+ Plugin surefirePlugin = new Plugin();
+ surefirePlugin.setPrefix( "surefire" );
+ surefirePlugin.setArtifactId( "maven-surefire-plugin" );
+ surefirePlugin.setName( "Maven Surefire Plugin" );
+
+ assertEquals( Arrays.asList( cleanPlugin, compilerPlugin, surefirePlugin ), metadata.getPlugins() );
+ }
+
+ @Test
+ public void testProjectMetadata()
+ throws XMLException
+ {
+ Path metadataFile = defaultRepoDir.resolve( "org/apache/maven/shared/maven-downloader/maven-metadata.xml" );
+
+ ArchivaRepositoryMetadata metadata = MavenMetadataReader.read( metadataFile);
+
+ assertNotNull( metadata );
+ assertEquals( "org.apache.maven.shared", metadata.getGroupId() );
+ assertEquals( "maven-downloader", metadata.getArtifactId() );
+ assertEquals( "1.1", metadata.getReleasedVersion() );
+ assertNull( metadata.getLatestVersion() );
+ assertEquals( Arrays.asList( "1.0", "1.1" ), metadata.getAvailableVersions() );
+ assertNull( metadata.getSnapshotVersion() );
+ assertEquals( "20061212214311", metadata.getLastUpdated() );
+ }
+
+ @Test
+ public void testProjectVersionMetadata()
+ throws XMLException
+ {
+ Path metadataFile = defaultRepoDir.resolve( "org/apache/apache/5-SNAPSHOT/maven-metadata.xml" );
+
+ ArchivaRepositoryMetadata metadata = MavenMetadataReader.read( metadataFile );
+
+ assertNotNull( metadata );
+ assertEquals( "org.apache", metadata.getGroupId() );
+ assertEquals( "apache", metadata.getArtifactId() );
+ assertNull( metadata.getReleasedVersion() );
+ assertNull( metadata.getLatestVersion() );
+ assertTrue( metadata.getAvailableVersions().isEmpty() );
+ assertNotNull( metadata.getSnapshotVersion() );
+ assertEquals( "20080801.151215", metadata.getSnapshotVersion().getTimestamp() );
+ assertEquals( 1, metadata.getSnapshotVersion().getBuildNumber() );
+ assertEquals( "20080801151215", metadata.getLastUpdated() );
+ }
+
+ @Before
+ @Override
+ public void setUp()
+ throws Exception
+ {
+ super.setUp();
+ defaultRepoDir = Paths.get("target/test-repository");
+ }
+} \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/MockWagon.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/MockWagon.java
new file mode 100644
index 000000000..f28f77798
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/MockWagon.java
@@ -0,0 +1,248 @@
+package org.apache.archiva.metadata.repository.storage.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.commons.io.FileUtils;
+import org.apache.maven.wagon.ConnectionException;
+import org.apache.maven.wagon.ResourceDoesNotExistException;
+import org.apache.maven.wagon.TransferFailedException;
+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.SessionListener;
+import org.apache.maven.wagon.events.TransferListener;
+import org.apache.maven.wagon.proxy.ProxyInfo;
+import org.apache.maven.wagon.proxy.ProxyInfoProvider;
+import org.apache.maven.wagon.repository.Repository;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+public class MockWagon
+ implements Wagon
+{
+ @Override
+ public void get( String s, File file )
+ throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
+ {
+ String sourceFile = getBasedir() + "/src/test/resources/" + s;
+
+ try
+ {
+ FileUtils.copyFile( new File( sourceFile ), file );
+ assert( file.exists() );
+ }
+ catch( IOException e )
+ {
+ throw new ResourceDoesNotExistException( e.getMessage() );
+ }
+ }
+
+ @Override
+ public boolean getIfNewer( String s, File file, long l )
+ throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
+ {
+ return false;
+ }
+
+ @Override
+ public void put( File file, String s )
+ throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
+ {
+
+ }
+
+ @Override
+ public void putDirectory( File file, String s )
+ throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
+ {
+
+ }
+
+ @Override
+ public boolean resourceExists( String s )
+ throws TransferFailedException, AuthorizationException
+ {
+ return false;
+ }
+
+ @Override
+ public List<String> getFileList( String s )
+ throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
+ {
+ return null;
+ }
+
+ @Override
+ public boolean supportsDirectoryCopy()
+ {
+ return false;
+ }
+
+ @Override
+ public Repository getRepository()
+ {
+ return null;
+ }
+
+ @Override
+ public void connect( Repository repository )
+ throws ConnectionException, AuthenticationException
+ {
+
+ }
+
+ @Override
+ public void connect( Repository repository, ProxyInfo proxyInfo )
+ throws ConnectionException, AuthenticationException
+ {
+
+ }
+
+ @Override
+ public void connect( Repository repository, ProxyInfoProvider proxyInfoProvider )
+ throws ConnectionException, AuthenticationException
+ {
+
+ }
+
+ @Override
+ public void connect( Repository repository, AuthenticationInfo authenticationInfo )
+ throws ConnectionException, AuthenticationException
+ {
+
+ }
+
+ @Override
+ public void connect( Repository repository, AuthenticationInfo authenticationInfo, ProxyInfo proxyInfo )
+ throws ConnectionException, AuthenticationException
+ {
+
+ }
+
+ @Override
+ public void connect( Repository repository, AuthenticationInfo authenticationInfo,
+ ProxyInfoProvider proxyInfoProvider )
+ throws ConnectionException, AuthenticationException
+ {
+
+ }
+
+ @Deprecated
+ @Override
+ public void openConnection()
+ throws ConnectionException, AuthenticationException
+ {
+
+ }
+
+ @Override
+ public void disconnect()
+ throws ConnectionException
+ {
+
+ }
+
+ @Override
+ public void setTimeout( int i )
+ {
+
+ }
+
+ @Override
+ public int getTimeout()
+ {
+ return 0;
+ }
+
+ @Override
+ public void setReadTimeout( int timeoutValue )
+ {
+
+ }
+
+ @Override
+ public int getReadTimeout()
+ {
+ return 0;
+ }
+
+ @Override
+ public void addSessionListener( SessionListener sessionListener )
+ {
+
+ }
+
+ @Override
+ public void removeSessionListener( SessionListener sessionListener )
+ {
+
+ }
+
+ @Override
+ public boolean hasSessionListener( SessionListener sessionListener )
+ {
+ return false;
+ }
+
+ @Override
+ public void addTransferListener( TransferListener transferListener )
+ {
+
+ }
+
+ @Override
+ public void removeTransferListener( TransferListener transferListener )
+ {
+
+ }
+
+ @Override
+ public boolean hasTransferListener( TransferListener transferListener )
+ {
+ return false;
+ }
+
+ @Override
+ public boolean isInteractive()
+ {
+ return false;
+ }
+
+ @Override
+ public void setInteractive( boolean b )
+ {
+
+ }
+
+ public String getBasedir()
+ {
+ String basedir = System.getProperty( "basedir" );
+
+ if ( basedir == null )
+ {
+ basedir = new File( "" ).getAbsolutePath();
+ }
+
+ return basedir;
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/RemoteDefaultRepositoryContentTest.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/RemoteDefaultRepositoryContentTest.java
new file mode 100644
index 000000000..42a5b26a9
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/RemoteDefaultRepositoryContentTest.java
@@ -0,0 +1,68 @@
+package org.apache.archiva.metadata.repository.storage.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.model.ArtifactReference;
+import org.apache.archiva.repository.LayoutException;
+import org.apache.archiva.repository.RemoteRepository;
+import org.apache.archiva.repository.RemoteRepositoryContent;
+import org.apache.archiva.repository.content.maven2.RemoteDefaultRepositoryContent;
+import org.junit.Before;
+
+import javax.inject.Inject;
+import java.util.List;
+
+/**
+ * RemoteDefaultRepositoryContentTest
+ */
+public class RemoteDefaultRepositoryContentTest
+ extends AbstractDefaultRepositoryContentTestCase
+{
+
+ @Inject
+ private List<? extends ArtifactMappingProvider> artifactMappingProviders;
+
+ private RemoteRepositoryContent repoContent;
+
+ @Before
+ public void setUp()
+ throws Exception
+ {
+ RemoteRepository repository =
+ createRemoteRepository( "testRemoteRepo", "Unit Test Remote Repo", "http://repo1.maven.org/maven2/" );
+
+ repoContent = new RemoteDefaultRepositoryContent(artifactMappingProviders);
+ //repoContent = (RemoteRepositoryContent) lookup( RemoteRepositoryContent.class, "default" );
+ repoContent.setRepository( repository );
+ }
+
+ @Override
+ protected ArtifactReference toArtifactReference( String path )
+ throws LayoutException
+ {
+ return repoContent.toArtifactReference( path );
+ }
+
+ @Override
+ protected String toPath( ArtifactReference reference )
+ {
+ return repoContent.toPath( reference );
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/conf/MockConfiguration.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/conf/MockConfiguration.java
new file mode 100644
index 000000000..474d3dfe2
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/conf/MockConfiguration.java
@@ -0,0 +1,170 @@
+package org.apache.archiva.metadata.repository.storage.maven2.conf;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.configuration.ArchivaConfiguration;
+import org.apache.archiva.configuration.Configuration;
+import org.apache.archiva.configuration.ConfigurationListener;
+import org.apache.archiva.redback.components.registry.Registry;
+import org.apache.archiva.redback.components.registry.RegistryException;
+import org.apache.archiva.redback.components.registry.RegistryListener;
+import org.apache.commons.lang.StringUtils;
+import org.easymock.IMocksControl;
+import org.springframework.stereotype.Service;
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
+
+import static org.easymock.EasyMock.createNiceControl;
+
+/**
+ * MockConfiguration
+ *
+ *
+ */
+@Service("archivaConfiguration#mock")
+public class MockConfiguration
+ implements ArchivaConfiguration
+{
+
+ private Configuration configuration = new Configuration();
+
+ private Set<RegistryListener> registryListeners = new HashSet<RegistryListener>();
+ private Set<ConfigurationListener> configListeners = new HashSet<ConfigurationListener>();
+
+ private IMocksControl registryControl;
+
+ private Registry registryMock;
+
+ public MockConfiguration()
+ {
+ registryControl = createNiceControl();
+ registryMock = registryControl.createMock( Registry.class );
+ }
+
+ @Override
+ public void addChangeListener( RegistryListener listener )
+ {
+ registryListeners.add( listener );
+ }
+
+ @Override
+ public void removeChangeListener( RegistryListener listener )
+ {
+ registryListeners.remove( listener );
+ }
+
+ @Override
+ public Configuration getConfiguration()
+ {
+ return configuration;
+ }
+
+ @Override
+ public void save( Configuration configuration )
+ throws RegistryException
+ {
+ /* do nothing */
+ }
+
+ public void triggerChange( String name, String value )
+ {
+ for(RegistryListener listener: registryListeners)
+ {
+ try
+ {
+ listener.afterConfigurationChange( registryMock, name, value );
+ }
+ catch ( Exception e )
+ {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ @Override
+ public void addListener( ConfigurationListener listener )
+ {
+ configListeners.add(listener);
+ }
+
+ @Override
+ public void removeListener( ConfigurationListener listener )
+ {
+ configListeners.remove( listener );
+ }
+
+ @Override
+ public boolean isDefaulted()
+ {
+ return false;
+ }
+
+ @Override
+ public void reload()
+ {
+ // no op
+ }
+
+ @Override
+ public Locale getDefaultLocale( )
+ {
+ return Locale.getDefault();
+ }
+
+ @Override
+ public List<Locale.LanguageRange> getLanguagePriorities( )
+ {
+ return Locale.LanguageRange.parse( "en,fr,de" );
+ }
+
+ @Override
+ public Path getAppServerBaseDir() {
+ if (System.getProperties().containsKey("appserver.base")) {
+ return Paths.get(System.getProperty("appserver.base"));
+ } else {
+ return Paths.get("");
+ }
+ }
+
+
+ @Override
+ public Path getRepositoryBaseDir() {
+ return getDataDirectory().resolve("repositories");
+ }
+
+ @Override
+ public Path getRemoteRepositoryBaseDir() {
+ return getDataDirectory().resolve("remotes");
+ }
+
+ @Override
+ public Path getDataDirectory() {
+ if (configuration!=null && StringUtils.isNotEmpty(configuration.getArchivaRuntimeConfiguration().getDataDirectory())) {
+ return Paths.get(configuration.getArchivaRuntimeConfiguration().getDataDirectory());
+ } else {
+ return getAppServerBaseDir().resolve("data");
+ }
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/AbstractRepositoryLayerTestCase.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/AbstractRepositoryLayerTestCase.java
new file mode 100644
index 000000000..0c2fdbd78
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/AbstractRepositoryLayerTestCase.java
@@ -0,0 +1,94 @@
+package org.apache.archiva.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.archiva.repository.maven2.MavenManagedRepository;
+import org.apache.archiva.repository.maven2.MavenRemoteRepository;
+import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
+import org.junit.Rule;
+import org.junit.rules.TestName;
+import org.junit.runner.RunWith;
+import org.springframework.context.ApplicationContext;
+import org.springframework.test.context.ContextConfiguration;
+
+import javax.inject.Inject;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+/**
+ * AbstractRepositoryLayerTestCase
+ *
+ *
+ */
+@RunWith( ArchivaSpringJUnit4ClassRunner.class )
+@ContextConfiguration( { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context-no-mock-conf.xml" } )
+public abstract class AbstractRepositoryLayerTestCase
+{
+ @Rule
+ public TestName name = new TestName();
+
+ @Inject
+ protected ApplicationContext applicationContext;
+
+ protected MavenManagedRepository createRepository( String id, String name, Path location )
+ {
+ MavenManagedRepository repo = new MavenManagedRepository( id, name, location.getParent().toAbsolutePath());
+ repo.setLocation( location.toAbsolutePath().toUri() );
+ return repo;
+ }
+
+ protected MavenRemoteRepository createRemoteRepository( String id, String name, String url ) throws URISyntaxException
+ {
+ MavenRemoteRepository repo = new MavenRemoteRepository(id, name, Paths.get("target/remotes"));
+ repo.setLocation( new URI( url ) );
+ return repo;
+ }
+
+ protected ManagedRepositoryContent createManagedRepositoryContent( String id, String name, Path location,
+ String layout )
+ throws Exception
+ {
+ MavenManagedRepository repo = new MavenManagedRepository( id, name, location.getParent() );
+ repo.setLocation( location.toAbsolutePath().toUri() );
+ repo.setLayout( layout );
+
+ RepositoryContentProvider provider = applicationContext.getBean( "repositoryContentProvider#maven", RepositoryContentProvider.class );
+ ManagedRepositoryContent repoContent =
+ provider.createManagedContent( repo );
+
+ return repoContent;
+ }
+
+ protected RemoteRepositoryContent createRemoteRepositoryContent( String id, String name, String url, String layout )
+ throws Exception
+ {
+ MavenRemoteRepository repo = new MavenRemoteRepository(id, name, Paths.get("target/remotes"));
+ repo.setLocation( new URI( url ) );
+ repo.setLayout( layout );
+
+ RepositoryContentProvider provider = applicationContext.getBean( "repositoryContentProvider#maven", RepositoryContentProvider.class );
+ RemoteRepositoryContent repoContent =
+ provider.createRemoteContent( repo );
+
+ return repoContent;
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/RepositoryURLTest.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/RepositoryURLTest.java
new file mode 100644
index 000000000..08f79ff33
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/RepositoryURLTest.java
@@ -0,0 +1,100 @@
+package org.apache.archiva.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;
+import org.apache.archiva.model.RepositoryURL;
+import org.apache.archiva.test.utils.ArchivaBlockJUnit4ClassRunner;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.net.MalformedURLException;
+
+/**
+ * RepositoryURLTest
+ *
+ *
+ */
+@RunWith( ArchivaBlockJUnit4ClassRunner.class )
+public class RepositoryURLTest
+ extends TestCase
+{
+ private void assertURL( String actualURL, String protocol, String username, String password, String hostname,
+ String port, String path )
+ {
+ RepositoryURL url = new RepositoryURL( actualURL );
+
+ assertEquals( protocol, url.getProtocol() );
+ assertEquals( username, url.getUsername() );
+ assertEquals( password, url.getPassword() );
+ assertEquals( hostname, url.getHost() );
+ assertEquals( port, url.getPort() );
+ assertEquals( path, url.getPath() );
+ }
+
+ @Test
+ public void testProtocolHttp()
+ throws MalformedURLException
+ {
+ assertURL( "http://localhost/path/to/resource.txt", "http", null, null, "localhost", null,
+ "/path/to/resource.txt" );
+ }
+
+ @Test
+ public void testProtocolWagonWebdav()
+ throws MalformedURLException
+ {
+ assertURL( "dav:http://localhost/path/to/resource.txt", "dav:http", null, null, "localhost", null,
+ "/path/to/resource.txt" );
+ }
+
+ @Test
+ public void testProtocolHttpWithPort()
+ throws MalformedURLException
+ {
+ assertURL( "http://localhost:9090/path/to/resource.txt", "http", null, null, "localhost", "9090",
+ "/path/to/resource.txt" );
+ }
+
+ @Test
+ public void testProtocolHttpWithUsername()
+ throws MalformedURLException
+ {
+ assertURL( "http://user@localhost/path/to/resource.txt", "http", "user", null, "localhost", null,
+ "/path/to/resource.txt" );
+ }
+
+ @Test
+ public void testProtocolHttpWithUsernamePassword()
+ throws MalformedURLException
+ {
+ assertURL( "http://user:pass@localhost/path/to/resource.txt", "http", "user", "pass", "localhost", null,
+ "/path/to/resource.txt" );
+ }
+
+ @Test
+ public void testProtocolHttpWithUsernamePasswordPort()
+ throws MalformedURLException
+ {
+ assertURL( "http://user:pass@localhost:9090/path/to/resource.txt", "http", "user", "pass", "localhost", "9090",
+ "/path/to/resource.txt" );
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/content/maven2/ArtifactExtensionMappingTest.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/content/maven2/ArtifactExtensionMappingTest.java
new file mode 100644
index 000000000..ae72a66fb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/content/maven2/ArtifactExtensionMappingTest.java
@@ -0,0 +1,83 @@
+package org.apache.archiva.repository.content.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.metadata.model.ArtifactMetadata;
+import org.apache.archiva.metadata.model.maven2.MavenArtifactFacet;
+import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator;
+import org.apache.archiva.metadata.repository.storage.maven2.ArtifactMappingProvider;
+import org.apache.archiva.metadata.repository.storage.maven2.Maven2RepositoryPathTranslator;
+import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.test.context.ContextConfiguration;
+
+import java.util.Collections;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+/**
+ * ArtifactExtensionMappingTest
+ *
+ *
+ */
+@RunWith ( ArchivaSpringJUnit4ClassRunner.class )
+@ContextConfiguration ( { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml" } )
+public class ArtifactExtensionMappingTest
+{
+ private RepositoryPathTranslator pathTranslator = new Maven2RepositoryPathTranslator(
+ Collections.<ArtifactMappingProvider>emptyList() );
+
+ @Test
+ public void testIsMavenPlugin()
+ {
+ assertMavenPlugin( "maven-test-plugin" );
+ assertMavenPlugin( "maven-clean-plugin" );
+ assertMavenPlugin( "cobertura-maven-plugin" );
+ assertMavenPlugin( "maven-project-info-reports-plugin" );
+ assertMavenPlugin( "silly-name-for-a-maven-plugin" );
+
+ assertNotMavenPlugin( "maven-plugin-api" );
+ assertNotMavenPlugin( "foo-lib" );
+ assertNotMavenPlugin( "another-maven-plugin-api" );
+ assertNotMavenPlugin( "secret-maven-plugin-2" );
+ }
+
+ private void assertMavenPlugin( String artifactId )
+ {
+ assertEquals( "Should be detected as maven plugin: <" + artifactId + ">", "maven-plugin", getTypeFromArtifactId(
+ artifactId ) );
+ }
+
+ private String getTypeFromArtifactId( String artifactId )
+ {
+ ArtifactMetadata artifact = pathTranslator.getArtifactFromId( null, "groupId", artifactId, "1.0",
+ artifactId + "-1.0.jar" );
+ MavenArtifactFacet facet = (MavenArtifactFacet) artifact.getFacet( MavenArtifactFacet.FACET_ID );
+ return facet.getType();
+ }
+
+ private void assertNotMavenPlugin( String artifactId )
+ {
+ assertFalse( "Should NOT be detected as maven plugin: <" + artifactId + ">", "maven-plugin".equals(
+ getTypeFromArtifactId( artifactId ) ) );
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/content/maven2/DefaultPathParserTest.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/content/maven2/DefaultPathParserTest.java
new file mode 100644
index 000000000..f46dfa2d0
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/content/maven2/DefaultPathParserTest.java
@@ -0,0 +1,572 @@
+package org.apache.archiva.repository.content.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.model.ArtifactReference;
+import org.apache.archiva.repository.LayoutException;
+import org.apache.archiva.repository.content.PathParser;
+import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
+import org.apache.commons.lang.StringUtils;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.test.context.ContextConfiguration;
+
+import static org.junit.Assert.*;
+
+/**
+ * DefaultPathParserTest
+ *
+ * TODO: move to path translator tests
+ *
+ *
+ */
+@RunWith ( ArchivaSpringJUnit4ClassRunner.class )
+@ContextConfiguration ( { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml" } )
+public class DefaultPathParserTest
+{
+ private PathParser parser = new DefaultPathParser();
+
+ @Test
+ public void testBadPathMissingType()
+ {
+ // TODO: should we allow this instead?
+ assertBadPath( "invalid/invalid/1/invalid-1", "missing type" );
+ }
+
+ @Test
+ public void testBadPathReleaseInSnapshotDir()
+ {
+ assertBadPath( "invalid/invalid/1.0-SNAPSHOT/invalid-1.0.jar",
+ "non snapshot artifact inside of a snapshot dir" );
+ }
+
+ @Test
+ public void testBadPathTimestampedSnapshotNotInSnapshotDir()
+ {
+ assertBadPath( "invalid/invalid/1.0-20050611.123456-1/invalid-1.0-20050611.123456-1.jar",
+ "Timestamped Snapshot artifact not inside of an Snapshot dir" );
+ }
+
+ @Test
+ public void testBadPathTooShort()
+ {
+ assertBadPath( "invalid/invalid-1.0.jar", "path is too short" );
+ }
+
+ @Test
+ public void testBadPathVersionMismatchA()
+ {
+ assertBadPath( "invalid/invalid/1.0/invalid-2.0.jar", "version mismatch between path and artifact" );
+ }
+
+ @Test
+ public void testBadPathVersionMismatchB()
+ {
+ assertBadPath( "invalid/invalid/1.0/invalid-1.0b.jar", "version mismatch between path and artifact" );
+ }
+
+ @Test
+ public void testBadPathWrongArtifactId()
+ {
+ assertBadPath( "org/apache/maven/test/1.0-SNAPSHOT/wrong-artifactId-1.0-20050611.112233-1.jar",
+ "wrong artifact id" );
+ }
+
+ /**
+ * [MRM-481] Artifact requests with a .xml.zip extension fail with a 404 Error
+ */
+ @Test
+ public void testGoodButDualExtensions()
+ throws LayoutException
+ {
+ String groupId = "org.project";
+ String artifactId = "example-presentation";
+ String version = "3.2";
+ String classifier = null;
+ String type = "xml.zip";
+ String path = "org/project/example-presentation/3.2/example-presentation-3.2.xml.zip";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ @Test
+ public void testGoodButDualExtensionsWithClassifier()
+ throws LayoutException
+ {
+ String groupId = "org.project";
+ String artifactId = "example-presentation";
+ String version = "3.2";
+ String classifier = "extras";
+ String type = "xml.zip";
+ String path = "org/project/example-presentation/3.2/example-presentation-3.2-extras.xml.zip";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ @Test
+ public void testGoodButDualExtensionsTarGz()
+ throws LayoutException
+ {
+ String groupId = "org.project";
+ String artifactId = "example-distribution";
+ String version = "1.3";
+ String classifier = null;
+ String type = "tar.gz"; // no longer using distribution-tgz / distribution-zip in maven 2
+ String path = "org/project/example-distribution/1.3/example-distribution-1.3.tar.gz";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ @Test
+ public void testGoodButDualExtensionsTarGzAndClassifier()
+ throws LayoutException
+ {
+ String groupId = "org.project";
+ String artifactId = "example-distribution";
+ String version = "1.3";
+ String classifier = "bin";
+ String type = "tar.gz"; // no longer using distribution-tgz / distribution-zip in maven 2
+ String path = "org/project/example-distribution/1.3/example-distribution-1.3-bin.tar.gz";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ /**
+ * [MRM-432] Oddball version spec.
+ * Example of an oddball / unusual version spec.
+ *
+ * @throws LayoutException
+ */
+ @Test
+ public void testGoodButOddVersionSpecGanymedSsh2()
+ throws LayoutException
+ {
+ String groupId = "ch.ethz.ganymed";
+ String artifactId = "ganymed-ssh2";
+ String version = "build210";
+ String classifier = null;
+ String type = "jar";
+ String path = "ch/ethz/ganymed/ganymed-ssh2/build210/ganymed-ssh2-build210.jar";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ /**
+ * [MRM-432] Oddball version spec.
+ * Example of an oddball / unusual version spec.
+ *
+ * @throws LayoutException
+ */
+ @Test
+ public void testGoodButOddVersionSpecJavaxComm()
+ throws LayoutException
+ {
+ String groupId = "javax";
+ String artifactId = "comm";
+ String version = "3.0-u1";
+ String classifier = null;
+ String type = "jar";
+ String path = "javax/comm/3.0-u1/comm-3.0-u1.jar";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ /**
+ * Test the ejb-client type spec.
+ * Type specs are not a 1 to 1 map to the extension.
+ * This tests that effect.
+ * @throws LayoutException
+ */
+ /* TODO: Re-enabled in the future.
+ public void testGoodFooEjbClient()
+ throws LayoutException
+ {
+ String groupId = "com.foo";
+ String artifactId = "foo-client";
+ String version = "1.0";
+ String classifier = null;
+ String type = "ejb-client"; // oddball type-spec (should result in jar extension)
+ String path = "com/foo/foo-client/1.0/foo-client-1.0.jar";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+ */
+
+ /**
+ * [MRM-432] Oddball version spec.
+ * Example of an oddball / unusual version spec.
+ *
+ * @throws LayoutException
+ */
+ @Test
+ public void testGoodButOddVersionSpecJavaxPersistence()
+ throws LayoutException
+ {
+ String groupId = "javax.persistence";
+ String artifactId = "ejb";
+ String version = "3.0-public_review";
+ String classifier = null;
+ String type = "jar";
+ String path = "javax/persistence/ejb/3.0-public_review/ejb-3.0-public_review.jar";
+
+ /*
+ * The version id of "public_review" can cause problems. is it part of
+ * the version spec? or the classifier?
+ * Since the path spec below shows it in the path, then it is really
+ * part of the version spec.
+ */
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ @Test
+ public void testGoodComFooTool()
+ throws LayoutException
+ {
+ String groupId = "com.foo";
+ String artifactId = "foo-tool";
+ String version = "1.0";
+ String classifier = null;
+ String type = "jar";
+ String path = "com/foo/foo-tool/1.0/foo-tool-1.0.jar";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ @Test
+ public void testGoodCommonsLang()
+ throws LayoutException
+ {
+ String groupId = "commons-lang";
+ String artifactId = "commons-lang";
+ String version = "2.1";
+ String classifier = null;
+ String type = "jar";
+ String path = "commons-lang/commons-lang/2.1/commons-lang-2.1.jar";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ @Test
+ public void testWindowsPathSeparator()
+ throws LayoutException
+ {
+ String groupId = "commons-lang";
+ String artifactId = "commons-lang";
+ String version = "2.1";
+ String classifier = null;
+ String type = "jar";
+ String path = "commons-lang\\commons-lang/2.1\\commons-lang-2.1.jar";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ /**
+ * [MRM-486] Can not deploy artifact test.maven-arch:test-arch due to "No ArtifactID Detected"
+ */
+ @Test
+ public void testGoodDashedArtifactId()
+ throws LayoutException
+ {
+ String groupId = "test.maven-arch";
+ String artifactId = "test-arch";
+ String version = "2.0.3-SNAPSHOT";
+ String classifier = null;
+ String type = "pom";
+ String path = "test/maven-arch/test-arch/2.0.3-SNAPSHOT/test-arch-2.0.3-SNAPSHOT.pom";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ /**
+ * It may seem odd, but this is a valid artifact.
+ */
+ @Test
+ public void testGoodDotNotationArtifactId()
+ throws LayoutException
+ {
+ String groupId = "com.company.department";
+ String artifactId = "com.company.department";
+ String version = "0.2";
+ String classifier = null;
+ String type = "pom";
+ String path = "com/company/department/com.company.department/0.2/com.company.department-0.2.pom";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ /**
+ * It may seem odd, but this is a valid artifact.
+ */
+ @Test
+ public void testGoodDotNotationSameGroupIdAndArtifactId()
+ throws LayoutException
+ {
+ String groupId = "com.company.department";
+ String artifactId = "com.company.department.project";
+ String version = "0.3";
+ String classifier = null;
+ String type = "pom";
+ String path =
+ "com/company/department/com.company.department.project/0.3/com.company.department.project-0.3.pom";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ /**
+ * Test the classifier, and java-source type spec.
+ *
+ * @throws LayoutException
+ */
+ @Test
+ public void testGoodFooLibSources()
+ throws LayoutException
+ {
+ String groupId = "com.foo.lib";
+ String artifactId = "foo-lib";
+ String version = "2.1-alpha-1";
+ String classifier = "sources";
+ String type = "java-source"; // oddball type-spec (should result in jar extension)
+ String path = "com/foo/lib/foo-lib/2.1-alpha-1/foo-lib-2.1-alpha-1-sources.jar";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ /**
+ * A timestamped versioned artifact, should reside in a SNAPSHOT baseversion directory.
+ *
+ * @throws LayoutException
+ */
+ @Test
+ public void testGoodSnapshotMavenTest()
+ throws LayoutException
+ {
+ String groupId = "org.apache.archiva.test";
+ String artifactId = "redonkulous";
+ String version = "3.1-beta-1-20050831.101112-42";
+ String classifier = null;
+ String type = "jar";
+ String path =
+ "org/apache/archiva/test/redonkulous/3.1-beta-1-SNAPSHOT/redonkulous-3.1-beta-1-20050831.101112-42.jar";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ /**
+ * A timestamped versioned artifact, should reside in a SNAPSHOT baseversion directory.
+ *
+ * @throws LayoutException
+ */
+ @Test
+ public void testGoodLongSnapshotMavenTest()
+ throws LayoutException
+ {
+ String groupId = "a.group.id";
+ String artifactId = "artifact-id";
+ String version = "1.0-abc-1.1-20080221.062205-9";
+ String classifier = null;
+ String type = "pom";
+ String path = "a/group/id/artifact-id/1.0-abc-1.1-SNAPSHOT/artifact-id-1.0-abc-1.1-20080221.062205-9.pom";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ /**
+ * A timestamped versioned artifact but without release version part. Like on axiom trunk.
+ */
+ @Test
+ public void testBadSnapshotWithoutReleasePart()
+ {
+ assertBadPath( "org/apache/ws/commons/axiom/axiom/SNAPSHOT/axiom-20070912.093446-2.pom",
+ "snapshot version without release part" );
+ }
+
+ /**
+ * A timestamped versioned artifact, should reside in a SNAPSHOT baseversion directory.
+ *
+ * @throws LayoutException
+ */
+ @Test
+ public void testClassifiedSnapshotMavenTest()
+ throws LayoutException
+ {
+ String groupId = "a.group.id";
+ String artifactId = "artifact-id";
+ String version = "1.0-20070219.171202-34";
+ String classifier = "test-sources";
+ String type = "jar";
+ String path = "a/group/id/artifact-id/1.0-SNAPSHOT/artifact-id-1.0-20070219.171202-34-test-sources.jar";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ /**
+ * [MRM-519] version identifiers within filename cause misidentification of version.
+ * Example uses "test" in artifact Id, which is also part of the versionKeyword list.
+ */
+ @Test
+ public void testGoodVersionKeywordInArtifactId()
+ throws LayoutException
+ {
+ String groupId = "maven";
+ String artifactId = "maven-test-plugin";
+ String version = "1.8.2";
+ String classifier = null;
+ String type = "pom";
+ String path = "maven/maven-test-plugin/1.8.2/maven-test-plugin-1.8.2.pom";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ /**
+ * [MRM-562] Artifact type "maven-plugin" is not detected correctly in .toArtifactReference() methods.
+ * Example uses "test" in artifact Id, which is also part of the versionKeyword list.
+ */
+ @Test
+ public void testGoodDetectMavenTestPlugin()
+ throws LayoutException
+ {
+ String groupId = "maven";
+ String artifactId = "maven-test-plugin";
+ String version = "1.8.2";
+ String classifier = null;
+ String type = "maven-plugin";
+ String path = "maven/maven-test-plugin/1.8.2/maven-test-plugin-1.8.2.jar";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ /**
+ * [MRM-562] Artifact type "maven-plugin" is not detected correctly in .toArtifactReference() methods.
+ */
+ @Test
+ public void testGoodDetectCoberturaMavenPlugin()
+ throws LayoutException
+ {
+ String groupId = "org.codehaus.mojo";
+ String artifactId = "cobertura-maven-plugin";
+ String version = "2.1";
+ String classifier = null;
+ String type = "maven-plugin";
+ String path = "org/codehaus/mojo/cobertura-maven-plugin/2.1/cobertura-maven-plugin-2.1.jar";
+
+ assertLayout( path, groupId, artifactId, version, classifier, type );
+ }
+
+ @Test
+ public void testToArtifactOnEmptyPath()
+ {
+ try
+ {
+ parser.toArtifactReference( "" );
+ fail( "Should have failed due to empty path." );
+ }
+ catch ( LayoutException e )
+ {
+ /* expected path */
+ }
+ }
+
+ @Test
+ public void testToArtifactOnNullPath()
+ {
+ try
+ {
+ parser.toArtifactReference( null );
+ fail( "Should have failed due to null path." );
+ }
+ catch ( LayoutException e )
+ {
+ /* expected path */
+ }
+ }
+
+ @Test
+ public void testToArtifactReferenceOnEmptyPath()
+ {
+ try
+ {
+ parser.toArtifactReference( "" );
+ fail( "Should have failed due to empty path." );
+ }
+ catch ( LayoutException e )
+ {
+ /* expected path */
+ }
+ }
+
+ @Test
+ public void testToArtifactReferenceOnNullPath()
+ {
+ try
+ {
+ parser.toArtifactReference( null );
+ fail( "Should have failed due to null path." );
+ }
+ catch ( LayoutException e )
+ {
+ /* expected path */
+ }
+ }
+
+ /**
+ * Perform a path to artifact reference lookup, and verify the results.
+ */
+ private void assertLayout( String path, String groupId, String artifactId, String version, String classifier,
+ String type )
+ throws LayoutException
+ {
+ // Path to Artifact Reference.
+ ArtifactReference testReference = parser.toArtifactReference( path );
+ assertArtifactReference( testReference, groupId, artifactId, version, classifier, type );
+ }
+
+ private void assertArtifactReference( ArtifactReference actualReference, String groupId, String artifactId,
+ String version, String classifier, String type )
+ {
+ String expectedId =
+ "ArtifactReference - " + groupId + ":" + artifactId + ":" + version + ":" + classifier + ":" + type;
+
+ assertNotNull( expectedId + " - Should not be null.", actualReference );
+
+ assertEquals( expectedId + " - Group ID", groupId, actualReference.getGroupId() );
+ assertEquals( expectedId + " - Artifact ID", artifactId, actualReference.getArtifactId() );
+ if ( StringUtils.isNotBlank( classifier ) )
+ {
+ assertEquals( expectedId + " - Classifier", classifier, actualReference.getClassifier() );
+ }
+ assertEquals( expectedId + " - Version ID", version, actualReference.getVersion() );
+ assertEquals( expectedId + " - Type", type, actualReference.getType() );
+ }
+
+ private void assertBadPath( String path, String reason )
+ {
+ try
+ {
+ parser.toArtifactReference( path );
+ fail(
+ "Should have thrown a LayoutException on the invalid path [" + path + "] because of [" + reason + "]" );
+ }
+ catch ( LayoutException e )
+ {
+ /* expected path */
+ }
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/content/maven2/FilenameParserTest.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/content/maven2/FilenameParserTest.java
new file mode 100644
index 000000000..cec3df826
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/content/maven2/FilenameParserTest.java
@@ -0,0 +1,217 @@
+package org.apache.archiva.repository.content.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.test.utils.ArchivaBlockJUnit4ClassRunner;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * FilenameParserTest
+ *
+ *
+ */
+@RunWith( ArchivaBlockJUnit4ClassRunner.class )
+public class FilenameParserTest
+ extends TestCase
+{
+ @Test
+ public void testNameExtensionJar()
+ {
+ FilenameParser parser = new FilenameParser( "maven-test-plugin-1.8.3.jar" );
+
+ assertEquals( "maven-test-plugin-1.8.3", parser.getName() );
+ assertEquals( "jar", parser.getExtension() );
+ }
+
+ @Test
+ public void testNameExtensionTarGz()
+ {
+ FilenameParser parser = new FilenameParser( "archiva-1.0-beta-2-bin.tar.gz" );
+
+ assertEquals( "archiva-1.0-beta-2-bin", parser.getName() );
+ assertEquals( "tar.gz", parser.getExtension() );
+ }
+
+ @Test
+ public void testNameExtensionTarBz2()
+ {
+ FilenameParser parser = new FilenameParser( "archiva-1.0-SNAPSHOT-src.tar.bz2" );
+
+ assertEquals( "archiva-1.0-SNAPSHOT-src", parser.getName() );
+ assertEquals( "tar.bz2", parser.getExtension() );
+ }
+
+ @Test
+ public void testNameExtensionCapitolizedTarGz()
+ {
+ FilenameParser parser = new FilenameParser( "ARCHIVA-1.0-BETA-2-BIN.TAR.GZ" );
+
+ assertEquals( "ARCHIVA-1.0-BETA-2-BIN", parser.getName() );
+ assertEquals( "TAR.GZ", parser.getExtension() );
+ }
+
+ @Test
+ public void testNext()
+ {
+ FilenameParser parser = new FilenameParser( "maven-test-plugin-1.8.3.jar" );
+
+ assertEquals( "maven-test-plugin-1.8.3", parser.getName() );
+ assertEquals( "jar", parser.getExtension() );
+
+ assertEquals( "maven", parser.next() );
+ assertEquals( "test", parser.next() );
+ assertEquals( "plugin", parser.next() );
+ assertEquals( "1.8.3", parser.next() );
+ assertNull( parser.next() );
+ }
+
+ @Test
+ public void testExpect()
+ {
+ FilenameParser parser = new FilenameParser( "maven-test-plugin-1.8.3.jar" );
+
+ assertEquals( "maven-test-plugin-1.8.3", parser.getName() );
+ assertEquals( "jar", parser.getExtension() );
+
+ assertEquals( "maven-test-plugin", parser.expect( "maven-test-plugin" ) );
+ assertEquals( "1.8.3", parser.expect( "1.8.3" ) );
+ assertNull( parser.expect( "jar" ) );
+ }
+
+ @Test
+ public void testExpectWithRemaining()
+ {
+ FilenameParser parser = new FilenameParser( "ganymede-ssh2-build250-sources.jar" );
+
+ assertEquals( "ganymede-ssh2-build250-sources", parser.getName() );
+ assertEquals( "jar", parser.getExtension() );
+
+ assertEquals( "ganymede-ssh2", parser.expect( "ganymede-ssh2" ) );
+ assertEquals( "build250", parser.expect( "build250" ) );
+ assertEquals( '-', parser.seperator() );
+ assertEquals( "sources", parser.remaining() );
+
+ assertNull( parser.expect( "jar" ) );
+ }
+
+ @Test
+ public void testExpectWithRemainingDualExtensions()
+ {
+ FilenameParser parser = new FilenameParser( "example-presentation-3.2.xml.zip" );
+
+ assertEquals( "example-presentation-3.2.xml", parser.getName() );
+ assertEquals( "zip", parser.getExtension() );
+
+ assertEquals( "example-presentation", parser.expect( "example-presentation" ) );
+ assertEquals( "3.2", parser.expect( "3.2" ) );
+ assertEquals( '.', parser.seperator() );
+ assertEquals( "xml", parser.remaining() );
+
+ }
+
+ @Test
+ public void testNextNonVersion()
+ {
+ FilenameParser parser = new FilenameParser( "maven-test-plugin-1.8.3.jar" );
+
+ assertEquals( "maven-test-plugin", parser.nextNonVersion() );
+ assertEquals( "1.8.3", parser.remaining() );
+ }
+
+ @Test
+ public void testNextArbitraryNonVersion()
+ {
+ FilenameParser parser = new FilenameParser( "maven-jdk-1.4-plugin-1.0-20070828.123456-42.jar" );
+
+ assertEquals( "maven-jdk-1.4-plugin", parser.nextNonVersion() );
+ assertEquals( "1.0-20070828.123456-42", parser.remaining() );
+ }
+
+ @Test
+ public void testNextJython()
+ {
+ FilenameParser parser = new FilenameParser( "jython-20020827-no-oro.jar" );
+
+ assertEquals( "jython", parser.nextNonVersion() );
+ assertEquals( "20020827", parser.nextVersion() );
+ assertEquals( "no-oro", parser.remaining() );
+ }
+
+ @Test
+ public void testLongExtension()
+ {
+ FilenameParser parser = new FilenameParser( "libfobs4jmf-0.4.1.4-20080217.211715-4.jnilib" );
+
+ assertEquals( "libfobs4jmf-0.4.1.4-20080217.211715-4", parser.getName() );
+ assertEquals( "jnilib", parser.getExtension() );
+ }
+
+ @Test
+ public void testInterveningVersion()
+ {
+ FilenameParser parser = new FilenameParser( "artifact-id-1.0-abc-1.1-20080221.062205-9.pom" );
+
+ assertEquals( "artifact-id", parser.nextNonVersion() );
+ assertEquals( "1.0-abc-1.1-20080221.062205-9", parser.expect( "1.0-abc-1.1-SNAPSHOT" ) );
+ assertNull( null, parser.remaining() );
+ assertEquals( "artifact-id-1.0-abc-1.1-20080221.062205-9", parser.getName() );
+ assertEquals( "pom", parser.getExtension() );
+ }
+
+ @Test
+ public void testExpectWrongSnapshot()
+ {
+ FilenameParser parser = new FilenameParser( "artifact-id-1.0-20080221.062205-9.pom" );
+
+ assertEquals( "artifact-id", parser.nextNonVersion() );
+ assertNull( parser.expect( "2.0-SNAPSHOT" ) );
+ }
+
+ @Test
+ public void testExpectWrongSnapshot2()
+ {
+ // tests parsing axiom snapshots without exceptions
+ FilenameParser parser = new FilenameParser( "axiom-20080221.062205-9.pom" );
+
+ assertEquals( "axiom", parser.nextNonVersion() );
+ assertNull( parser.expect( "SNAPSHOT" ) );
+ }
+
+ @Test
+ public void testClassifier()
+ {
+ FilenameParser parser = new FilenameParser( "artifact-id-1.0-20070219.171202-34-test-sources.jar" );
+
+ assertEquals( "artifact-id", parser.nextNonVersion() );
+ assertEquals( "1.0-20070219.171202-34", parser.nextVersion() );
+ assertEquals( "test-sources", parser.remaining() );
+ assertEquals( "artifact-id-1.0-20070219.171202-34-test-sources", parser.getName() );
+ assertEquals( "jar", parser.getExtension() );
+ }
+
+ @Test
+ public void testNoExtension()
+ {
+ FilenameParser parser = new FilenameParser( "foo_bar" );
+ assertNull( parser.getExtension() );
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/content/maven2/RepositoryRequestTest.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/content/maven2/RepositoryRequestTest.java
new file mode 100644
index 000000000..db3210863
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/content/maven2/RepositoryRequestTest.java
@@ -0,0 +1,530 @@
+package org.apache.archiva.repository.content.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.common.utils.FileUtils;
+import org.apache.archiva.configuration.ArchivaConfiguration;
+import org.apache.archiva.model.ArtifactReference;
+import org.apache.archiva.repository.LayoutException;
+import org.apache.archiva.repository.ManagedRepositoryContent;
+import org.apache.archiva.repository.RepositoryContentProvider;
+import org.apache.archiva.repository.maven2.MavenManagedRepository;
+import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
+import org.apache.commons.lang.StringUtils;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.context.ApplicationContext;
+import org.springframework.test.context.ContextConfiguration;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import static org.junit.Assert.*;
+
+/**
+ * RepositoryRequestTest
+ */
+@RunWith( ArchivaSpringJUnit4ClassRunner.class )
+@ContextConfiguration( { "classpath*:/META-INF/spring-context.xml",
+ "classpath:/spring-context-repo-request-test.xml" } )
+public class RepositoryRequestTest
+{
+
+ @Inject
+ protected ApplicationContext applicationContext;
+
+ @Inject
+ @Named( "archivaConfiguration#repo-request-test" )
+ private ArchivaConfiguration archivaConfiguration;
+
+ private RepositoryRequest repoRequest;
+
+ @Before
+ public void setUp()
+ throws Exception
+ {
+ repoRequest = new RepositoryRequest();
+ }
+
+ @Test
+ public void testInvalidRequestEmptyPath()
+ {
+ assertInvalidRequest( "" );
+ }
+
+ @Test
+ public void testInvalidRequestSlashOnly()
+ {
+ assertInvalidRequest( "//" );
+ }
+
+ @Test
+ public void testInvalidRequestNoArtifactId()
+ {
+ assertInvalidRequest( "groupId/jars/-1.0.jar" );
+ }
+
+
+ @Test
+ public void testInvalidRequestTooShort()
+ {
+ assertInvalidRequest( "org.apache.maven.test/artifactId-2.0.jar" );
+ }
+
+ @Test
+ public void testInvalidDefaultRequestBadLocation()
+ {
+ assertInvalidRequest( "invalid/invalid/1.0-20050611.123456-1/invalid-1.0-20050611.123456-1.jar" );
+ }
+
+ @Test( expected = LayoutException.class )
+ public void testValidLegacyGanymed()
+ throws Exception
+ {
+ assertValid( "ch.ethz.ganymed/jars/ganymed-ssh2-build210.jar", "ch.ethz.ganymed", "ganymed-ssh2", "build210",
+ null, "jar" );
+ }
+
+ @Test
+ public void testValidDefaultGanymed()
+ throws Exception
+ {
+ assertValid( "ch/ethz/ganymed/ganymed-ssh2/build210/ganymed-ssh2-build210.jar", "ch.ethz.ganymed",
+ "ganymed-ssh2", "build210", null, "jar" );
+ }
+
+ @Test( expected = LayoutException.class )
+ public void testValidLegacyJavaxComm()
+ throws Exception
+ {
+ assertValid( "javax/jars/comm-3.0-u1.jar", "javax", "comm", "3.0-u1", null, "jar" );
+ }
+
+ @Test
+ public void testValidDefaultJavaxComm()
+ throws Exception
+ {
+ assertValid( "javax/comm/3.0-u1/comm-3.0-u1.jar", "javax", "comm", "3.0-u1", null, "jar" );
+ }
+
+ @Test( expected = LayoutException.class )
+ public void testValidLegacyJavaxPersistence()
+ throws Exception
+ {
+ assertValid( "javax.persistence/jars/ejb-3.0-public_review.jar", "javax.persistence", "ejb",
+ "3.0-public_review", null, "jar" );
+ }
+
+ @Test
+ public void testValidDefaultJavaxPersistence()
+ throws Exception
+ {
+ assertValid( "javax/persistence/ejb/3.0-public_review/ejb-3.0-public_review.jar", "javax.persistence", "ejb",
+ "3.0-public_review", null, "jar" );
+ }
+
+ @Test( expected = LayoutException.class )
+ public void testValidLegacyMavenTestPlugin()
+ throws Exception
+ {
+ assertValid( "maven/jars/maven-test-plugin-1.8.2.jar", "maven", "maven-test-plugin", "1.8.2", null, "jar" );
+ }
+
+ @Test
+ public void testValidDefaultMavenTestPlugin()
+ throws Exception
+ {
+ assertValid( "maven/maven-test-plugin/1.8.2/maven-test-plugin-1.8.2.pom", "maven", "maven-test-plugin", "1.8.2",
+ null, "pom" );
+ }
+
+ @Test( expected = LayoutException.class )
+ public void testValidLegacyCommonsLangJavadoc()
+ throws Exception
+ {
+ assertValid( "commons-lang/javadoc.jars/commons-lang-2.1-javadoc.jar", "commons-lang", "commons-lang", "2.1",
+ "javadoc", "javadoc" );
+ }
+
+ @Test
+ public void testValidDefaultCommonsLangJavadoc()
+ throws Exception
+ {
+ assertValid( "commons-lang/commons-lang/2.1/commons-lang-2.1-javadoc.jar", "commons-lang", "commons-lang",
+ "2.1", "javadoc", "javadoc" );
+ }
+
+ @Test( expected = LayoutException.class )
+ public void testValidLegacyDerbyPom()
+ throws Exception
+ {
+ assertValid( "org.apache.derby/poms/derby-10.2.2.0.pom", "org.apache.derby", "derby", "10.2.2.0", null, "pom" );
+ // Starting slash should not prevent detection.
+ assertValid( "/org.apache.derby/poms/derby-10.2.2.0.pom", "org.apache.derby", "derby", "10.2.2.0", null,
+ "pom" );
+ }
+
+ @Test
+ public void testValidDefaultDerbyPom()
+ throws Exception
+ {
+ assertValid( "org/apache/derby/derby/10.2.2.0/derby-10.2.2.0.pom", "org.apache.derby", "derby", "10.2.2.0",
+ null, "pom" );
+ }
+
+ @Test( expected = LayoutException.class )
+ public void testValidLegacyGeronimoEjbSpec()
+ throws Exception
+ {
+ assertValid( "org.apache.geronimo.specs/jars/geronimo-ejb_2.1_spec-1.0.1.jar", "org.apache.geronimo.specs",
+ "geronimo-ejb_2.1_spec", "1.0.1", null, "jar" );
+ }
+
+ @Test
+ public void testValidDefaultGeronimoEjbSpec()
+ throws Exception
+ {
+ assertValid( "org/apache/geronimo/specs/geronimo-ejb_2.1_spec/1.0.1/geronimo-ejb_2.1_spec-1.0.1.jar",
+ "org.apache.geronimo.specs", "geronimo-ejb_2.1_spec", "1.0.1", null, "jar" );
+ }
+
+ @Test( expected = LayoutException.class )
+ public void testValidLegacyLdapSnapshot()
+ throws Exception
+ {
+ assertValid( "directory-clients/poms/ldap-clients-0.9.1-SNAPSHOT.pom", "directory-clients", "ldap-clients",
+ "0.9.1-SNAPSHOT", null, "pom" );
+ }
+
+ @Test
+ public void testValidDefaultLdapSnapshot()
+ throws Exception
+ {
+ assertValid( "directory-clients/ldap-clients/0.9.1-SNAPSHOT/ldap-clients-0.9.1-SNAPSHOT.pom",
+ "directory-clients", "ldap-clients", "0.9.1-SNAPSHOT", null, "pom" );
+ }
+
+ @Test( expected = LayoutException.class )
+ public void testValidLegacyTestArchSnapshot()
+ throws Exception
+ {
+ assertValid( "test.maven-arch/poms/test-arch-2.0.3-SNAPSHOT.pom", "test.maven-arch", "test-arch",
+ "2.0.3-SNAPSHOT", null, "pom" );
+ }
+
+ @Test
+ public void testValidDefaultTestArchSnapshot()
+ throws Exception
+ {
+ assertValid( "test/maven-arch/test-arch/2.0.3-SNAPSHOT/test-arch-2.0.3-SNAPSHOT.pom", "test.maven-arch",
+ "test-arch", "2.0.3-SNAPSHOT", null, "pom" );
+ }
+
+ @Test( expected = LayoutException.class )
+ public void testValidLegacyOddDottedArtifactId()
+ throws Exception
+ {
+ assertValid( "com.company.department/poms/com.company.department.project-0.2.pom", "com.company.department",
+ "com.company.department.project", "0.2", null, "pom" );
+ }
+
+ @Test
+ public void testValidDefaultOddDottedArtifactId()
+ throws Exception
+ {
+ assertValid( "com/company/department/com.company.department.project/0.2/com.company.department.project-0.2.pom",
+ "com.company.department", "com.company.department.project", "0.2", null, "pom" );
+ }
+
+ @Test( expected = LayoutException.class )
+ public void testValidLegacyTimestampedSnapshot()
+ throws Exception
+ {
+ assertValid( "org.apache.archiva.test/jars/redonkulous-3.1-beta-1-20050831.101112-42.jar",
+ "org.apache.archiva.test", "redonkulous", "3.1-beta-1-20050831.101112-42", null, "jar" );
+ }
+
+ @Test
+ public void testValidDefaultTimestampedSnapshot()
+ throws Exception
+ {
+ assertValid(
+ "org/apache/archiva/test/redonkulous/3.1-beta-1-SNAPSHOT/redonkulous-3.1-beta-1-20050831.101112-42.jar",
+ "org.apache.archiva.test", "redonkulous", "3.1-beta-1-20050831.101112-42", null, "jar" );
+ }
+
+ @Test
+ public void testIsSupportFile()
+ {
+ assertTrue( repoRequest.isSupportFile( "org/apache/derby/derby/10.2.2.0/derby-10.2.2.0-bin.tar.gz.sha1" ) );
+ assertTrue( repoRequest.isSupportFile( "org/apache/derby/derby/10.2.2.0/derby-10.2.2.0-bin.tar.gz.md5" ) );
+ assertTrue( repoRequest.isSupportFile( "org/apache/derby/derby/10.2.2.0/derby-10.2.2.0-bin.tar.gz.asc" ) );
+ assertTrue( repoRequest.isSupportFile( "org/apache/derby/derby/10.2.2.0/derby-10.2.2.0-bin.tar.gz.pgp" ) );
+ assertTrue( repoRequest.isSupportFile( "org/apache/derby/derby/10.2.2.0/maven-metadata.xml.sha1" ) );
+ assertTrue( repoRequest.isSupportFile( "org/apache/derby/derby/10.2.2.0/maven-metadata.xml.md5" ) );
+
+ assertFalse( repoRequest.isSupportFile( "test.maven-arch/poms/test-arch-2.0.3-SNAPSHOT.pom" ) );
+ assertFalse(
+ repoRequest.isSupportFile( "test/maven-arch/test-arch/2.0.3-SNAPSHOT/test-arch-2.0.3-SNAPSHOT.jar" ) );
+ assertFalse( repoRequest.isSupportFile( "org/apache/archiva/archiva-api/1.0/archiva-api-1.0.xml.zip" ) );
+ assertFalse( repoRequest.isSupportFile( "org/apache/derby/derby/10.2.2.0/derby-10.2.2.0-bin.tar.gz" ) );
+ assertFalse( repoRequest.isSupportFile( "org/apache/derby/derby/10.2.2.0/maven-metadata.xml" ) );
+ assertFalse( repoRequest.isSupportFile( "org/apache/derby/derby/maven-metadata.xml" ) );
+ }
+
+ @Test
+ public void testIsMetadata()
+ {
+ assertTrue( repoRequest.isMetadata( "org/apache/derby/derby/10.2.2.0/maven-metadata.xml" ) );
+ assertTrue( repoRequest.isMetadata( "org/apache/derby/derby/maven-metadata.xml" ) );
+
+ assertFalse( repoRequest.isMetadata( "test.maven-arch/poms/test-arch-2.0.3-SNAPSHOT.pom" ) );
+ assertFalse(
+ repoRequest.isMetadata( "test/maven-arch/test-arch/2.0.3-SNAPSHOT/test-arch-2.0.3-SNAPSHOT.jar" ) );
+ assertFalse( repoRequest.isMetadata( "org/apache/archiva/archiva-api/1.0/archiva-api-1.0.xml.zip" ) );
+ assertFalse( repoRequest.isMetadata( "org/apache/derby/derby/10.2.2.0/derby-10.2.2.0-bin.tar.gz" ) );
+ assertFalse( repoRequest.isMetadata( "org/apache/derby/derby/10.2.2.0/derby-10.2.2.0-bin.tar.gz.pgp" ) );
+ assertFalse( repoRequest.isMetadata( "org/apache/derby/derby/10.2.2.0/maven-metadata.xml.sha1" ) );
+ }
+
+ @Test
+ public void testIsMetadataSupportFile()
+ {
+ assertFalse( repoRequest.isMetadataSupportFile( "org/apache/derby/derby/10.2.2.0/maven-metadata.xml" ) );
+ assertFalse( repoRequest.isMetadataSupportFile( "org/apache/derby/derby/maven-metadata.xml" ) );
+ assertTrue( repoRequest.isMetadataSupportFile( "org/apache/derby/derby/maven-metadata.xml.sha1" ) );
+ assertTrue( repoRequest.isMetadataSupportFile( "org/apache/derby/derby/maven-metadata.xml.md5" ) );
+
+ assertFalse( repoRequest.isMetadataSupportFile( "test.maven-arch/poms/test-arch-2.0.3-SNAPSHOT.pom" ) );
+ assertFalse( repoRequest.isMetadataSupportFile(
+ "test/maven-arch/test-arch/2.0.3-SNAPSHOT/test-arch-2.0.3-SNAPSHOT.jar" ) );
+ assertFalse(
+ repoRequest.isMetadataSupportFile( "org/apache/archiva/archiva-api/1.0/archiva-api-1.0.xml.zip" ) );
+ assertFalse( repoRequest.isMetadataSupportFile( "org/apache/derby/derby/10.2.2.0/derby-10.2.2.0-bin.tar.gz" ) );
+ assertFalse(
+ repoRequest.isMetadataSupportFile( "org/apache/derby/derby/10.2.2.0/derby-10.2.2.0-bin.tar.gz.pgp" ) );
+ assertTrue( repoRequest.isMetadataSupportFile( "org/apache/derby/derby/10.2.2.0/maven-metadata.xml.sha1" ) );
+ assertTrue( repoRequest.isMetadataSupportFile( "org/apache/derby/derby/10.2.2.0/maven-metadata.xml.md5" ) );
+ }
+
+ @Test
+ public void testIsDefault()
+ {
+ assertFalse( repoRequest.isDefault( "test.maven-arch/poms/test-arch-2.0.3-SNAPSHOT.pom" ) );
+ assertFalse( repoRequest.isDefault( "directory-clients/poms/ldap-clients-0.9.1-SNAPSHOT.pom" ) );
+ assertFalse( repoRequest.isDefault( "commons-lang/jars/commons-lang-2.1-javadoc.jar" ) );
+
+ assertTrue( repoRequest.isDefault( "test/maven-arch/test-arch/2.0.3-SNAPSHOT/test-arch-2.0.3-SNAPSHOT.jar" ) );
+ assertTrue( repoRequest.isDefault( "org/apache/archiva/archiva-api/1.0/archiva-api-1.0.xml.zip" ) );
+ assertTrue( repoRequest.isDefault( "org/apache/derby/derby/10.2.2.0/derby-10.2.2.0-bin.tar.gz" ) );
+ assertTrue( repoRequest.isDefault( "org/apache/derby/derby/10.2.2.0/derby-10.2.2.0-bin.tar.gz.pgp" ) );
+ assertTrue( repoRequest.isDefault( "org/apache/derby/derby/10.2.2.0/maven-metadata.xml.sha1" ) );
+ assertTrue( repoRequest.isDefault( "eclipse/jdtcore/maven-metadata.xml" ) );
+ assertTrue( repoRequest.isDefault( "eclipse/jdtcore/maven-metadata.xml.sha1" ) );
+ assertTrue( repoRequest.isDefault( "eclipse/jdtcore/maven-metadata.xml.md5" ) );
+
+ assertFalse( repoRequest.isDefault( null ) );
+ assertFalse( repoRequest.isDefault( "" ) );
+ assertFalse( repoRequest.isDefault( "foo" ) );
+ assertFalse( repoRequest.isDefault( "some.short/path" ) );
+ }
+
+ @Test
+ public void testIsLegacy()
+ {
+ assertTrue( repoRequest.isLegacy( "test.maven-arch/poms/test-arch-2.0.3-SNAPSHOT.pom" ) );
+ assertTrue( repoRequest.isLegacy( "directory-clients/poms/ldap-clients-0.9.1-SNAPSHOT.pom" ) );
+ assertTrue( repoRequest.isLegacy( "commons-lang/jars/commons-lang-2.1-javadoc.jar" ) );
+
+ assertFalse( repoRequest.isLegacy( "test/maven-arch/test-arch/2.0.3-SNAPSHOT/test-arch-2.0.3-SNAPSHOT.jar" ) );
+ assertFalse( repoRequest.isLegacy( "org/apache/archiva/archiva-api/1.0/archiva-api-1.0.xml.zip" ) );
+ assertFalse( repoRequest.isLegacy( "org/apache/derby/derby/10.2.2.0/derby-10.2.2.0-bin.tar.gz" ) );
+ assertFalse( repoRequest.isLegacy( "org/apache/derby/derby/10.2.2.0/derby-10.2.2.0-bin.tar.gz.pgp" ) );
+ assertFalse( repoRequest.isLegacy( "org/apache/derby/derby/10.2.2.0/maven-metadata.xml.sha1" ) );
+
+ assertFalse( repoRequest.isLegacy( null ) );
+ assertFalse( repoRequest.isLegacy( "" ) );
+ assertFalse( repoRequest.isLegacy( "some.short/path" ) );
+ }
+
+ private ManagedRepositoryContent createManagedRepo( String layout )
+ throws Exception
+ {
+ Path repoRoot = Paths.get( FileUtils.getBasedir() + "/target/test-repo" );
+ return createManagedRepositoryContent( "test-internal", "Internal Test Repo", repoRoot, layout );
+ }
+
+ /**
+ * [MRM-481] Artifact requests with a .xml.zip extension fail with a 404 Error
+ */
+ @Test
+ public void testToNativePathArtifactDefaultToDefaultDualExtension()
+ throws Exception
+ {
+ ManagedRepositoryContent repository = createManagedRepo( "default" );
+
+ // Test (artifact) default to default - dual extension
+ assertEquals( "org/project/example-presentation/3.2/example-presentation-3.2.xml.zip",
+ repoRequest.toNativePath( "org/project/example-presentation/3.2/example-presentation-3.2.xml.zip",
+ repository ) );
+ }
+
+
+ @Test
+ public void testToNativePathMetadataDefaultToDefault()
+ throws Exception
+ {
+ ManagedRepositoryContent repository = createManagedRepo( "default" );
+
+ // Test (metadata) default to default
+ assertEquals( "org/apache/derby/derby/10.2.2.0/maven-metadata.xml.sha1",
+ repoRequest.toNativePath( "org/apache/derby/derby/10.2.2.0/maven-metadata.xml.sha1",
+ repository ) );
+ }
+
+
+ @Test
+ public void testNativePathBadRequestTooShort()
+ throws Exception
+ {
+ ManagedRepositoryContent repository = createManagedRepo( "default" );
+
+ // Test bad request path (too short)
+ try
+ {
+ repoRequest.toNativePath( "org.apache.derby/license.txt", repository );
+ fail( "Should have thrown an exception about a too short path." );
+ }
+ catch ( LayoutException e )
+ {
+ // expected path.
+ }
+ }
+
+ @Test
+ public void testNativePathBadRequestBlank()
+ throws Exception
+ {
+ ManagedRepositoryContent repository = createManagedRepo( "default" );
+
+ // Test bad request path (too short)
+ try
+ {
+ repoRequest.toNativePath( "", repository );
+ fail( "Should have thrown an exception about an blank request." );
+ }
+ catch ( LayoutException e )
+ {
+ // expected path.
+ }
+ }
+
+ @Test
+ public void testNativePathBadRequestNull()
+ throws Exception
+ {
+ ManagedRepositoryContent repository = createManagedRepo( "default" );
+
+ // Test bad request path (too short)
+ try
+ {
+ repoRequest.toNativePath( null, repository );
+ fail( "Should have thrown an exception about an null request." );
+ }
+ catch ( LayoutException e )
+ {
+ // expected path.
+ }
+ }
+
+ @Test
+ public void testNativePathBadRequestUnknownType()
+ throws Exception
+ {
+ ManagedRepositoryContent repository = createManagedRepo( "default" );
+
+ // Test bad request path (too short)
+ try
+ {
+ repoRequest.toNativePath( "org/apache/derby/derby/10.2.2.0/license.txt", repository );
+ fail( "Should have thrown an exception about an invalid type." );
+ }
+ catch ( LayoutException e )
+ {
+ // expected path.
+ }
+ }
+
+
+ private void assertValid( String path, String groupId, String artifactId, String version, String classifier,
+ String type )
+ throws Exception
+ {
+ String expectedId =
+ "ArtifactReference - " + groupId + ":" + artifactId + ":" + version + ":" + ( classifier != null ?
+ classifier + ":" : "" ) + type;
+
+ ArtifactReference reference = repoRequest.toArtifactReference( path );
+
+ assertNotNull( expectedId + " - Should not be null.", reference );
+
+ assertEquals( expectedId + " - Group ID", groupId, reference.getGroupId() );
+ assertEquals( expectedId + " - Artifact ID", artifactId, reference.getArtifactId() );
+ if ( StringUtils.isNotBlank( classifier ) )
+ {
+ assertEquals( expectedId + " - Classifier", classifier, reference.getClassifier() );
+ }
+ assertEquals( expectedId + " - Version ID", version, reference.getVersion() );
+ assertEquals( expectedId + " - Type", type, reference.getType() );
+ }
+
+ private void assertInvalidRequest( String path )
+ {
+ try
+ {
+ repoRequest.toArtifactReference( path );
+ fail( "Expected a LayoutException on an invalid path [" + path + "]" );
+ }
+ catch ( LayoutException e )
+ {
+ /* expected path */
+ }
+ }
+
+ protected ManagedRepositoryContent createManagedRepositoryContent( String id, String name, Path location,
+ String layout )
+ throws Exception
+ {
+ MavenManagedRepository repo = new MavenManagedRepository( id, name, archivaConfiguration.getRepositoryBaseDir());
+ repo.setLocation( location.toAbsolutePath().toUri() );
+ repo.setLayout( layout );
+
+ RepositoryContentProvider provider = applicationContext.getBean( "repositoryContentProvider#maven", RepositoryContentProvider.class );
+
+ ManagedRepositoryContent repoContent =
+ provider.createManagedContent( repo );
+
+ return repoContent;
+ }
+
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/index/mock/ArchivaIndexManagerMock.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/index/mock/ArchivaIndexManagerMock.java
new file mode 100644
index 000000000..de3ea76a1
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/index/mock/ArchivaIndexManagerMock.java
@@ -0,0 +1,805 @@
+package org.apache.archiva.repository.index.mock;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.admin.model.RepositoryAdminException;
+import org.apache.archiva.common.utils.FileUtils;
+import org.apache.archiva.common.utils.PathUtil;
+import org.apache.archiva.configuration.ArchivaConfiguration;
+import org.apache.archiva.indexer.ArchivaIndexManager;
+import org.apache.archiva.indexer.ArchivaIndexingContext;
+import org.apache.archiva.indexer.IndexCreationFailedException;
+import org.apache.archiva.indexer.IndexUpdateFailedException;
+import org.apache.archiva.indexer.UnsupportedBaseContextException;
+import org.apache.archiva.proxy.ProxyRegistry;
+import org.apache.archiva.proxy.maven.WagonFactory;
+import org.apache.archiva.proxy.maven.WagonFactoryException;
+import org.apache.archiva.proxy.maven.WagonFactoryRequest;
+import org.apache.archiva.proxy.model.NetworkProxy;
+import org.apache.archiva.repository.EditableRepository;
+import org.apache.archiva.repository.ManagedRepository;
+import org.apache.archiva.repository.PasswordCredentials;
+import org.apache.archiva.repository.RemoteRepository;
+import org.apache.archiva.repository.Repository;
+import org.apache.archiva.repository.RepositoryType;
+import org.apache.archiva.repository.UnsupportedRepositoryTypeException;
+import org.apache.archiva.repository.features.IndexCreationFeature;
+import org.apache.archiva.repository.features.RemoteIndexFeature;
+import org.apache.commons.lang.StringUtils;
+import org.apache.maven.index.ArtifactContext;
+import org.apache.maven.index.ArtifactContextProducer;
+import org.apache.maven.index.DefaultScannerListener;
+import org.apache.maven.index.Indexer;
+import org.apache.maven.index.IndexerEngine;
+import org.apache.maven.index.Scanner;
+import org.apache.maven.index.ScanningRequest;
+import org.apache.maven.index.ScanningResult;
+import org.apache.maven.index.context.IndexCreator;
+import org.apache.maven.index.context.IndexingContext;
+import org.apache.maven.index.packer.IndexPacker;
+import org.apache.maven.index.packer.IndexPackingRequest;
+import org.apache.maven.index.updater.IndexUpdateRequest;
+import org.apache.maven.index.updater.ResourceFetcher;
+import org.apache.maven.index_shaded.lucene.index.IndexFormatTooOldException;
+import org.apache.maven.wagon.ConnectionException;
+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.authentication.AuthenticationInfo;
+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.proxy.ProxyInfo;
+import org.apache.maven.wagon.shared.http.AbstractHttpClientWagon;
+import org.apache.maven.wagon.shared.http.HttpConfiguration;
+import org.apache.maven.wagon.shared.http.HttpMethodConfiguration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import javax.inject.Inject;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentSkipListSet;
+import java.util.stream.Collectors;
+
+/**
+ * @author Martin Stockhammer <martin_s@apache.org>
+ */
+@Service("archivaIndexManager#maven")
+public class ArchivaIndexManagerMock implements ArchivaIndexManager {
+ private static final Logger log = LoggerFactory.getLogger( ArchivaIndexManagerMock.class );
+
+ @Inject
+ private Indexer indexer;
+
+ @Inject
+ private IndexerEngine indexerEngine;
+
+ @Inject
+ private List<? extends IndexCreator> indexCreators;
+
+ @Inject
+ private IndexPacker indexPacker;
+
+ @Inject
+ private Scanner scanner;
+
+ @Inject
+ private ArchivaConfiguration archivaConfiguration;
+
+ @Inject
+ private WagonFactory wagonFactory;
+
+ @Inject
+ private ArtifactContextProducer artifactContextProducer;
+
+ @Inject
+ private ProxyRegistry proxyRegistry;
+
+ private ConcurrentSkipListSet<Path> activeContexts = new ConcurrentSkipListSet<>( );
+
+ private static final int WAIT_TIME = 100;
+ private static final int MAX_WAIT = 10;
+
+
+ public static IndexingContext getMvnContext(ArchivaIndexingContext context ) throws UnsupportedBaseContextException
+ {
+ if ( !context.supports( IndexingContext.class ) )
+ {
+ log.error( "The provided archiva index context does not support the maven IndexingContext" );
+ throw new UnsupportedBaseContextException( "The context does not support the Maven IndexingContext" );
+ }
+ return context.getBaseContext( IndexingContext.class );
+ }
+
+ private Path getIndexPath( ArchivaIndexingContext ctx )
+ {
+ return PathUtil.getPathFromUri( ctx.getPath( ) );
+ }
+
+ @FunctionalInterface
+ interface IndexUpdateConsumer
+ {
+
+ void accept( IndexingContext indexingContext ) throws IndexUpdateFailedException;
+ }
+
+ /*
+ * This method is used to do some actions around the update execution code. And to make sure, that no other
+ * method is running on the same index.
+ */
+ private void executeUpdateFunction( ArchivaIndexingContext context, IndexUpdateConsumer function ) throws IndexUpdateFailedException
+ {
+ IndexingContext indexingContext = null;
+ try
+ {
+ indexingContext = getMvnContext( context );
+ }
+ catch ( UnsupportedBaseContextException e )
+ {
+ throw new IndexUpdateFailedException( "Maven index is not supported by this context", e );
+ }
+ final Path ctxPath = getIndexPath( context );
+ int loop = MAX_WAIT;
+ boolean active = false;
+ while ( loop-- > 0 && !active )
+ {
+ active = activeContexts.add( ctxPath );
+ try
+ {
+ Thread.currentThread( ).sleep( WAIT_TIME );
+ }
+ catch ( InterruptedException e )
+ {
+ // Ignore this
+ }
+ }
+ if ( active )
+ {
+ try
+ {
+ function.accept( indexingContext );
+ }
+ finally
+ {
+ activeContexts.remove( ctxPath );
+ }
+ }
+ else
+ {
+ throw new IndexUpdateFailedException( "Timeout while waiting for index release on context " + context.getId( ) );
+ }
+ }
+
+ @Override
+ public void pack( final ArchivaIndexingContext context ) throws IndexUpdateFailedException
+ {
+ executeUpdateFunction( context, indexingContext -> {
+ try
+ {
+ IndexPackingRequest request = new IndexPackingRequest( indexingContext,
+ indexingContext.acquireIndexSearcher( ).getIndexReader( ),
+ indexingContext.getIndexDirectoryFile( ) );
+ indexPacker.packIndex( request );
+ indexingContext.updateTimestamp( true );
+ }
+ catch ( IOException e )
+ {
+ log.error( "IOException while packing index of context " + context.getId( ) + ( StringUtils.isNotEmpty( e.getMessage( ) ) ? ": " + e.getMessage( ) : "" ) );
+ throw new IndexUpdateFailedException( "IOException during update of " + context.getId( ), e );
+ }
+ }
+ );
+
+ }
+
+ @Override
+ public void scan(final ArchivaIndexingContext context) throws IndexUpdateFailedException
+ {
+ executeUpdateFunction( context, indexingContext -> {
+ DefaultScannerListener listener = new DefaultScannerListener( indexingContext, indexerEngine, true, null );
+ ScanningRequest request = new ScanningRequest( indexingContext, listener );
+ ScanningResult result = scanner.scan( request );
+ if ( result.hasExceptions( ) )
+ {
+ log.error( "Exceptions occured during index scan of " + context.getId( ) );
+ result.getExceptions( ).stream( ).map( e -> e.getMessage( ) ).distinct( ).limit( 5 ).forEach(
+ s -> log.error( "Message: " + s )
+ );
+ }
+
+ } );
+ }
+
+ @Override
+ public void update(final ArchivaIndexingContext context, final boolean fullUpdate) throws IndexUpdateFailedException
+ {
+ log.info( "start download remote index for remote repository {}", context.getRepository( ).getId( ) );
+ URI remoteUpdateUri;
+ if ( !( context.getRepository( ) instanceof RemoteRepository) || !(context.getRepository().supportsFeature(RemoteIndexFeature.class)) )
+ {
+ throw new IndexUpdateFailedException( "The context is not associated to a remote repository with remote index " + context.getId( ) );
+ } else {
+ RemoteIndexFeature rif = context.getRepository().getFeature(RemoteIndexFeature.class).get();
+ remoteUpdateUri = context.getRepository().getLocation().resolve(rif.getIndexUri());
+ }
+ final RemoteRepository remoteRepository = (RemoteRepository) context.getRepository( );
+
+ executeUpdateFunction( context,
+ indexingContext -> {
+ try
+ {
+ // create a temp directory to download files
+ Path tempIndexDirectory = Paths.get( indexingContext.getIndexDirectoryFile( ).getParent( ), ".tmpIndex" );
+ Path indexCacheDirectory = Paths.get( indexingContext.getIndexDirectoryFile( ).getParent( ), ".indexCache" );
+ Files.createDirectories( indexCacheDirectory );
+ if ( Files.exists( tempIndexDirectory ) )
+ {
+ org.apache.archiva.common.utils.FileUtils.deleteDirectory( tempIndexDirectory );
+ }
+ Files.createDirectories( tempIndexDirectory );
+ tempIndexDirectory.toFile( ).deleteOnExit( );
+ String baseIndexUrl = indexingContext.getIndexUpdateUrl( );
+
+ String wagonProtocol = remoteUpdateUri.toURL( ).getProtocol( );
+
+ NetworkProxy networkProxy = null;
+ if ( remoteRepository.supportsFeature( RemoteIndexFeature.class ) )
+ {
+ RemoteIndexFeature rif = remoteRepository.getFeature( RemoteIndexFeature.class ).get( );
+ if ( StringUtils.isNotBlank( rif.getProxyId( ) ) )
+ {
+ networkProxy = proxyRegistry.getNetworkProxy( rif.getProxyId( ) );
+ if ( networkProxy == null )
+ {
+ log.warn(
+ "your remote repository is configured to download remote index trought a proxy we cannot find id:{}",
+ rif.getProxyId( ) );
+ }
+ }
+
+ final StreamWagon wagon = (StreamWagon) wagonFactory.getWagon(
+ new WagonFactoryRequest( wagonProtocol, remoteRepository.getExtraHeaders( ) ).networkProxy(
+ networkProxy )
+ );
+ int readTimeout = (int) rif.getDownloadTimeout( ).toMillis( ) * 1000;
+ wagon.setReadTimeout( readTimeout );
+ wagon.setTimeout( (int) remoteRepository.getTimeout( ).toMillis( ) * 1000 );
+
+ if ( wagon instanceof AbstractHttpClientWagon)
+ {
+ HttpConfiguration httpConfiguration = new HttpConfiguration( );
+ HttpMethodConfiguration httpMethodConfiguration = new HttpMethodConfiguration( );
+ httpMethodConfiguration.setUsePreemptive( true );
+ httpMethodConfiguration.setReadTimeout( readTimeout );
+ httpConfiguration.setGet( httpMethodConfiguration );
+ AbstractHttpClientWagon.class.cast( wagon ).setHttpConfiguration( httpConfiguration );
+ }
+
+ wagon.addTransferListener( new DownloadListener( ) );
+ ProxyInfo proxyInfo = null;
+ if ( networkProxy != null )
+ {
+ proxyInfo = new ProxyInfo( );
+ proxyInfo.setType( networkProxy.getProtocol( ) );
+ proxyInfo.setHost( networkProxy.getHost( ) );
+ proxyInfo.setPort( networkProxy.getPort( ) );
+ proxyInfo.setUserName( networkProxy.getUsername( ) );
+ proxyInfo.setPassword( networkProxy.getPassword( ) );
+ }
+ AuthenticationInfo authenticationInfo = null;
+ if ( remoteRepository.getLoginCredentials( ) != null && ( remoteRepository.getLoginCredentials( ) instanceof PasswordCredentials) )
+ {
+ PasswordCredentials creds = (PasswordCredentials) remoteRepository.getLoginCredentials( );
+ authenticationInfo = new AuthenticationInfo( );
+ authenticationInfo.setUserName( creds.getUsername( ) );
+ authenticationInfo.setPassword( new String( creds.getPassword( ) ) );
+ }
+ wagon.connect( new org.apache.maven.wagon.repository.Repository( remoteRepository.getId( ), baseIndexUrl ), authenticationInfo,
+ proxyInfo );
+
+ Path indexDirectory = indexingContext.getIndexDirectoryFile( ).toPath( );
+ if ( !Files.exists( indexDirectory ) )
+ {
+ Files.createDirectories( indexDirectory );
+ }
+
+ ResourceFetcher resourceFetcher =
+ new WagonResourceFetcher( log, tempIndexDirectory, wagon, remoteRepository );
+ IndexUpdateRequest request = new IndexUpdateRequest( indexingContext, resourceFetcher );
+ request.setForceFullUpdate( fullUpdate );
+ request.setLocalIndexCacheDir( indexCacheDirectory.toFile( ) );
+
+ // indexUpdater.fetchAndUpdateIndex( request );
+
+ indexingContext.updateTimestamp( true );
+ }
+
+ }
+ catch ( AuthenticationException e )
+ {
+ log.error( "Could not login to the remote proxy for updating index of {}", remoteRepository.getId( ), e );
+ throw new IndexUpdateFailedException( "Login in to proxy failed while updating remote repository " + remoteRepository.getId( ), e );
+ }
+ catch ( ConnectionException e )
+ {
+ log.error( "Connection error during index update for remote repository {}", remoteRepository.getId( ), e );
+ throw new IndexUpdateFailedException( "Connection error during index update for remote repository " + remoteRepository.getId( ), e );
+ }
+ catch ( MalformedURLException e )
+ {
+ log.error( "URL for remote index update of remote repository {} is not correct {}", remoteRepository.getId( ), remoteUpdateUri, e );
+ throw new IndexUpdateFailedException( "URL for remote index update of repository is not correct " + remoteUpdateUri, e );
+ }
+ catch ( IOException e )
+ {
+ log.error( "IOException during index update of remote repository {}: {}", remoteRepository.getId( ), e.getMessage( ), e );
+ throw new IndexUpdateFailedException( "IOException during index update of remote repository " + remoteRepository.getId( )
+ + ( StringUtils.isNotEmpty( e.getMessage( ) ) ? ": " + e.getMessage( ) : "" ), e );
+ }
+ catch ( WagonFactoryException e )
+ {
+ log.error( "Wagon for remote index download of {} could not be created: {}", remoteRepository.getId( ), e.getMessage( ), e );
+ throw new IndexUpdateFailedException( "Error while updating the remote index of " + remoteRepository.getId( ), e );
+ }
+ } );
+
+ }
+
+ @Override
+ public void addArtifactsToIndex( final ArchivaIndexingContext context, final Collection<URI> artifactReference ) throws IndexUpdateFailedException
+ {
+ final URI ctxUri = context.getPath();
+ executeUpdateFunction(context, indexingContext -> {
+ Collection<ArtifactContext> artifacts = artifactReference.stream().map(r -> artifactContextProducer.getArtifactContext(indexingContext, Paths.get(ctxUri.resolve(r)).toFile())).collect(Collectors.toList());
+ try {
+ indexer.addArtifactsToIndex(artifacts, indexingContext);
+ } catch (IOException e) {
+ log.error("IOException while adding artifact {}", e.getMessage(), e);
+ throw new IndexUpdateFailedException("Error occured while adding artifact to index of "+context.getId()
+ + (StringUtils.isNotEmpty(e.getMessage()) ? ": "+e.getMessage() : ""));
+ }
+ });
+ }
+
+ @Override
+ public void removeArtifactsFromIndex( ArchivaIndexingContext context, Collection<URI> artifactReference ) throws IndexUpdateFailedException
+ {
+ final URI ctxUri = context.getPath();
+ executeUpdateFunction(context, indexingContext -> {
+ Collection<ArtifactContext> artifacts = artifactReference.stream().map(r -> artifactContextProducer.getArtifactContext(indexingContext, Paths.get(ctxUri.resolve(r)).toFile())).collect(Collectors.toList());
+ try {
+ indexer.deleteArtifactsFromIndex(artifacts, indexingContext);
+ } catch (IOException e) {
+ log.error("IOException while removing artifact {}", e.getMessage(), e);
+ throw new IndexUpdateFailedException("Error occured while removing artifact from index of "+context.getId()
+ + (StringUtils.isNotEmpty(e.getMessage()) ? ": "+e.getMessage() : ""));
+ }
+ });
+
+ }
+
+ @Override
+ public boolean supportsRepository( RepositoryType type )
+ {
+ return type == RepositoryType.MAVEN;
+ }
+
+ @Override
+ public ArchivaIndexingContext createContext( Repository repository ) throws IndexCreationFailedException
+ {
+ log.debug("Creating context for repo {}, type: {}", repository.getId(), repository.getType());
+ if ( repository.getType( ) != RepositoryType.MAVEN )
+ {
+ throw new UnsupportedRepositoryTypeException( repository.getType( ) );
+ }
+ IndexingContext mvnCtx = null;
+ try
+ {
+ if ( repository instanceof RemoteRepository )
+ {
+ mvnCtx = createRemoteContext( (RemoteRepository) repository );
+ }
+ else if ( repository instanceof ManagedRepository )
+ {
+ mvnCtx = createManagedContext( (ManagedRepository) repository );
+ }
+ }
+ catch ( IOException e )
+ {
+ log.error( "IOException during context creation " + e.getMessage( ), e );
+ throw new IndexCreationFailedException( "Could not create index context for repository " + repository.getId( )
+ + ( StringUtils.isNotEmpty( e.getMessage( ) ) ? ": " + e.getMessage( ) : "" ), e );
+ }
+ MavenIndexContextMock context = new MavenIndexContextMock( repository, mvnCtx );
+
+ return context;
+ }
+
+ @Override
+ public ArchivaIndexingContext reset(ArchivaIndexingContext context) throws IndexUpdateFailedException {
+ ArchivaIndexingContext ctx;
+ executeUpdateFunction(context, indexingContext -> {
+ try {
+ indexingContext.close(true);
+ } catch (IOException e) {
+ log.warn("Index close failed");
+ }
+ try {
+ FileUtils.deleteDirectory(Paths.get(context.getPath()));
+ } catch (IOException e) {
+ throw new IndexUpdateFailedException("Could not delete index files");
+ }
+ });
+ try {
+ Repository repo = context.getRepository();
+ ctx = createContext(context.getRepository());
+ if (repo instanceof EditableRepository) {
+ ((EditableRepository)repo).setIndexingContext(ctx);
+ }
+ } catch (IndexCreationFailedException e) {
+ throw new IndexUpdateFailedException("Could not create index");
+ }
+ return ctx;
+ }
+
+ @Override
+ public ArchivaIndexingContext move(ArchivaIndexingContext context, Repository repo) throws IndexCreationFailedException {
+ if (context==null) {
+ return null;
+ }
+ if (context.supports(IndexingContext.class)) {
+ try {
+ Path newPath = getIndexPath(repo);
+ IndexingContext ctx = context.getBaseContext(IndexingContext.class);
+ Path oldPath = ctx.getIndexDirectoryFile().toPath();
+ if (oldPath.equals(newPath)) {
+ // Nothing to do, if path does not change
+ return context;
+ }
+ if (!Files.exists(oldPath)) {
+ return createContext(repo);
+ } else if (context.isEmpty()) {
+ context.close();
+ return createContext(repo);
+ } else {
+ context.close(false);
+ Files.move(oldPath, newPath);
+ return createContext(repo);
+ }
+ } catch (IOException e) {
+ log.error("IOException while moving index directory {}", e.getMessage(), e);
+ throw new IndexCreationFailedException("Could not recreated the index.", e);
+ } catch (UnsupportedBaseContextException e) {
+ throw new IndexCreationFailedException("The given context, is not a maven context.");
+ }
+ } else {
+ throw new IndexCreationFailedException("Bad context type. This is not a maven context.");
+ }
+ }
+
+ @Override
+ public void updateLocalIndexPath(Repository repo) {
+ if (repo.supportsFeature(IndexCreationFeature.class)) {
+ IndexCreationFeature icf = repo.getFeature(IndexCreationFeature.class).get();
+ try {
+ icf.setLocalIndexPath(getIndexPath(repo));
+ } catch (IOException e) {
+ log.error("Could not set local index path for {}. New URI: {}", repo.getId(), icf.getIndexPath());
+ }
+ }
+ }
+
+
+ private Path getIndexPath(Repository repo) throws IOException {
+ IndexCreationFeature icf = repo.getFeature(IndexCreationFeature.class).get();
+ Path repoDir = repo.getLocalPath();
+ URI indexDir = icf.getIndexPath();
+ Path indexDirectory = null;
+ if ( ! StringUtils.isEmpty(indexDir.toString( ) ) )
+ {
+
+ indexDirectory = PathUtil.getPathFromUri( indexDir );
+ // not absolute so create it in repository directory
+ if ( !indexDirectory.isAbsolute( ) )
+ {
+ indexDirectory = repoDir.resolve( indexDirectory );
+ }
+ }
+ else
+ {
+ indexDirectory = repoDir.resolve( ".index" );
+ }
+
+ if ( !Files.exists( indexDirectory ) )
+ {
+ Files.createDirectories( indexDirectory );
+ }
+ return indexDirectory;
+ }
+
+ private IndexingContext createRemoteContext(RemoteRepository remoteRepository ) throws IOException
+ {
+ Path appServerBase = archivaConfiguration.getAppServerBaseDir( );
+
+ String contextKey = "remote-" + remoteRepository.getId( );
+
+
+ // create remote repository path
+ Path repoDir = remoteRepository.getLocalPath();
+ if ( !Files.exists( repoDir ) )
+ {
+ Files.createDirectories( repoDir );
+ }
+
+ Path indexDirectory = null;
+
+ // is there configured indexDirectory ?
+ if ( remoteRepository.supportsFeature( RemoteIndexFeature.class ) )
+ {
+ RemoteIndexFeature rif = remoteRepository.getFeature( RemoteIndexFeature.class ).get( );
+ indexDirectory = getIndexPath(remoteRepository);
+ String remoteIndexUrl = calculateIndexRemoteUrl( remoteRepository.getLocation( ), rif );
+ try
+ {
+
+ return getIndexingContext( remoteRepository, contextKey, repoDir, indexDirectory, remoteIndexUrl );
+ }
+ catch ( IndexFormatTooOldException e )
+ {
+ // existing index with an old lucene format so we need to delete it!!!
+ // delete it first then recreate it.
+ log.warn( "the index of repository {} is too old we have to delete and recreate it", //
+ remoteRepository.getId( ) );
+ org.apache.archiva.common.utils.FileUtils.deleteDirectory( indexDirectory );
+ return getIndexingContext( remoteRepository, contextKey, repoDir, indexDirectory, remoteIndexUrl );
+
+ }
+ }
+ else
+ {
+ throw new IOException( "No remote index defined" );
+ }
+ }
+
+ private IndexingContext getIndexingContext( Repository repository, String contextKey, Path repoDir, Path indexDirectory, String indexUrl ) throws IOException
+ {
+ return indexer.createIndexingContext( contextKey, repository.getId( ), repoDir.toFile( ), indexDirectory.toFile( ),
+ repository.getLocation( ) == null ? null : repository.getLocation( ).toString( ),
+ indexUrl,
+ true, false,
+ indexCreators );
+ }
+
+ private IndexingContext createManagedContext( ManagedRepository repository ) throws IOException
+ {
+
+ IndexingContext context;
+ // take care first about repository location as can be relative
+ Path repositoryDirectory = repository.getLocalPath();
+
+ if ( !Files.exists( repositoryDirectory ) )
+ {
+ try
+ {
+ Files.createDirectories( repositoryDirectory );
+ }
+ catch ( IOException e )
+ {
+ log.error( "Could not create directory {}", repositoryDirectory );
+ }
+ }
+
+ Path indexDirectory = null;
+
+ if ( repository.supportsFeature( IndexCreationFeature.class ) )
+ {
+ indexDirectory = getIndexPath(repository);
+
+ String indexUrl = repositoryDirectory.toUri( ).toURL( ).toExternalForm( );
+ try
+ {
+ context = getIndexingContext( repository, repository.getId( ), repositoryDirectory, indexDirectory, indexUrl );
+ context.setSearchable( repository.isScanned( ) );
+ }
+ catch ( IndexFormatTooOldException e )
+ {
+ // existing index with an old lucene format so we need to delete it!!!
+ // delete it first then recreate it.
+ log.warn( "the index of repository {} is too old we have to delete and recreate it", //
+ repository.getId( ) );
+ org.apache.archiva.common.utils.FileUtils.deleteDirectory( indexDirectory );
+ context = getIndexingContext( repository, repository.getId( ), repositoryDirectory, indexDirectory, indexUrl );
+ context.setSearchable( repository.isScanned( ) );
+ }
+ return context;
+ }
+ else
+ {
+ throw new IOException( "No repository index defined" );
+ }
+ }
+
+ private String calculateIndexRemoteUrl( URI baseUri, RemoteIndexFeature rif )
+ {
+ if ( rif.getIndexUri( ) == null )
+ {
+ return baseUri.resolve( ".index" ).toString( );
+ }
+ else
+ {
+ return baseUri.resolve( rif.getIndexUri( ) ).toString( );
+ }
+ }
+
+ private static final class DownloadListener
+ implements TransferListener
+ {
+ private Logger log = LoggerFactory.getLogger( getClass( ) );
+
+ private String resourceName;
+
+ private long startTime;
+
+ private int totalLength = 0;
+
+ @Override
+ public void transferInitiated( TransferEvent transferEvent )
+ {
+ startTime = System.currentTimeMillis( );
+ resourceName = transferEvent.getResource( ).getName( );
+ log.debug( "initiate transfer of {}", resourceName );
+ }
+
+ @Override
+ public void transferStarted( TransferEvent transferEvent )
+ {
+ this.totalLength = 0;
+ resourceName = transferEvent.getResource( ).getName( );
+ log.info( "start transfer of {}", transferEvent.getResource( ).getName( ) );
+ }
+
+ @Override
+ public void transferProgress( TransferEvent transferEvent, byte[] buffer, int length )
+ {
+ log.debug( "transfer of {} : {}/{}", transferEvent.getResource( ).getName( ), buffer.length, length );
+ this.totalLength += length;
+ }
+
+ @Override
+ public void transferCompleted( TransferEvent transferEvent )
+ {
+ resourceName = transferEvent.getResource( ).getName( );
+ long endTime = System.currentTimeMillis( );
+ log.info( "end of transfer file {} {} kb: {}s", transferEvent.getResource( ).getName( ),
+ this.totalLength / 1024, ( endTime - startTime ) / 1000 );
+ }
+
+ @Override
+ public void transferError( TransferEvent transferEvent )
+ {
+ log.info( "error of transfer file {}: {}", transferEvent.getResource( ).getName( ),
+ transferEvent.getException( ).getMessage( ), transferEvent.getException( ) );
+ }
+
+ @Override
+ public void debug( String message )
+ {
+ log.debug( "transfer debug {}", message );
+ }
+ }
+
+ private static class WagonResourceFetcher
+ implements ResourceFetcher
+ {
+
+ Logger log;
+
+ Path tempIndexDirectory;
+
+ Wagon wagon;
+
+ RemoteRepository remoteRepository;
+
+ private WagonResourceFetcher( Logger log, Path tempIndexDirectory, Wagon wagon,
+ RemoteRepository remoteRepository )
+ {
+ this.log = log;
+ this.tempIndexDirectory = tempIndexDirectory;
+ this.wagon = wagon;
+ this.remoteRepository = remoteRepository;
+ }
+
+ @Override
+ public void connect( String id, String url )
+ throws IOException
+ {
+ //no op
+ }
+
+ @Override
+ public void disconnect( )
+ throws IOException
+ {
+ // no op
+ }
+
+ @Override
+ public InputStream retrieve(String name )
+ throws IOException, FileNotFoundException
+ {
+ try
+ {
+ log.info( "index update retrieve file, name:{}", name );
+ Path file = tempIndexDirectory.resolve( name );
+ Files.deleteIfExists( file );
+ file.toFile( ).deleteOnExit( );
+ wagon.get( addParameters( name, remoteRepository ), file.toFile( ) );
+ return Files.newInputStream( file );
+ }
+ catch ( AuthorizationException | TransferFailedException e )
+ {
+ throw new IOException( e.getMessage( ), e );
+ }
+ catch ( ResourceDoesNotExistException e )
+ {
+ FileNotFoundException fnfe = new FileNotFoundException( e.getMessage( ) );
+ fnfe.initCause( e );
+ throw fnfe;
+ }
+ }
+
+ // FIXME remove crappy copy/paste
+ protected String addParameters( String path, RemoteRepository remoteRepository )
+ {
+ if ( remoteRepository.getExtraParameters( ).isEmpty( ) )
+ {
+ return path;
+ }
+
+ boolean question = false;
+
+ StringBuilder res = new StringBuilder( path == null ? "" : path );
+
+ for ( Map.Entry<String, String> entry : remoteRepository.getExtraParameters( ).entrySet( ) )
+ {
+ if ( !question )
+ {
+ res.append( '?' ).append( entry.getKey( ) ).append( '=' ).append( entry.getValue( ) );
+ }
+ }
+
+ return res.toString( );
+ }
+
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/index/mock/MavenIndexContextMock.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/index/mock/MavenIndexContextMock.java
new file mode 100644
index 000000000..e0db09597
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/index/mock/MavenIndexContextMock.java
@@ -0,0 +1,137 @@
+package org.apache.archiva.repository.index.mock;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.indexer.ArchivaIndexingContext;
+import org.apache.archiva.repository.Repository;
+import org.apache.maven.index.context.IndexingContext;
+
+import java.io.IOException;
+import java.net.URI;
+import java.nio.file.Files;
+import java.nio.file.NoSuchFileException;
+import java.sql.Date;
+import java.time.ZonedDateTime;
+import java.util.Set;
+
+/**
+ * Maven implementation of index context
+ */
+public class MavenIndexContextMock implements ArchivaIndexingContext {
+
+ private IndexingContext delegate;
+ private Repository repository;
+
+ MavenIndexContextMock(Repository repository, IndexingContext delegate) {
+ this.delegate = delegate;
+ this.repository = repository;
+
+ }
+
+ @Override
+ public String getId() {
+ return delegate.getId();
+ }
+
+ @Override
+ public Repository getRepository() {
+ return repository;
+ }
+
+ @Override
+ public URI getPath() {
+ return delegate.getIndexDirectoryFile().toURI();
+ }
+
+ @Override
+ public boolean isEmpty() throws IOException {
+ return Files.list(delegate.getIndexDirectoryFile().toPath()).count()==0;
+ }
+
+ @Override
+ public void commit() throws IOException {
+ delegate.commit();
+ }
+
+ @Override
+ public void rollback() throws IOException {
+ delegate.rollback();
+ }
+
+ @Override
+ public void optimize() throws IOException {
+ delegate.optimize();
+ }
+
+ @Override
+ public void close(boolean deleteFiles) throws IOException {
+ try {
+ delegate.close(deleteFiles);
+ } catch (NoSuchFileException e) {
+ // Ignore missing directory
+ }
+ }
+
+ @Override
+ public void close() throws IOException {
+ try {
+ delegate.close(false);
+ } catch (NoSuchFileException e) {
+ // Ignore missing directory
+ }
+ }
+
+ @Override
+ public void purge() throws IOException {
+ delegate.purge();
+ }
+
+ @Override
+ public boolean supports(Class<?> clazz) {
+ return IndexingContext.class.equals(clazz);
+ }
+
+ @SuppressWarnings( "unchecked" )
+ @Override
+ public <T> T getBaseContext(Class<T> clazz) throws UnsupportedOperationException {
+ if (IndexingContext.class.equals(clazz)) {
+ return (T) delegate;
+ } else {
+ throw new UnsupportedOperationException("The class "+clazz+" is not supported by the maven indexer");
+ }
+ }
+
+ @Override
+ public Set<String> getGroups() throws IOException {
+ return delegate.getAllGroups();
+ }
+
+ @Override
+ public void updateTimestamp(boolean save) throws IOException {
+ delegate.updateTimestamp(save);
+ }
+
+ @Override
+ public void updateTimestamp(boolean save, ZonedDateTime time) throws IOException {
+ delegate.updateTimestamp(save, Date.from(time.toInstant()));
+ }
+
+
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven2/MavenRepositoryProviderTest.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven2/MavenRepositoryProviderTest.java
new file mode 100644
index 000000000..9030f6581
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven2/MavenRepositoryProviderTest.java
@@ -0,0 +1,295 @@
+package org.apache.archiva.repository.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.common.utils.FileUtils;
+import org.apache.archiva.configuration.ArchivaRuntimeConfiguration;
+import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
+import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
+import org.apache.archiva.metadata.repository.storage.maven2.conf.MockConfiguration;
+import org.apache.archiva.repository.ManagedRepository;
+import org.apache.archiva.repository.PasswordCredentials;
+import org.apache.archiva.repository.ReleaseScheme;
+import org.apache.archiva.repository.RemoteRepository;
+import org.apache.archiva.repository.RepositoryType;
+import org.apache.archiva.repository.UnsupportedFeatureException;
+import org.apache.archiva.repository.features.ArtifactCleanupFeature;
+import org.apache.archiva.repository.features.IndexCreationFeature;
+import org.apache.archiva.repository.features.RemoteIndexFeature;
+import org.apache.archiva.repository.features.StagingRepositoryFeature;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.net.URI;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.time.Duration;
+import java.time.Period;
+import java.time.temporal.ChronoUnit;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.junit.Assert.*;
+
+/**
+ * @author Martin Stockhammer <martin_s@apache.org>
+ */
+public class MavenRepositoryProviderTest
+{
+
+ MavenRepositoryProvider provider;
+
+ Path repoLocation;
+
+
+ @Before
+ public void setUp()
+ throws Exception
+ {
+ provider = new MavenRepositoryProvider( );
+ MockConfiguration mockConfiguration =new MockConfiguration();
+ mockConfiguration.getConfiguration().setArchivaRuntimeConfiguration( new ArchivaRuntimeConfiguration() );
+ mockConfiguration.getConfiguration().getArchivaRuntimeConfiguration().setRepositoryBaseDirectory( "repositories" );
+ provider.setArchivaConfiguration( mockConfiguration );
+ }
+
+ @After
+ public void cleanUp() {
+ if (repoLocation!=null && Files.exists( repoLocation )) {
+ FileUtils.deleteQuietly( repoLocation );
+ }
+ }
+
+ @Test
+ public void provides( ) throws Exception
+ {
+ assertEquals(1, provider.provides().size());
+ assertEquals( RepositoryType.MAVEN, provider.provides().iterator().next());
+ }
+
+ @Test
+ public void createManagedInstance( ) throws Exception
+ {
+ ManagedRepositoryConfiguration repo = new ManagedRepositoryConfiguration( );
+ repo.setId("testm001");
+ repo.setName("Managed Test Repo 001");
+ repo.setDescription( "This is a managed test" );
+ repo.setRetentionPeriod( 37 );
+ repoLocation = Files.createTempDirectory( "test-repo-001");
+ repo.setLocation( repoLocation.toAbsolutePath().toString() );
+ repo.setSnapshots( true );
+ repo.setReleases( true );
+ repo.setRefreshCronExpression( "4 0 0 ? * TUE" );
+ repo.setScanned( true );
+ repo.setBlockRedeployments( true );
+ repo.setDeleteReleasedSnapshots( true );
+ repo.setRetentionCount( 33 );
+ repo.setSkipPackedIndexCreation( true );
+ repo.setStageRepoNeeded( true );
+ repo.setIndexDir( "testmanaged/.index" );
+ repo.setLayout( "maven2" );
+ repo.setType( RepositoryType.MAVEN.toString() );
+
+
+ ManagedRepository mr = provider.createManagedInstance( repo );
+ assertNotNull(mr.getLocation());
+ String repoUri = repoLocation.toUri().toString();
+ assertTrue(Files.exists(repoLocation));
+ repoUri = repoUri.substring( 0, repoUri.length()-1 );
+ assertEquals(repoUri, mr.getLocation().toString());
+ assertEquals("This is a managed test", mr.getDescription());
+ assertEquals("Managed Test Repo 001", mr.getName());
+ assertEquals(2, mr.getActiveReleaseSchemes().size());
+ assertTrue( mr.getActiveReleaseSchemes().contains( ReleaseScheme.RELEASE ));
+ assertTrue( mr.getActiveReleaseSchemes().contains( ReleaseScheme.SNAPSHOT));
+ assertEquals("testm001", mr.getId());
+ assertTrue(mr.blocksRedeployments());
+ assertEquals("4 0 0 ? * TUE", mr.getSchedulingDefinition());
+ assertTrue(mr.isScanned());
+ ArtifactCleanupFeature artifactCleanupFeature = mr.getFeature( ArtifactCleanupFeature.class ).get();
+ assertEquals( Period.ofDays( 37), artifactCleanupFeature.getRetentionPeriod());
+ assertTrue(artifactCleanupFeature.isDeleteReleasedSnapshots());
+ assertEquals(33, artifactCleanupFeature.getRetentionCount());
+
+ IndexCreationFeature indexCreationFeature = mr.getFeature( IndexCreationFeature.class ).get();
+ assertNotNull(indexCreationFeature.getIndexPath());
+ assertEquals("testmanaged/.index", indexCreationFeature.getIndexPath().toString());
+ assertFalse(indexCreationFeature.getIndexPath().isAbsolute());
+ assertTrue(indexCreationFeature.isSkipPackedIndexCreation());
+
+ StagingRepositoryFeature stagingRepositoryFeature = mr.getFeature( StagingRepositoryFeature.class ).get();
+ assertTrue(stagingRepositoryFeature.isStageRepoNeeded());
+ assertNull(stagingRepositoryFeature.getStagingRepository());
+
+
+ }
+
+ @Test
+ public void createRemoteInstance( ) throws Exception
+ {
+ RemoteRepositoryConfiguration repo = new RemoteRepositoryConfiguration( );
+ repo.setUsername("testuser001");
+ repo.setPassword( "pwd0000abc" );
+ repo.setCheckPath( "test/check.html" );
+ repo.setTimeout( 50 );
+ repo.setUrl( "https://repo.maven.apache.org/maven2/test" );
+ repo.setDownloadRemoteIndex( true );
+ repo.setDownloadRemoteIndexOnStartup( true );
+ Map<String,String> header = new HashMap<>( );
+ header.put("header1","value1");
+ header.put("header2","value2");
+ repo.setExtraHeaders( header );
+ Map<String,String> params = new HashMap<>( );
+ params.put("param1","pval1");
+ params.put("param2","pval2");
+ repo.setExtraParameters( params );
+ repo.setRefreshCronExpression( "0 1 07 ? * MON" );
+ repo.setRemoteDownloadTimeout( 333 );
+ repo.setRemoteIndexUrl( "testremote/.index" );
+ repo.setDescription( "This is a test" );
+ repo.setId( "test001" );
+ repo.setName( "Remote Test Repo 001" );
+ repo.setIndexDir( "testindex/.index" );
+ repo.setLayout( "maven2" );
+ repo.setType( RepositoryType.MAVEN.toString() );
+ repo.setIndexDir( "local/.index" );
+
+ RemoteRepository mr = provider.createRemoteInstance( repo );
+ assertEquals("test001", mr.getId());
+ assertEquals("This is a test", mr.getDescription());
+ assertNotNull(mr.getLocation());
+ assertEquals("https://repo.maven.apache.org/maven2/test", mr.getLocation().toString());
+ assertEquals("Remote Test Repo 001", mr.getName());
+ assertEquals("test001", mr.getId());
+ assertEquals("0 1 07 ? * MON", mr.getSchedulingDefinition());
+ assertEquals(50, mr.getTimeout().get( ChronoUnit.SECONDS ));
+ assertTrue(mr.isScanned());
+ assertNotNull(mr.getLoginCredentials());
+ assertTrue(mr.getLoginCredentials() instanceof PasswordCredentials);
+ PasswordCredentials creds = (PasswordCredentials) mr.getLoginCredentials();
+ assertEquals("testuser001", creds.getUsername());
+ assertEquals("pwd0000abc", new String(creds.getPassword()));
+ assertEquals("value1", mr.getExtraHeaders().get("header1"));
+ assertEquals("pval2", mr.getExtraParameters().get("param2"));
+ assertEquals( "maven2", mr.getLayout());
+ try
+ {
+ ArtifactCleanupFeature artifactCleanupFeature = mr.getFeature( ArtifactCleanupFeature.class ).get( );
+ throw new Exception("artifactCleanupFeature should not be available");
+ } catch ( UnsupportedFeatureException e ) {
+ // correct
+ }
+
+ IndexCreationFeature indexCreationFeature = mr.getFeature( IndexCreationFeature.class ).get( );
+ assertEquals("local/.index", indexCreationFeature.getIndexPath().toString());
+ try
+ {
+ StagingRepositoryFeature stagingRepositoryFeature = mr.getFeature( StagingRepositoryFeature.class ).get( );
+ throw new Exception("stagingRepositoryFeature should not be available");
+ } catch (UnsupportedFeatureException e) {
+ // correct
+ }
+ RemoteIndexFeature remoteIndexFeature = mr.getFeature( RemoteIndexFeature.class ).get();
+ assertNull(remoteIndexFeature.getProxyId());
+ }
+
+ @Test
+ public void getManagedConfiguration() throws Exception {
+ MavenManagedRepository repo = new MavenManagedRepository( "test01", "My Test repo", Paths.get("target/repositories") );
+
+ repo.setLocation( new URI("file:///this.is/a/test") );
+ repo.setScanned( true );
+ repo.setDescription( repo.getPrimaryLocale(), "This is a description" );
+ repo.setLayout( "maven2" );
+ repo.setBlocksRedeployment( true );
+ repo.setName( repo.getPrimaryLocale(), "test0002" );
+ repo.setSchedulingDefinition( "0 0 05 ? * WED" );
+ repo.addActiveReleaseScheme( ReleaseScheme.RELEASE );
+ repo.addActiveReleaseScheme( ReleaseScheme.SNAPSHOT );
+ StagingRepositoryFeature stagingFeat = repo.getFeature( StagingRepositoryFeature.class ).get( );
+ stagingFeat.setStageRepoNeeded( true );
+ IndexCreationFeature indexCreationFeature = repo.getFeature( IndexCreationFeature.class ).get();
+ indexCreationFeature.setIndexPath( new URI("test/.indexes") );
+ indexCreationFeature.setSkipPackedIndexCreation( true );
+ ArtifactCleanupFeature artifactCleanupFeature = repo.getFeature( ArtifactCleanupFeature.class ).get();
+ artifactCleanupFeature.setRetentionPeriod( Period.ofDays( 5 ) );
+ artifactCleanupFeature.setRetentionCount( 7 );
+ artifactCleanupFeature.setDeleteReleasedSnapshots( true );
+
+ ManagedRepositoryConfiguration cfg = provider.getManagedConfiguration( repo );
+ assertEquals("/this.is/a/test", cfg.getLocation());
+ assertTrue(cfg.isScanned());
+ assertEquals( "This is a description", cfg.getDescription() );
+ assertEquals("maven2", cfg.getLayout());
+ assertTrue(cfg.isBlockRedeployments());
+ assertEquals("test0002", cfg.getName());
+ assertEquals("0 0 05 ? * WED", cfg.getRefreshCronExpression());
+ assertTrue(cfg.isStageRepoNeeded());
+ assertEquals("test/.indexes", cfg.getIndexDir());
+ assertTrue(cfg.isSkipPackedIndexCreation());
+ assertEquals(5, cfg.getRetentionPeriod());
+ assertEquals(7, cfg.getRetentionCount());
+ assertTrue(cfg.isDeleteReleasedSnapshots());
+ assertTrue(cfg.isReleases());
+ assertTrue(cfg.isSnapshots());
+ assertTrue(cfg.isScanned());
+
+
+
+ }
+
+ @Test
+ public void getRemoteConfiguration() throws Exception {
+ MavenRemoteRepository repo = new MavenRemoteRepository( "test01", "My Test repo", Paths.get("target/remotes") );
+
+ repo.setLocation( new URI("https://this.is/a/test") );
+ repo.setScanned( true );
+ repo.setDescription( repo.getPrimaryLocale(), "This is a description" );
+ repo.setLayout( "maven2" );
+ repo.setName( repo.getPrimaryLocale(), "test0003" );
+ repo.setSchedulingDefinition( "0 0 05 ? * WED" );
+ RemoteIndexFeature remoteIndexFeature = repo.getFeature( RemoteIndexFeature.class ).get();
+ remoteIndexFeature.setProxyId( "proxyabc" );
+ remoteIndexFeature.setDownloadTimeout( Duration.ofSeconds( 54 ) );
+ remoteIndexFeature.setDownloadRemoteIndex( false );
+ remoteIndexFeature.setIndexUri( new URI("/this/remote/.index") );
+ remoteIndexFeature.setDownloadRemoteIndexOnStartup( true );
+ IndexCreationFeature indexCreationFeature = repo.getFeature( IndexCreationFeature.class ).get();
+ indexCreationFeature.setIndexPath( new URI("/this/local/.index") );
+
+ RemoteRepositoryConfiguration cfg = provider.getRemoteConfiguration( repo );
+ assertEquals("https://this.is/a/test", cfg.getUrl());
+ assertEquals( "This is a description", cfg.getDescription() );
+ assertEquals("maven2", cfg.getLayout());
+ assertEquals("test0003", cfg.getName());
+ assertEquals("0 0 05 ? * WED", cfg.getRefreshCronExpression());
+ assertEquals("/this/remote/.index", cfg.getRemoteIndexUrl());
+ assertEquals("proxyabc", cfg.getRemoteDownloadNetworkProxyId());
+ assertEquals(54, cfg.getRemoteDownloadTimeout());
+ assertFalse(cfg.isDownloadRemoteIndex());
+ assertTrue(cfg.isDownloadRemoteIndexOnStartup());
+ assertEquals("/this/local/.index", cfg.getIndexDir());
+
+
+ }
+
+} \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/metadata/Maven2RepositoryStorageTest.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/metadata/Maven2RepositoryStorageTest.java
new file mode 100644
index 000000000..dd4ecd91c
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/metadata/Maven2RepositoryStorageTest.java
@@ -0,0 +1,65 @@
+package org.apache.archiva.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.archiva.metadata.repository.storage.RepositoryStorage;
+import org.apache.archiva.repository.maven2.MavenManagedRepository;
+import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.test.context.ContextConfiguration;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import java.nio.file.Paths;
+
+/**
+ * @author Olivier Lamy
+ */
+@RunWith( ArchivaSpringJUnit4ClassRunner.class )
+@ContextConfiguration( { "classpath*:/spring-context-storage.xml", "classpath*:META-INF/spring-context.xml" } )
+public class Maven2RepositoryStorageTest
+{
+ @Inject
+ @Named( "repositoryStorage#maven2" )
+ RepositoryStorage repositoryStorage;
+
+ @Test
+ public void testGetLogicalPath()
+ {
+ String href = "/repository/internal/org/apache/maven/someartifact.jar";
+ Assert.assertEquals( "/org/apache/maven/someartifact.jar",
+ repositoryStorage.getFilePath( href, new MavenManagedRepository( "repo01", "repo01", Paths.get("target/repositories")) ) );
+
+ href = "repository/internal/org/apache/maven/someartifact.jar";
+ Assert.assertEquals( "/org/apache/maven/someartifact.jar",
+ repositoryStorage.getFilePath( href, new MavenManagedRepository( "repo01", "repo01", Paths.get("target/repositories") ) ) );
+
+ href = "repository/internal/org/apache/maven/";
+ Assert.assertEquals( "/org/apache/maven/", repositoryStorage.getFilePath( href, new MavenManagedRepository("repo01", "repo01", Paths.get("target/repositories")) ) );
+
+ href = "mypath";
+ Assert.assertEquals( "/", repositoryStorage.getFilePath( href, new MavenManagedRepository("repo01", "repo01", Paths.get("target/repositories")) ) );
+ }
+
+
+}
+
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/metadata/MetadataToolsTest.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/metadata/MetadataToolsTest.java
new file mode 100644
index 000000000..5271cc63e
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/metadata/MetadataToolsTest.java
@@ -0,0 +1,658 @@
+package org.apache.archiva.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.archiva.common.utils.VersionComparator;
+import org.apache.archiva.configuration.ProxyConnectorConfiguration;
+import org.apache.archiva.metadata.repository.storage.maven2.conf.MockConfiguration;
+import org.apache.archiva.model.ProjectReference;
+import org.apache.archiva.model.VersionedReference;
+import org.apache.archiva.policies.CachedFailuresPolicy;
+import org.apache.archiva.policies.ChecksumPolicy;
+import org.apache.archiva.policies.ReleasesPolicy;
+import org.apache.archiva.policies.SnapshotsPolicy;
+import org.apache.archiva.repository.AbstractRepositoryLayerTestCase;
+import org.apache.archiva.repository.LayoutException;
+import org.apache.archiva.repository.ManagedRepositoryContent;
+import org.apache.archiva.repository.RemoteRepositoryContent;
+import org.apache.archiva.repository.RepositoryContentProvider;
+import org.apache.archiva.repository.maven2.MavenManagedRepository;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang.StringUtils;
+import org.custommonkey.xmlunit.DetailedDiff;
+import org.custommonkey.xmlunit.Diff;
+import org.junit.Test;
+import org.springframework.test.context.ContextConfiguration;
+import org.xml.sax.SAXException;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.xml.parsers.ParserConfigurationException;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+import static org.junit.Assert.*;
+
+/**
+ * MetadataToolsTest
+ */
+@SuppressWarnings( "deprecation" )
+@ContextConfiguration (
+ { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context-metadata-tools-test.xml" } )
+public class MetadataToolsTest
+ extends AbstractRepositoryLayerTestCase
+{
+ @Inject
+ @Named ( "metadataTools#test" )
+ private MetadataTools tools;
+
+ @Inject
+ @Named ( "archivaConfiguration#mock" )
+ protected MockConfiguration config;
+
+ @Test
+ public void testGatherSnapshotVersionsA()
+ throws Exception
+ {
+ removeProxyConnector( "test-repo", "apache-snapshots" );
+ removeProxyConnector( "test-repo", "internal-snapshots" );
+ removeProxyConnector( "test-repo", "snapshots.codehaus.org" );
+
+ assertSnapshotVersions( "snap_shots_a", "1.0-alpha-11-SNAPSHOT",
+ new String[]{ "1.0-alpha-11-SNAPSHOT", "1.0-alpha-11-20070221.194724-2",
+ "1.0-alpha-11-20070302.212723-3", "1.0-alpha-11-20070303.152828-4",
+ "1.0-alpha-11-20070305.215149-5", "1.0-alpha-11-20070307.170909-6",
+ "1.0-alpha-11-20070314.211405-9", "1.0-alpha-11-20070316.175232-11" } );
+ }
+
+ @Test
+ public void testGatherSnapshotVersionsAWithProxies()
+ throws Exception
+ {
+ // These proxied repositories do not need to exist for the purposes of this unit test,
+ // just the repository ids are important.
+ createProxyConnector( "test-repo", "apache-snapshots" );
+ createProxyConnector( "test-repo", "internal-snapshots" );
+ createProxyConnector( "test-repo", "snapshots.codehaus.org" );
+
+ assertSnapshotVersions( "snap_shots_a", "1.0-alpha-11-SNAPSHOT",
+ new String[]{ "1.0-alpha-11-SNAPSHOT", "1.0-alpha-11-20070221.194724-2",
+ "1.0-alpha-11-20070302.212723-3", "1.0-alpha-11-20070303.152828-4",
+ "1.0-alpha-11-20070305.215149-5", "1.0-alpha-11-20070307.170909-6",
+ "1.0-alpha-11-20070314.211405-9", "1.0-alpha-11-20070315.033030-10"
+ /* Arrives in via snapshots.codehaus.org proxy */,
+ "1.0-alpha-11-20070316.175232-11" } );
+ }
+
+ @Test
+ public void testGetRepositorySpecificName()
+ throws Exception
+ {
+ RemoteRepositoryContent repoJavaNet =
+ createRemoteRepositoryContent( "maven2-repository.dev.java.net", "Java.net Repository for Maven 2",
+ "http://download.java.net/maven/2/", "default" );
+ RemoteRepositoryContent repoCentral =
+ createRemoteRepositoryContent( "central", "Central Global Repository", "http://repo1.maven.org/maven2/",
+ "default" );
+
+ String convertedName =
+ tools.getRepositorySpecificName( repoJavaNet, "commons-lang/commons-lang/maven-metadata.xml" );
+ assertMetadataPath( "commons-lang/commons-lang/maven-metadata-maven2-repository.dev.java.net.xml",
+ convertedName );
+
+ convertedName = tools.getRepositorySpecificName( repoCentral, "commons-lang/commons-lang/maven-metadata.xml" );
+ assertMetadataPath( "commons-lang/commons-lang/maven-metadata-central.xml", convertedName );
+ }
+
+ // TODO: replace with group tests
+// public void testUpdateProjectBadArtifact()
+// throws Exception
+// {
+// try
+// {
+// assertUpdatedProjectMetadata( "bad_artifact", null );
+// fail( "Should have thrown an IOException on a bad artifact." );
+// }
+// catch ( IOException e )
+// {
+// // Expected path
+// }
+// }
+
+ @Test
+ public void testUpdateProjectNonExistingVersion()
+ throws Exception
+ {
+ ManagedRepositoryContent testRepo = createTestRepoContent();
+ ProjectReference reference = new ProjectReference();
+ reference.setGroupId( "org.apache.archiva.metadata.tests" );
+ reference.setArtifactId( "missing_artifact" );
+
+ prepTestRepo( testRepo, reference );
+
+ // check metadata prior to update -- should contain the non-existing artifact version
+ assertProjectMetadata( testRepo, reference, "missing_artifact",
+ new String[]{ "1.0-SNAPSHOT", "1.1-SNAPSHOT", "1.2-SNAPSHOT" }, "1.2-SNAPSHOT", null );
+
+ tools.updateMetadata( testRepo, reference );
+
+ // metadata should not contain the non-existing artifact version -- 1.1-SNAPSHOT
+ assertProjectMetadata( testRepo, reference, "missing_artifact", new String[]{ "1.0-SNAPSHOT", "1.2-SNAPSHOT" },
+ "1.2-SNAPSHOT", null );
+ }
+
+ @Test
+ public void testUpdateProjectMissingMultipleVersions()
+ throws Exception
+ {
+ assertUpdatedProjectMetadata( "missing_metadata_b",
+ new String[]{ "1.0", "1.0.1", "2.0", "2.0.1", "2.0-20070821-dev" },
+ "2.0-20070821-dev", "2.0-20070821-dev" );
+ }
+
+ @Test
+ public void testUpdateProjectMissingMultipleVersionsWithProxies()
+ throws Exception
+ {
+ // Attach the (bogus) proxies to the managed repo.
+ // These proxied repositories do not need to exist for the purposes of this unit test,
+ // just the repository ids are important.
+ createProxyConnector( "test-repo", "central" );
+ createProxyConnector( "test-repo", "java.net" );
+
+ assertUpdatedProjectMetadata( "proxied_multi",
+ new String[]{ "1.0-spec" /* in java.net */, "1.0" /* in managed, and central */,
+ "1.0.1" /* in central */, "1.1" /* in managed */, "2.0-proposal-beta"
+ /* in java.net */, "2.0-spec" /* in java.net */, "2.0"
+ /* in central, and java.net */, "2.0.1" /* in java.net */, "2.1"
+ /* in managed */, "3.0" /* in central */, "3.1" /* in central */ }, "3.1",
+ "3.1" );
+ }
+
+ @Test
+ public void testUpdateProjectSimpleYetIncomplete()
+ throws Exception
+ {
+ assertUpdatedProjectMetadata( "incomplete_metadata_a", new String[]{ "1.0" }, "1.0", "1.0" );
+ }
+
+ @Test
+ public void testUpdateProjectSimpleYetMissing()
+ throws Exception
+ {
+ assertUpdatedProjectMetadata( "missing_metadata_a", new String[]{ "1.0" }, "1.0", "1.0" );
+ }
+
+ @Test
+ public void testUpdateVersionSimple10()
+ throws Exception
+ {
+ assertUpdatedReleaseVersionMetadata( "missing_metadata_a", "1.0" );
+ }
+
+ @Test
+ public void testUpdateVersionSimple20()
+ throws Exception
+ {
+ assertUpdatedReleaseVersionMetadata( "missing_metadata_b", "2.0" );
+ }
+
+ @Test
+ public void testUpdateVersionSimple20NotSnapshot()
+ throws Exception
+ {
+ assertUpdatedReleaseVersionMetadata( "missing_metadata_b", "2.0-20070821-dev" );
+ }
+
+ @Test
+ public void testUpdateVersionSnapshotA()
+ throws Exception
+ {
+ assertUpdatedSnapshotVersionMetadata( "snap_shots_a", "1.0-alpha-11-SNAPSHOT", "20070316", "175232", "11" );
+ }
+
+ @Test
+ public void testToPathFromVersionReference()
+ {
+ VersionedReference reference = new VersionedReference();
+ reference.setGroupId( "com.foo" );
+ reference.setArtifactId( "foo-tool" );
+ reference.setVersion( "1.0" );
+
+ assertEquals( "com/foo/foo-tool/1.0/maven-metadata.xml", tools.toPath( reference ) );
+ }
+
+ @Test
+ public void testToPathFromProjectReference()
+ {
+ ProjectReference reference = new ProjectReference();
+ reference.setGroupId( "com.foo" );
+ reference.setArtifactId( "foo-tool" );
+
+ assertEquals( "com/foo/foo-tool/maven-metadata.xml", tools.toPath( reference ) );
+ }
+
+ @Test
+ public void testToProjectReferenceFooTools()
+ throws RepositoryMetadataException
+ {
+ assertProjectReference( "com.foo", "foo-tools", "com/foo/foo-tools/maven-metadata.xml" );
+ }
+
+ @Test
+ public void testToProjectReferenceAReallyLongPath()
+ throws RepositoryMetadataException
+ {
+ String groupId = "net.i.have.a.really.long.path.just.for.the.hell.of.it";
+ String artifactId = "a";
+ String path = "net/i/have/a/really/long/path/just/for/the/hell/of/it/a/maven-metadata.xml";
+
+ assertProjectReference( groupId, artifactId, path );
+ }
+
+ @Test
+ public void testToProjectReferenceCommonsLang()
+ throws RepositoryMetadataException
+ {
+ String groupId = "commons-lang";
+ String artifactId = "commons-lang";
+ String path = "commons-lang/commons-lang/maven-metadata.xml";
+
+ assertProjectReference( groupId, artifactId, path );
+ }
+
+ private void assertProjectReference( String groupId, String artifactId, String path )
+ throws RepositoryMetadataException
+ {
+ ProjectReference reference = tools.toProjectReference( path );
+
+ assertNotNull( "Reference should not be null.", reference );
+ assertEquals( "ProjectReference.groupId", groupId, reference.getGroupId() );
+ assertEquals( "ProjectReference.artifactId", artifactId, reference.getArtifactId() );
+ }
+
+ @Test
+ public void testToVersionedReferenceFooTool()
+ throws RepositoryMetadataException
+ {
+ String groupId = "com.foo";
+ String artifactId = "foo-tool";
+ String version = "1.0";
+ String path = "com/foo/foo-tool/1.0/maven-metadata.xml";
+
+ assertVersionedReference( groupId, artifactId, version, path );
+ }
+
+ @Test
+ public void testToVersionedReferenceAReallyLongPath()
+ throws RepositoryMetadataException
+ {
+ String groupId = "net.i.have.a.really.long.path.just.for.the.hell.of.it";
+ String artifactId = "a";
+ String version = "1.1-alpha-1";
+ String path = "net/i/have/a/really/long/path/just/for/the/hell/of/it/a/1.1-alpha-1/maven-metadata.xml";
+
+ assertVersionedReference( groupId, artifactId, version, path );
+ }
+
+ @Test
+ public void testToVersionedReferenceCommonsLang()
+ throws RepositoryMetadataException
+ {
+ String groupId = "commons-lang";
+ String artifactId = "commons-lang";
+ String version = "2.1";
+ String path = "commons-lang/commons-lang/2.1/maven-metadata.xml";
+
+ assertVersionedReference( groupId, artifactId, version, path );
+ }
+
+ @Test
+ public void testToVersionedReferenceSnapshot()
+ throws RepositoryMetadataException
+ {
+ String groupId = "com.foo";
+ String artifactId = "foo-connector";
+ String version = "2.1-SNAPSHOT";
+ String path = "com/foo/foo-connector/2.1-SNAPSHOT/maven-metadata.xml";
+
+ assertVersionedReference( groupId, artifactId, version, path );
+ }
+
+ private void assertVersionedReference( String groupId, String artifactId, String version, String path )
+ throws RepositoryMetadataException
+ {
+ VersionedReference reference = tools.toVersionedReference( path );
+ assertNotNull( "Reference should not be null.", reference );
+
+ assertEquals( "VersionedReference.groupId", groupId, reference.getGroupId() );
+ assertEquals( "VersionedReference.artifactId", artifactId, reference.getArtifactId() );
+ assertEquals( "VersionedReference.version", version, reference.getVersion() );
+ }
+
+ private void assertSnapshotVersions( String artifactId, String version, String[] expectedVersions )
+ throws Exception
+ {
+ Path repoRootDir = Paths.get( "src/test/repositories/metadata-repository" );
+
+ VersionedReference reference = new VersionedReference();
+ reference.setGroupId( "org.apache.archiva.metadata.tests" );
+ reference.setArtifactId( artifactId );
+ reference.setVersion( version );
+
+ MavenManagedRepository repo =
+ createRepository( "test-repo", "Test Repository: " + name.getMethodName(), repoRootDir );
+
+ RepositoryContentProvider provider = applicationContext.getBean( "repositoryContentProvider#maven", RepositoryContentProvider.class );
+
+ ManagedRepositoryContent repoContent =
+ provider.createManagedContent( repo );
+
+ Set<String> testedVersionSet = tools.gatherSnapshotVersions( repoContent, reference );
+
+ // Sort the list (for asserts)
+ List<String> testedVersions = new ArrayList<>();
+ testedVersions.addAll( testedVersionSet );
+ Collections.sort( testedVersions, new VersionComparator() );
+
+ // Test the expected array of versions, to the actual tested versions
+ assertEquals( "Assert Snapshot Versions: length/size", expectedVersions.length, testedVersions.size() );
+
+ for ( int i = 0; i < expectedVersions.length; i++ )
+ {
+ String actualVersion = testedVersions.get( i );
+ assertEquals( "Snapshot Versions[" + i + "]", expectedVersions[i], actualVersion );
+ }
+ }
+
+ private void assertMetadata( String expectedMetadata, ManagedRepositoryContent repository,
+ ProjectReference reference )
+ throws LayoutException, IOException, SAXException, ParserConfigurationException
+ {
+ Path metadataFile = Paths.get( repository.getRepoRoot(), tools.toPath( reference ) );
+ String actualMetadata = org.apache.archiva.common.utils.FileUtils.readFileToString( metadataFile, Charset.defaultCharset() );
+
+ DetailedDiff detailedDiff = new DetailedDiff( new Diff( expectedMetadata, actualMetadata ) );
+ if ( !detailedDiff.similar() )
+ {
+ // If it isn't similar, dump the difference.
+ assertEquals( expectedMetadata, actualMetadata );
+ }
+ }
+
+ private void assertMetadata( String expectedMetadata, ManagedRepositoryContent repository,
+ VersionedReference reference )
+ throws LayoutException, IOException, SAXException, ParserConfigurationException
+ {
+ Path metadataFile = Paths.get( repository.getRepoRoot(), tools.toPath( reference ) );
+ String actualMetadata = org.apache.archiva.common.utils.FileUtils.readFileToString( metadataFile, Charset.defaultCharset() );
+
+ DetailedDiff detailedDiff = new DetailedDiff( new Diff( expectedMetadata, actualMetadata ) );
+ if ( !detailedDiff.similar() )
+ {
+ // If it isn't similar, dump the difference.
+ assertEquals( expectedMetadata, actualMetadata );
+ }
+ }
+
+ private void assertMetadataPath( String expected, String actual )
+ {
+ assertEquals( "Repository Specific Metadata Path", expected, actual );
+ }
+
+ private void assertUpdatedProjectMetadata( String artifactId, String[] expectedVersions, String latestVersion,
+ String releaseVersion )
+ throws Exception
+ {
+ ManagedRepositoryContent testRepo = createTestRepoContent();
+ ProjectReference reference = new ProjectReference();
+ reference.setGroupId( "org.apache.archiva.metadata.tests" );
+ reference.setArtifactId( artifactId );
+
+ prepTestRepo( testRepo, reference );
+
+ tools.updateMetadata( testRepo, reference );
+
+ StringBuilder buf = new StringBuilder();
+ buf.append( "<metadata>\n" );
+ buf.append( " <groupId>" ).append( reference.getGroupId() ).append( "</groupId>\n" );
+ buf.append( " <artifactId>" ).append( reference.getArtifactId() ).append( "</artifactId>\n" );
+ // buf.append( " <version>1.0</version>\n" );
+
+ if ( expectedVersions != null )
+ {
+ buf.append( " <versioning>\n" );
+ if ( latestVersion != null )
+ {
+ buf.append( " <latest>" ).append( latestVersion ).append( "</latest>\n" );
+ }
+ if ( releaseVersion != null )
+ {
+ buf.append( " <release>" ).append( releaseVersion ).append( "</release>\n" );
+ }
+
+ buf.append( " <versions>\n" );
+ for ( int i = 0; i < expectedVersions.length; i++ )
+ {
+ buf.append( " <version>" ).append( expectedVersions[i] ).append( "</version>\n" );
+ }
+ buf.append( " </versions>\n" );
+ buf.append( " </versioning>\n" );
+ }
+ buf.append( "</metadata>" );
+
+ assertMetadata( buf.toString(), testRepo, reference );
+ }
+
+ private void assertProjectMetadata( ManagedRepositoryContent testRepo, ProjectReference reference,
+ String artifactId, String[] expectedVersions, String latestVersion,
+ String releaseVersion )
+ throws Exception
+ {
+ StringBuilder buf = new StringBuilder();
+ buf.append( "<metadata>\n" );
+ buf.append( " <groupId>" ).append( reference.getGroupId() ).append( "</groupId>\n" );
+ buf.append( " <artifactId>" ).append( reference.getArtifactId() ).append( "</artifactId>\n" );
+
+ if ( expectedVersions != null )
+ {
+ buf.append( " <versioning>\n" );
+ if ( latestVersion != null )
+ {
+ buf.append( " <latest>" ).append( latestVersion ).append( "</latest>\n" );
+ }
+ if ( releaseVersion != null )
+ {
+ buf.append( " <release>" ).append( releaseVersion ).append( "</release>\n" );
+ }
+
+ buf.append( " <versions>\n" );
+ for ( int i = 0; i < expectedVersions.length; i++ )
+ {
+ buf.append( " <version>" ).append( expectedVersions[i] ).append( "</version>\n" );
+ }
+ buf.append( " </versions>\n" );
+ buf.append( " </versioning>\n" );
+ }
+ buf.append( "</metadata>" );
+
+ assertMetadata( buf.toString(), testRepo, reference );
+ }
+
+ private void assertUpdatedReleaseVersionMetadata( String artifactId, String version )
+ throws Exception
+ {
+ ManagedRepositoryContent testRepo = createTestRepoContent();
+ VersionedReference reference = new VersionedReference();
+ reference.setGroupId( "org.apache.archiva.metadata.tests" );
+ reference.setArtifactId( artifactId );
+ reference.setVersion( version );
+
+ prepTestRepo( testRepo, reference );
+
+ tools.updateMetadata( testRepo, reference );
+
+ StringBuilder buf = new StringBuilder();
+ buf.append( "<metadata>\n" );
+ buf.append( " <groupId>" ).append( reference.getGroupId() ).append( "</groupId>\n" );
+ buf.append( " <artifactId>" ).append( reference.getArtifactId() ).append( "</artifactId>\n" );
+ buf.append( " <version>" ).append( reference.getVersion() ).append( "</version>\n" );
+ buf.append( "</metadata>" );
+
+ assertMetadata( buf.toString(), testRepo, reference );
+ }
+
+ private void assertUpdatedSnapshotVersionMetadata( String artifactId, String version, String expectedDate,
+ String expectedTime, String expectedBuildNumber )
+ throws Exception
+ {
+ ManagedRepositoryContent testRepo = createTestRepoContent();
+ VersionedReference reference = new VersionedReference();
+ reference.setGroupId( "org.apache.archiva.metadata.tests" );
+ reference.setArtifactId( artifactId );
+ reference.setVersion( version );
+
+ prepTestRepo( testRepo, reference );
+
+ tools.updateMetadata( testRepo, reference );
+
+ StringBuilder buf = new StringBuilder();
+ buf.append( "<metadata>\n" );
+ buf.append( " <groupId>" ).append( reference.getGroupId() ).append( "</groupId>\n" );
+ buf.append( " <artifactId>" ).append( reference.getArtifactId() ).append( "</artifactId>\n" );
+ buf.append( " <version>" ).append( reference.getVersion() ).append( "</version>\n" );
+ buf.append( " <versioning>\n" );
+ buf.append( " <snapshot>\n" );
+ buf.append( " <buildNumber>" ).append( expectedBuildNumber ).append( "</buildNumber>\n" );
+ buf.append( " <timestamp>" );
+ buf.append( expectedDate ).append( "." ).append( expectedTime );
+ buf.append( "</timestamp>\n" );
+ buf.append( " </snapshot>\n" );
+ buf.append( " <lastUpdated>" ).append( expectedDate ).append( expectedTime ).append( "</lastUpdated>\n" );
+ buf.append( " </versioning>\n" );
+ buf.append( "</metadata>" );
+
+ assertMetadata( buf.toString(), testRepo, reference );
+ }
+
+ private void removeProxyConnector( String sourceRepoId, String targetRepoId )
+ {
+ ProxyConnectorConfiguration toRemove = null;
+ for ( ProxyConnectorConfiguration pcc : config.getConfiguration().getProxyConnectors() )
+ {
+ if ( pcc.getTargetRepoId().equals( targetRepoId ) && pcc.getSourceRepoId().equals( sourceRepoId ) )
+ {
+ toRemove = pcc;
+ }
+ }
+ if ( toRemove != null )
+ {
+ config.getConfiguration().removeProxyConnector( toRemove );
+ String prefix = "proxyConnectors.proxyConnector(" + "1" + ")"; // XXX
+ config.triggerChange( prefix + ".sourceRepoId", toRemove.getSourceRepoId() );
+ config.triggerChange( prefix + ".targetRepoId", toRemove.getTargetRepoId() );
+ config.triggerChange( prefix + ".proxyId", toRemove.getProxyId() );
+ config.triggerChange( prefix + ".policies.releases", toRemove.getPolicy( "releases", "" ) );
+ config.triggerChange( prefix + ".policies.checksum", toRemove.getPolicy( "checksum", "" ) );
+ config.triggerChange( prefix + ".policies.snapshots", toRemove.getPolicy( "snapshots", "" ) );
+ config.triggerChange( prefix + ".policies.cache-failures", toRemove.getPolicy( "cache-failures", "" ) );
+ }
+ }
+
+ private void createProxyConnector( String sourceRepoId, String targetRepoId )
+ {
+ ProxyConnectorConfiguration connectorConfig = new ProxyConnectorConfiguration();
+ connectorConfig.setSourceRepoId( sourceRepoId );
+ connectorConfig.setTargetRepoId( targetRepoId );
+ connectorConfig.addPolicy( ProxyConnectorConfiguration.POLICY_CHECKSUM, ChecksumPolicy.IGNORE );
+ connectorConfig.addPolicy( ProxyConnectorConfiguration.POLICY_RELEASES, ReleasesPolicy.ALWAYS );
+ connectorConfig.addPolicy( ProxyConnectorConfiguration.POLICY_SNAPSHOTS, SnapshotsPolicy.ALWAYS );
+ connectorConfig.addPolicy( ProxyConnectorConfiguration.POLICY_CACHE_FAILURES, CachedFailuresPolicy.NO );
+
+ int count = config.getConfiguration().getProxyConnectors().size();
+ config.getConfiguration().addProxyConnector( connectorConfig );
+
+ // Proper Triggering ...
+ String prefix = "proxyConnectors.proxyConnector(" + count + ")";
+ config.triggerChange( prefix + ".sourceRepoId", connectorConfig.getSourceRepoId() );
+ config.triggerChange( prefix + ".targetRepoId", connectorConfig.getTargetRepoId() );
+ config.triggerChange( prefix + ".proxyId", connectorConfig.getProxyId() );
+ config.triggerChange( prefix + ".policies.releases", connectorConfig.getPolicy( "releases", "" ) );
+ config.triggerChange( prefix + ".policies.checksum", connectorConfig.getPolicy( "checksum", "" ) );
+ config.triggerChange( prefix + ".policies.snapshots", connectorConfig.getPolicy( "snapshots", "" ) );
+ config.triggerChange( prefix + ".policies.cache-failures", connectorConfig.getPolicy( "cache-failures", "" ) );
+ }
+
+ private ManagedRepositoryContent createTestRepoContent()
+ throws Exception
+ {
+ Path repoRoot = Paths.get( "target/metadata-tests/" + name.getMethodName() );
+ if ( Files.exists(repoRoot) )
+ {
+ org.apache.archiva.common.utils.FileUtils.deleteDirectory( repoRoot );
+ }
+
+ Files.createDirectories(repoRoot);
+
+ MavenManagedRepository repoConfig =
+ createRepository( "test-repo", "Test Repository: " + name.getMethodName(), repoRoot );
+
+ RepositoryContentProvider provider = applicationContext.getBean( "repositoryContentProvider#maven", RepositoryContentProvider.class );
+
+ ManagedRepositoryContent repoContent =
+ provider.createManagedContent( repoConfig );
+ return repoContent;
+ }
+
+ private void prepTestRepo( ManagedRepositoryContent repo, ProjectReference reference )
+ throws IOException
+ {
+ String groupDir = StringUtils.replaceChars( reference.getGroupId(), '.', '/' );
+ String path = groupDir + "/" + reference.getArtifactId();
+
+ Path srcRepoDir = Paths.get( "src/test/repositories/metadata-repository" );
+ Path srcDir = srcRepoDir.resolve( path );
+ Path destDir = Paths.get( repo.getRepoRoot(), path );
+
+ assertTrue( "Source Dir exists: " + srcDir, Files.exists(srcDir) );
+ Files.createDirectories(destDir);
+
+ FileUtils.copyDirectory( srcDir.toFile(), destDir.toFile() );
+ }
+
+ private void prepTestRepo( ManagedRepositoryContent repo, VersionedReference reference )
+ throws IOException
+ {
+ ProjectReference projectRef = new ProjectReference();
+ projectRef.setGroupId( reference.getGroupId() );
+ projectRef.setArtifactId( reference.getArtifactId() );
+
+ prepTestRepo( repo, projectRef );
+ }
+
+
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/metadata/RepositoryMetadataReaderTest.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/metadata/RepositoryMetadataReaderTest.java
new file mode 100644
index 000000000..7c7da49cf
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/metadata/RepositoryMetadataReaderTest.java
@@ -0,0 +1,79 @@
+package org.apache.archiva.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 junit.framework.TestCase;
+import org.apache.archiva.maven2.metadata.MavenMetadataReader;
+import org.apache.archiva.model.ArchivaRepositoryMetadata;
+import org.apache.archiva.test.utils.ArchivaBlockJUnit4ClassRunner;
+import org.apache.archiva.xml.XMLException;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+/**
+ * RepositoryMetadataReaderTest
+ *
+ *
+ */
+@RunWith( ArchivaBlockJUnit4ClassRunner.class )
+public class RepositoryMetadataReaderTest
+ extends TestCase
+{
+ @Test
+ public void testLoadSimple()
+ throws XMLException
+ {
+ Path defaultRepoDir = Paths.get( "src/test/repositories/default-repository" );
+ Path metadataFile = defaultRepoDir.resolve( "org/apache/maven/shared/maven-downloader/maven-metadata.xml" );
+
+ ArchivaRepositoryMetadata metadata = MavenMetadataReader.read( metadataFile);
+
+ assertNotNull( metadata );
+ assertEquals( "Group Id", "org.apache.maven.shared", metadata.getGroupId() );
+ assertEquals( "Artifact Id", "maven-downloader", metadata.getArtifactId() );
+ assertEquals( "Released Version", "1.1", metadata.getReleasedVersion() );
+ assertEquals( "List of Available Versions", 2, metadata.getAvailableVersions().size() );
+ assertTrue( "Available version 1.0", metadata.getAvailableVersions().contains( "1.0" ) );
+ assertTrue( "Available version 1.1", metadata.getAvailableVersions().contains( "1.1" ) );
+ }
+
+ @Test
+ public void testLoadComplex()
+ throws XMLException
+ {
+ Path defaultRepoDir = Paths.get( "src/test/repositories/default-repository" );
+ Path metadataFile = defaultRepoDir.resolve( "org/apache/maven/samplejar/maven-metadata.xml" );
+
+ ArchivaRepositoryMetadata metadata = MavenMetadataReader.read( metadataFile );
+
+ assertNotNull( metadata );
+ assertEquals( "Group Id", "org.apache.maven", metadata.getGroupId() );
+ assertEquals( "Artifact Id", "samplejar", metadata.getArtifactId() );
+ assertEquals( "Released Version", "2.0", metadata.getReleasedVersion() );
+ assertEquals( "Latest Version", "6.0-SNAPSHOT", metadata.getLatestVersion() );
+ assertEquals( "List of Available Versions", 18, metadata.getAvailableVersions().size() );
+ assertTrue( "Available version 6.0-20060311.183228-10",
+ metadata.getAvailableVersions().contains( "6.0-20060311.183228-10" ) );
+ assertTrue( "Available version 6.0-SNAPSHOT", metadata.getAvailableVersions().contains( "6.0-SNAPSHOT" ) );
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/metadata/RepositoryMetadataWriterTest.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/metadata/RepositoryMetadataWriterTest.java
new file mode 100644
index 000000000..2a316a457
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/metadata/RepositoryMetadataWriterTest.java
@@ -0,0 +1,65 @@
+package org.apache.archiva.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 junit.framework.TestCase;
+import org.apache.archiva.model.ArchivaRepositoryMetadata;
+import org.apache.archiva.test.utils.ArchivaBlockJUnit4ClassRunner;
+import org.custommonkey.xmlunit.XMLAssert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.io.StringWriter;
+import java.nio.charset.Charset;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+/**
+ * RepositoryMetadataWriterTest
+ */
+@RunWith ( ArchivaBlockJUnit4ClassRunner.class )
+public class RepositoryMetadataWriterTest
+ extends TestCase
+{
+
+ @Test
+ public void testWriteSimple()
+ throws Exception
+ {
+ Path defaultRepoDir = Paths.get( "src/test/repositories/default-repository" );
+ Path expectedFile = defaultRepoDir.resolve( "org/apache/maven/shared/maven-downloader/maven-metadata.xml" );
+ String expectedContent = org.apache.archiva.common.utils.FileUtils.readFileToString( expectedFile, Charset.defaultCharset() );
+
+ ArchivaRepositoryMetadata metadata = new ArchivaRepositoryMetadata();
+
+ metadata.setGroupId( "org.apache.maven.shared" );
+ metadata.setArtifactId( "maven-downloader" );
+ metadata.setVersion( "1.0" );
+ metadata.setReleasedVersion( "1.1" );
+ metadata.getAvailableVersions().add( "1.0" );
+ metadata.getAvailableVersions().add( "1.1" );
+ metadata.setLastUpdated( "20061212214311" );
+
+ StringWriter actual = new StringWriter();
+ RepositoryMetadataWriter.write( metadata, actual );
+
+ XMLAssert.assertXMLEqual( "XML Contents", expectedContent, actual.toString() );
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/CVS/Root b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/CVS/Root
new file mode 100644
index 000000000..2e65f24a6
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/CVS/Root
@@ -0,0 +1 @@
+not a real CVS root - for testing exclusions
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/KEYS b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/KEYS
new file mode 100644
index 000000000..d3b34d5ad
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/KEYS
@@ -0,0 +1 @@
+test KEYS file \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/invalid/invalid-1.0.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/invalid/invalid-1.0.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/invalid/invalid-1.0.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/invalid/invalid/1.0-20050611.123456-1/invalid-1.0-20050611.123456-1.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/invalid/invalid/1.0-20050611.123456-1/invalid-1.0-20050611.123456-1.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/invalid/invalid/1.0-20050611.123456-1/invalid-1.0-20050611.123456-1.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/invalid/invalid/1.0-SNAPSHOT/invalid-1.0.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/invalid/invalid/1.0-SNAPSHOT/invalid-1.0.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/invalid/invalid/1.0-SNAPSHOT/invalid-1.0.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/invalid/invalid/1.0/invalid-1.0b.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/invalid/invalid/1.0/invalid-1.0b.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/invalid/invalid/1.0/invalid-1.0b.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/invalid/invalid/1.0/invalid-2.0.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/invalid/invalid/1.0/invalid-2.0.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/invalid/invalid/1.0/invalid-2.0.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/invalid/invalid/1/invalid-1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/invalid/invalid/1/invalid-1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/invalid/invalid/1/invalid-1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/javax/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/javax/maven-metadata.xml
new file mode 100644
index 000000000..b3baf545d
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/javax/maven-metadata.xml
@@ -0,0 +1,26 @@
+<?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.
+ -->
+
+<!-- This metdata is intentionally wrong. -->
+<metadata>
+ <groupId>javax.sql</groupId>
+ <artifactId>jdbc</artifactId>
+ <version>2.0</version>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/javax/sql/jdbc/2.0/jdbc-2.0.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/javax/sql/jdbc/2.0/jdbc-2.0.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/javax/sql/jdbc/2.0/jdbc-2.0.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/javax/sql/jdbc/2.0/maven-metadata-repository.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/javax/sql/jdbc/2.0/maven-metadata-repository.xml
new file mode 100644
index 000000000..caf5b6697
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/javax/sql/jdbc/2.0/maven-metadata-repository.xml
@@ -0,0 +1,25 @@
+<?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.
+ -->
+
+<metadata>
+ <groupId>javax.sql</groupId>
+ <artifactId>jdbc</artifactId>
+ <version>2.0</version>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/javax/sql/jdbc/maven-metadata-repository.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/javax/sql/jdbc/maven-metadata-repository.xml
new file mode 100644
index 000000000..bb7570891
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/javax/sql/jdbc/maven-metadata-repository.xml
@@ -0,0 +1,30 @@
+<?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.
+ -->
+
+<metadata>
+ <groupId>javax.sql</groupId>
+ <artifactId>jdbc</artifactId>
+ <version>2.0</version>
+ <versioning>
+ <versions>
+ <version>2.0</version>
+ </versions>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/javax/sql/maven-metadata-repository.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/javax/sql/maven-metadata-repository.xml
new file mode 100644
index 000000000..caf5b6697
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/javax/sql/maven-metadata-repository.xml
@@ -0,0 +1,25 @@
+<?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.
+ -->
+
+<metadata>
+ <groupId>javax.sql</groupId>
+ <artifactId>jdbc</artifactId>
+ <version>2.0</version>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/archiva/sample-parent/2.1-SNAPSHOT/sample-parent-2.1-20090807.095532-1.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/archiva/sample-parent/2.1-SNAPSHOT/sample-parent-2.1-20090807.095532-1.pom
new file mode 100644
index 000000000..55fdf5d28
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/archiva/sample-parent/2.1-SNAPSHOT/sample-parent-2.1-20090807.095532-1.pom
@@ -0,0 +1,23 @@
+<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.archiva</groupId>
+ <artifactId>sample-parent</artifactId>
+ <packaging>pom</packaging>
+ <version>2.1-SNAPSHOT</version>
+ <name>sample-parent Build 1</name>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <version>${build-helper-maven-plugin.version}</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+ <properties>
+ <build-helper-maven-plugin.version>1.0</build-helper-maven-plugin.version>
+ </properties>
+</project> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/archiva/sample-parent/2.1-SNAPSHOT/sample-parent-2.1-20090808.085535-2.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/archiva/sample-parent/2.1-SNAPSHOT/sample-parent-2.1-20090808.085535-2.pom
new file mode 100644
index 000000000..ffc575bbc
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/archiva/sample-parent/2.1-SNAPSHOT/sample-parent-2.1-20090808.085535-2.pom
@@ -0,0 +1,23 @@
+<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.archiva</groupId>
+ <artifactId>sample-parent</artifactId>
+ <packaging>pom</packaging>
+ <version>2.1-SNAPSHOT</version>
+ <name>sample-parent Build 2</name>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <version>${build-helper-maven-plugin.version}</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+ <properties>
+ <build-helper-maven-plugin.version>1.0</build-helper-maven-plugin.version>
+ </properties>
+</project> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/archiva/sample-project/2.1-SNAPSHOT/sample-project-2.1-SNAPSHOT.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/archiva/sample-project/2.1-SNAPSHOT/sample-project-2.1-SNAPSHOT.pom
new file mode 100644
index 000000000..b9e7e38a1
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/archiva/sample-project/2.1-SNAPSHOT/sample-project-2.1-SNAPSHOT.pom
@@ -0,0 +1,47 @@
+<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.archiva</groupId>
+ <artifactId>sample-parent</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </parent>
+ <artifactId>sample-project</artifactId>
+ <packaging>jar</packaging>
+ <name>sample-project</name>
+ <url>http://maven.apache.org</url>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.2</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <version>${build-helper-maven-plugin.version}</version>
+ <inherited>true</inherited>
+ <executions>
+ <execution>
+ <id>add-source</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>add-source</goal>
+ </goals>
+ <configuration>
+ <sources>
+ <source>${basedir}/java-gen</source>
+ <source>${basedir}/java-src</source>
+ <source>${basedir}/java-test</source>
+ </sources>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070725.210059-1.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070725.210059-1.pom
new file mode 100644
index 000000000..372560004
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070725.210059-1.pom
@@ -0,0 +1,300 @@
+<?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>
+ <groupId>org.apache</groupId>
+ <artifactId>apache</artifactId>
+ <version>3</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.axis2</groupId>
+ <artifactId>axis2</artifactId>
+ <version>1.3-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <name>Apache Axis 2.0 - Root</name>
+ <modules>
+ <module>modules/adb</module>
+ <module>modules/adb-codegen</module>
+ <module>modules/addressing</module>
+ <module>modules/codegen</module>
+ <module>modules/fastinfoset</module>
+ <module>modules/integration</module>
+ <module>modules/java2wsdl</module>
+ <module>modules/jibx</module>
+ <module>modules/json</module>
+ <module>modules/kernel</module>
+ <module>modules/mex</module>
+ <module>modules/mex-mar</module>
+ <module>modules/mtompolicy</module>
+ <module>modules/parent</module>
+ <module>modules/ping</module>
+ <module>modules/samples/version</module>
+ <module>modules/soapmonitor</module>
+ <module>modules/spring</module>
+ <module>modules/tool/axis2-aar-maven-plugin</module>
+ <module>modules/tool/axis2-ant-plugin</module>
+ <module>modules/tool/axis2-eclipse-codegen-plugin</module>
+ <module>modules/tool/axis2-eclipse-service-plugin</module>
+ <module>modules/tool/axis2-idea-plugin</module>
+ <module>modules/tool/axis2-java2wsdl-maven-plugin</module>
+ <module>modules/tool/axis2-mar-maven-plugin</module>
+ <module>modules/tool/axis2-wsdl2code-maven-plugin</module>
+ <module>modules/webapp</module>
+ <module>modules/xmlbeans</module>
+ <module>modules/samples</module>
+ <module>modules/scripting</module>
+ </modules>
+ <profiles>
+ <profile>
+ <activation>
+ <property>
+ <name>release</name>
+ </property>
+ </activation>
+ <modules>
+ <module>modules/distribution</module>
+ </modules>
+ </profile>
+ <profile>
+ <id>java14</id>
+ <activation>
+ <jdk>1.4</jdk>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>java15</id>
+ <activation>
+ <jdk>1.5</jdk>
+ </activation>
+ <modules>
+ <module>modules/jaxbri</module>
+ <module>modules/metadata</module>
+ <module>modules/saaj-api</module>
+ <module>modules/saaj</module>
+ <module>modules/jws-api</module>
+ <module>modules/jaxws-api</module>
+ <module>modules/jaxws</module>
+ <module>modules/clustering</module>
+ </modules>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ <fileset dir="modules/clustering/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>java16</id>
+ <activation>
+ <jdk>1.6</jdk>
+ </activation>
+ <modules>
+ <module>modules/jaxbri</module>
+ <module>modules/metadata</module>
+ <module>modules/saaj-api</module>
+ <module>modules/saaj</module>
+ <module>modules/jws-api</module>
+ <module>modules/jaxws-api</module>
+ <module>modules/jaxws</module>
+ <module>modules/clustering</module>
+ </modules>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ <fileset dir="modules/clustering/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+ <ciManagement>
+ <system>continuum</system>
+ <url>http://vmbuild.apache.org/continuum</url>
+ <notifiers>
+ <notifier>
+ <configuration>
+ <ADDRESS>axis2-cvs@ws.apache.org</ADDRESS>
+ </configuration>
+ </notifier>
+ </notifiers>
+ </ciManagement>
+ <scm>
+ <connection>
+ scm:svn:http://svn.apache.org/repos/asf/webservices/axis2/trunk/java/
+ </connection>
+ <developerConnection>
+ scm:svn:https://svn.apache.org/repos/asf/webservices/axis2/trunk/java/
+ </developerConnection>
+ <url>http://svn.apache.org/viewvc/webservices/webservices/axis2/trunk/java/</url>
+ </scm>
+ <distributionManagement>
+ <repository>
+ <id>apache-repo</id>
+ <name>Maven Central Repository</name>
+ <url>
+ scpexe://people.apache.org//www/people.apache.org/repo/m2-ibiblio-rsync-repository</url>
+ </repository>
+ <snapshotRepository>
+ <id>apache-snapshots</id>
+ <name>Apache Development Repository</name>
+ <url>scpexe://people.apache.org//www/people.apache.org/repo/m2-snapshot-repository</url>
+ </snapshotRepository>
+ </distributionManagement>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar-package</id>
+ <phase>package</phase>
+ <goals>
+ <goal>attach-artifact</goal>
+ </goals>
+ <configuration>
+ <artifacts>
+ <artifact>
+ <file>target/lib/axis2-${pom.version}.jar</file>
+ <type>jar</type>
+ </artifact>
+ </artifacts>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-site-plugin</artifactId>
+ <configuration>
+ <xdocDirectory>${basedir}/xdocs</xdocDirectory>
+ <resourcesDirectory>${basedir}/xdocs/resources</resourcesDirectory>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <aggregate>true</aggregate>
+ <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/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070725.210059-1.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070725.210059-1.pom.md5
new file mode 100644
index 000000000..7e4a5cfdd
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070725.210059-1.pom.md5
@@ -0,0 +1 @@
+69add9b3e2b7d27ae5c92de61acb2d23 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070725.210059-1.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070725.210059-1.pom.sha1
new file mode 100644
index 000000000..b0a35015d
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070725.210059-1.pom.sha1
@@ -0,0 +1 @@
+e1b45d0a5c28f15e8b235a7b4b350513c790ef39 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070725.232304-2.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070725.232304-2.pom
new file mode 100644
index 000000000..372560004
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070725.232304-2.pom
@@ -0,0 +1,300 @@
+<?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>
+ <groupId>org.apache</groupId>
+ <artifactId>apache</artifactId>
+ <version>3</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.axis2</groupId>
+ <artifactId>axis2</artifactId>
+ <version>1.3-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <name>Apache Axis 2.0 - Root</name>
+ <modules>
+ <module>modules/adb</module>
+ <module>modules/adb-codegen</module>
+ <module>modules/addressing</module>
+ <module>modules/codegen</module>
+ <module>modules/fastinfoset</module>
+ <module>modules/integration</module>
+ <module>modules/java2wsdl</module>
+ <module>modules/jibx</module>
+ <module>modules/json</module>
+ <module>modules/kernel</module>
+ <module>modules/mex</module>
+ <module>modules/mex-mar</module>
+ <module>modules/mtompolicy</module>
+ <module>modules/parent</module>
+ <module>modules/ping</module>
+ <module>modules/samples/version</module>
+ <module>modules/soapmonitor</module>
+ <module>modules/spring</module>
+ <module>modules/tool/axis2-aar-maven-plugin</module>
+ <module>modules/tool/axis2-ant-plugin</module>
+ <module>modules/tool/axis2-eclipse-codegen-plugin</module>
+ <module>modules/tool/axis2-eclipse-service-plugin</module>
+ <module>modules/tool/axis2-idea-plugin</module>
+ <module>modules/tool/axis2-java2wsdl-maven-plugin</module>
+ <module>modules/tool/axis2-mar-maven-plugin</module>
+ <module>modules/tool/axis2-wsdl2code-maven-plugin</module>
+ <module>modules/webapp</module>
+ <module>modules/xmlbeans</module>
+ <module>modules/samples</module>
+ <module>modules/scripting</module>
+ </modules>
+ <profiles>
+ <profile>
+ <activation>
+ <property>
+ <name>release</name>
+ </property>
+ </activation>
+ <modules>
+ <module>modules/distribution</module>
+ </modules>
+ </profile>
+ <profile>
+ <id>java14</id>
+ <activation>
+ <jdk>1.4</jdk>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>java15</id>
+ <activation>
+ <jdk>1.5</jdk>
+ </activation>
+ <modules>
+ <module>modules/jaxbri</module>
+ <module>modules/metadata</module>
+ <module>modules/saaj-api</module>
+ <module>modules/saaj</module>
+ <module>modules/jws-api</module>
+ <module>modules/jaxws-api</module>
+ <module>modules/jaxws</module>
+ <module>modules/clustering</module>
+ </modules>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ <fileset dir="modules/clustering/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>java16</id>
+ <activation>
+ <jdk>1.6</jdk>
+ </activation>
+ <modules>
+ <module>modules/jaxbri</module>
+ <module>modules/metadata</module>
+ <module>modules/saaj-api</module>
+ <module>modules/saaj</module>
+ <module>modules/jws-api</module>
+ <module>modules/jaxws-api</module>
+ <module>modules/jaxws</module>
+ <module>modules/clustering</module>
+ </modules>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ <fileset dir="modules/clustering/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+ <ciManagement>
+ <system>continuum</system>
+ <url>http://vmbuild.apache.org/continuum</url>
+ <notifiers>
+ <notifier>
+ <configuration>
+ <ADDRESS>axis2-cvs@ws.apache.org</ADDRESS>
+ </configuration>
+ </notifier>
+ </notifiers>
+ </ciManagement>
+ <scm>
+ <connection>
+ scm:svn:http://svn.apache.org/repos/asf/webservices/axis2/trunk/java/
+ </connection>
+ <developerConnection>
+ scm:svn:https://svn.apache.org/repos/asf/webservices/axis2/trunk/java/
+ </developerConnection>
+ <url>http://svn.apache.org/viewvc/webservices/webservices/axis2/trunk/java/</url>
+ </scm>
+ <distributionManagement>
+ <repository>
+ <id>apache-repo</id>
+ <name>Maven Central Repository</name>
+ <url>
+ scpexe://people.apache.org//www/people.apache.org/repo/m2-ibiblio-rsync-repository</url>
+ </repository>
+ <snapshotRepository>
+ <id>apache-snapshots</id>
+ <name>Apache Development Repository</name>
+ <url>scpexe://people.apache.org//www/people.apache.org/repo/m2-snapshot-repository</url>
+ </snapshotRepository>
+ </distributionManagement>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar-package</id>
+ <phase>package</phase>
+ <goals>
+ <goal>attach-artifact</goal>
+ </goals>
+ <configuration>
+ <artifacts>
+ <artifact>
+ <file>target/lib/axis2-${pom.version}.jar</file>
+ <type>jar</type>
+ </artifact>
+ </artifacts>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-site-plugin</artifactId>
+ <configuration>
+ <xdocDirectory>${basedir}/xdocs</xdocDirectory>
+ <resourcesDirectory>${basedir}/xdocs/resources</resourcesDirectory>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <aggregate>true</aggregate>
+ <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/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070725.232304-2.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070725.232304-2.pom.md5
new file mode 100644
index 000000000..7e4a5cfdd
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070725.232304-2.pom.md5
@@ -0,0 +1 @@
+69add9b3e2b7d27ae5c92de61acb2d23 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070725.232304-2.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070725.232304-2.pom.sha1
new file mode 100644
index 000000000..b0a35015d
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070725.232304-2.pom.sha1
@@ -0,0 +1 @@
+e1b45d0a5c28f15e8b235a7b4b350513c790ef39 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070726.053327-3.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070726.053327-3.pom
new file mode 100644
index 000000000..372560004
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070726.053327-3.pom
@@ -0,0 +1,300 @@
+<?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>
+ <groupId>org.apache</groupId>
+ <artifactId>apache</artifactId>
+ <version>3</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.axis2</groupId>
+ <artifactId>axis2</artifactId>
+ <version>1.3-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <name>Apache Axis 2.0 - Root</name>
+ <modules>
+ <module>modules/adb</module>
+ <module>modules/adb-codegen</module>
+ <module>modules/addressing</module>
+ <module>modules/codegen</module>
+ <module>modules/fastinfoset</module>
+ <module>modules/integration</module>
+ <module>modules/java2wsdl</module>
+ <module>modules/jibx</module>
+ <module>modules/json</module>
+ <module>modules/kernel</module>
+ <module>modules/mex</module>
+ <module>modules/mex-mar</module>
+ <module>modules/mtompolicy</module>
+ <module>modules/parent</module>
+ <module>modules/ping</module>
+ <module>modules/samples/version</module>
+ <module>modules/soapmonitor</module>
+ <module>modules/spring</module>
+ <module>modules/tool/axis2-aar-maven-plugin</module>
+ <module>modules/tool/axis2-ant-plugin</module>
+ <module>modules/tool/axis2-eclipse-codegen-plugin</module>
+ <module>modules/tool/axis2-eclipse-service-plugin</module>
+ <module>modules/tool/axis2-idea-plugin</module>
+ <module>modules/tool/axis2-java2wsdl-maven-plugin</module>
+ <module>modules/tool/axis2-mar-maven-plugin</module>
+ <module>modules/tool/axis2-wsdl2code-maven-plugin</module>
+ <module>modules/webapp</module>
+ <module>modules/xmlbeans</module>
+ <module>modules/samples</module>
+ <module>modules/scripting</module>
+ </modules>
+ <profiles>
+ <profile>
+ <activation>
+ <property>
+ <name>release</name>
+ </property>
+ </activation>
+ <modules>
+ <module>modules/distribution</module>
+ </modules>
+ </profile>
+ <profile>
+ <id>java14</id>
+ <activation>
+ <jdk>1.4</jdk>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>java15</id>
+ <activation>
+ <jdk>1.5</jdk>
+ </activation>
+ <modules>
+ <module>modules/jaxbri</module>
+ <module>modules/metadata</module>
+ <module>modules/saaj-api</module>
+ <module>modules/saaj</module>
+ <module>modules/jws-api</module>
+ <module>modules/jaxws-api</module>
+ <module>modules/jaxws</module>
+ <module>modules/clustering</module>
+ </modules>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ <fileset dir="modules/clustering/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>java16</id>
+ <activation>
+ <jdk>1.6</jdk>
+ </activation>
+ <modules>
+ <module>modules/jaxbri</module>
+ <module>modules/metadata</module>
+ <module>modules/saaj-api</module>
+ <module>modules/saaj</module>
+ <module>modules/jws-api</module>
+ <module>modules/jaxws-api</module>
+ <module>modules/jaxws</module>
+ <module>modules/clustering</module>
+ </modules>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ <fileset dir="modules/clustering/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+ <ciManagement>
+ <system>continuum</system>
+ <url>http://vmbuild.apache.org/continuum</url>
+ <notifiers>
+ <notifier>
+ <configuration>
+ <ADDRESS>axis2-cvs@ws.apache.org</ADDRESS>
+ </configuration>
+ </notifier>
+ </notifiers>
+ </ciManagement>
+ <scm>
+ <connection>
+ scm:svn:http://svn.apache.org/repos/asf/webservices/axis2/trunk/java/
+ </connection>
+ <developerConnection>
+ scm:svn:https://svn.apache.org/repos/asf/webservices/axis2/trunk/java/
+ </developerConnection>
+ <url>http://svn.apache.org/viewvc/webservices/webservices/axis2/trunk/java/</url>
+ </scm>
+ <distributionManagement>
+ <repository>
+ <id>apache-repo</id>
+ <name>Maven Central Repository</name>
+ <url>
+ scpexe://people.apache.org//www/people.apache.org/repo/m2-ibiblio-rsync-repository</url>
+ </repository>
+ <snapshotRepository>
+ <id>apache-snapshots</id>
+ <name>Apache Development Repository</name>
+ <url>scpexe://people.apache.org//www/people.apache.org/repo/m2-snapshot-repository</url>
+ </snapshotRepository>
+ </distributionManagement>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar-package</id>
+ <phase>package</phase>
+ <goals>
+ <goal>attach-artifact</goal>
+ </goals>
+ <configuration>
+ <artifacts>
+ <artifact>
+ <file>target/lib/axis2-${pom.version}.jar</file>
+ <type>jar</type>
+ </artifact>
+ </artifacts>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-site-plugin</artifactId>
+ <configuration>
+ <xdocDirectory>${basedir}/xdocs</xdocDirectory>
+ <resourcesDirectory>${basedir}/xdocs/resources</resourcesDirectory>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <aggregate>true</aggregate>
+ <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/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070726.053327-3.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070726.053327-3.pom.md5
new file mode 100644
index 000000000..7e4a5cfdd
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070726.053327-3.pom.md5
@@ -0,0 +1 @@
+69add9b3e2b7d27ae5c92de61acb2d23 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070726.053327-3.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070726.053327-3.pom.sha1
new file mode 100644
index 000000000..b0a35015d
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070726.053327-3.pom.sha1
@@ -0,0 +1 @@
+e1b45d0a5c28f15e8b235a7b4b350513c790ef39 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070726.173653-5.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070726.173653-5.pom
new file mode 100644
index 000000000..372560004
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070726.173653-5.pom
@@ -0,0 +1,300 @@
+<?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>
+ <groupId>org.apache</groupId>
+ <artifactId>apache</artifactId>
+ <version>3</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.axis2</groupId>
+ <artifactId>axis2</artifactId>
+ <version>1.3-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <name>Apache Axis 2.0 - Root</name>
+ <modules>
+ <module>modules/adb</module>
+ <module>modules/adb-codegen</module>
+ <module>modules/addressing</module>
+ <module>modules/codegen</module>
+ <module>modules/fastinfoset</module>
+ <module>modules/integration</module>
+ <module>modules/java2wsdl</module>
+ <module>modules/jibx</module>
+ <module>modules/json</module>
+ <module>modules/kernel</module>
+ <module>modules/mex</module>
+ <module>modules/mex-mar</module>
+ <module>modules/mtompolicy</module>
+ <module>modules/parent</module>
+ <module>modules/ping</module>
+ <module>modules/samples/version</module>
+ <module>modules/soapmonitor</module>
+ <module>modules/spring</module>
+ <module>modules/tool/axis2-aar-maven-plugin</module>
+ <module>modules/tool/axis2-ant-plugin</module>
+ <module>modules/tool/axis2-eclipse-codegen-plugin</module>
+ <module>modules/tool/axis2-eclipse-service-plugin</module>
+ <module>modules/tool/axis2-idea-plugin</module>
+ <module>modules/tool/axis2-java2wsdl-maven-plugin</module>
+ <module>modules/tool/axis2-mar-maven-plugin</module>
+ <module>modules/tool/axis2-wsdl2code-maven-plugin</module>
+ <module>modules/webapp</module>
+ <module>modules/xmlbeans</module>
+ <module>modules/samples</module>
+ <module>modules/scripting</module>
+ </modules>
+ <profiles>
+ <profile>
+ <activation>
+ <property>
+ <name>release</name>
+ </property>
+ </activation>
+ <modules>
+ <module>modules/distribution</module>
+ </modules>
+ </profile>
+ <profile>
+ <id>java14</id>
+ <activation>
+ <jdk>1.4</jdk>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>java15</id>
+ <activation>
+ <jdk>1.5</jdk>
+ </activation>
+ <modules>
+ <module>modules/jaxbri</module>
+ <module>modules/metadata</module>
+ <module>modules/saaj-api</module>
+ <module>modules/saaj</module>
+ <module>modules/jws-api</module>
+ <module>modules/jaxws-api</module>
+ <module>modules/jaxws</module>
+ <module>modules/clustering</module>
+ </modules>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ <fileset dir="modules/clustering/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>java16</id>
+ <activation>
+ <jdk>1.6</jdk>
+ </activation>
+ <modules>
+ <module>modules/jaxbri</module>
+ <module>modules/metadata</module>
+ <module>modules/saaj-api</module>
+ <module>modules/saaj</module>
+ <module>modules/jws-api</module>
+ <module>modules/jaxws-api</module>
+ <module>modules/jaxws</module>
+ <module>modules/clustering</module>
+ </modules>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ <fileset dir="modules/clustering/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+ <ciManagement>
+ <system>continuum</system>
+ <url>http://vmbuild.apache.org/continuum</url>
+ <notifiers>
+ <notifier>
+ <configuration>
+ <ADDRESS>axis2-cvs@ws.apache.org</ADDRESS>
+ </configuration>
+ </notifier>
+ </notifiers>
+ </ciManagement>
+ <scm>
+ <connection>
+ scm:svn:http://svn.apache.org/repos/asf/webservices/axis2/trunk/java/
+ </connection>
+ <developerConnection>
+ scm:svn:https://svn.apache.org/repos/asf/webservices/axis2/trunk/java/
+ </developerConnection>
+ <url>http://svn.apache.org/viewvc/webservices/webservices/axis2/trunk/java/</url>
+ </scm>
+ <distributionManagement>
+ <repository>
+ <id>apache-repo</id>
+ <name>Maven Central Repository</name>
+ <url>
+ scpexe://people.apache.org//www/people.apache.org/repo/m2-ibiblio-rsync-repository</url>
+ </repository>
+ <snapshotRepository>
+ <id>apache-snapshots</id>
+ <name>Apache Development Repository</name>
+ <url>scpexe://people.apache.org//www/people.apache.org/repo/m2-snapshot-repository</url>
+ </snapshotRepository>
+ </distributionManagement>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar-package</id>
+ <phase>package</phase>
+ <goals>
+ <goal>attach-artifact</goal>
+ </goals>
+ <configuration>
+ <artifacts>
+ <artifact>
+ <file>target/lib/axis2-${pom.version}.jar</file>
+ <type>jar</type>
+ </artifact>
+ </artifacts>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-site-plugin</artifactId>
+ <configuration>
+ <xdocDirectory>${basedir}/xdocs</xdocDirectory>
+ <resourcesDirectory>${basedir}/xdocs/resources</resourcesDirectory>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <aggregate>true</aggregate>
+ <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/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070726.173653-5.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070726.173653-5.pom.md5
new file mode 100644
index 000000000..7e4a5cfdd
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070726.173653-5.pom.md5
@@ -0,0 +1 @@
+69add9b3e2b7d27ae5c92de61acb2d23 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070726.173653-5.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070726.173653-5.pom.sha1
new file mode 100644
index 000000000..b0a35015d
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070726.173653-5.pom.sha1
@@ -0,0 +1 @@
+e1b45d0a5c28f15e8b235a7b4b350513c790ef39 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070727.113106-7.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070727.113106-7.pom
new file mode 100644
index 000000000..372560004
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070727.113106-7.pom
@@ -0,0 +1,300 @@
+<?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>
+ <groupId>org.apache</groupId>
+ <artifactId>apache</artifactId>
+ <version>3</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.axis2</groupId>
+ <artifactId>axis2</artifactId>
+ <version>1.3-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <name>Apache Axis 2.0 - Root</name>
+ <modules>
+ <module>modules/adb</module>
+ <module>modules/adb-codegen</module>
+ <module>modules/addressing</module>
+ <module>modules/codegen</module>
+ <module>modules/fastinfoset</module>
+ <module>modules/integration</module>
+ <module>modules/java2wsdl</module>
+ <module>modules/jibx</module>
+ <module>modules/json</module>
+ <module>modules/kernel</module>
+ <module>modules/mex</module>
+ <module>modules/mex-mar</module>
+ <module>modules/mtompolicy</module>
+ <module>modules/parent</module>
+ <module>modules/ping</module>
+ <module>modules/samples/version</module>
+ <module>modules/soapmonitor</module>
+ <module>modules/spring</module>
+ <module>modules/tool/axis2-aar-maven-plugin</module>
+ <module>modules/tool/axis2-ant-plugin</module>
+ <module>modules/tool/axis2-eclipse-codegen-plugin</module>
+ <module>modules/tool/axis2-eclipse-service-plugin</module>
+ <module>modules/tool/axis2-idea-plugin</module>
+ <module>modules/tool/axis2-java2wsdl-maven-plugin</module>
+ <module>modules/tool/axis2-mar-maven-plugin</module>
+ <module>modules/tool/axis2-wsdl2code-maven-plugin</module>
+ <module>modules/webapp</module>
+ <module>modules/xmlbeans</module>
+ <module>modules/samples</module>
+ <module>modules/scripting</module>
+ </modules>
+ <profiles>
+ <profile>
+ <activation>
+ <property>
+ <name>release</name>
+ </property>
+ </activation>
+ <modules>
+ <module>modules/distribution</module>
+ </modules>
+ </profile>
+ <profile>
+ <id>java14</id>
+ <activation>
+ <jdk>1.4</jdk>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>java15</id>
+ <activation>
+ <jdk>1.5</jdk>
+ </activation>
+ <modules>
+ <module>modules/jaxbri</module>
+ <module>modules/metadata</module>
+ <module>modules/saaj-api</module>
+ <module>modules/saaj</module>
+ <module>modules/jws-api</module>
+ <module>modules/jaxws-api</module>
+ <module>modules/jaxws</module>
+ <module>modules/clustering</module>
+ </modules>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ <fileset dir="modules/clustering/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>java16</id>
+ <activation>
+ <jdk>1.6</jdk>
+ </activation>
+ <modules>
+ <module>modules/jaxbri</module>
+ <module>modules/metadata</module>
+ <module>modules/saaj-api</module>
+ <module>modules/saaj</module>
+ <module>modules/jws-api</module>
+ <module>modules/jaxws-api</module>
+ <module>modules/jaxws</module>
+ <module>modules/clustering</module>
+ </modules>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ <fileset dir="modules/clustering/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+ <ciManagement>
+ <system>continuum</system>
+ <url>http://vmbuild.apache.org/continuum</url>
+ <notifiers>
+ <notifier>
+ <configuration>
+ <ADDRESS>axis2-cvs@ws.apache.org</ADDRESS>
+ </configuration>
+ </notifier>
+ </notifiers>
+ </ciManagement>
+ <scm>
+ <connection>
+ scm:svn:http://svn.apache.org/repos/asf/webservices/axis2/trunk/java/
+ </connection>
+ <developerConnection>
+ scm:svn:https://svn.apache.org/repos/asf/webservices/axis2/trunk/java/
+ </developerConnection>
+ <url>http://svn.apache.org/viewvc/webservices/webservices/axis2/trunk/java/</url>
+ </scm>
+ <distributionManagement>
+ <repository>
+ <id>apache-repo</id>
+ <name>Maven Central Repository</name>
+ <url>
+ scpexe://people.apache.org//www/people.apache.org/repo/m2-ibiblio-rsync-repository</url>
+ </repository>
+ <snapshotRepository>
+ <id>apache-snapshots</id>
+ <name>Apache Development Repository</name>
+ <url>scpexe://people.apache.org//www/people.apache.org/repo/m2-snapshot-repository</url>
+ </snapshotRepository>
+ </distributionManagement>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar-package</id>
+ <phase>package</phase>
+ <goals>
+ <goal>attach-artifact</goal>
+ </goals>
+ <configuration>
+ <artifacts>
+ <artifact>
+ <file>target/lib/axis2-${pom.version}.jar</file>
+ <type>jar</type>
+ </artifact>
+ </artifacts>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-site-plugin</artifactId>
+ <configuration>
+ <xdocDirectory>${basedir}/xdocs</xdocDirectory>
+ <resourcesDirectory>${basedir}/xdocs/resources</resourcesDirectory>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <aggregate>true</aggregate>
+ <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/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070727.113106-7.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070727.113106-7.pom.md5
new file mode 100644
index 000000000..7e4a5cfdd
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070727.113106-7.pom.md5
@@ -0,0 +1 @@
+69add9b3e2b7d27ae5c92de61acb2d23 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070727.113106-7.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070727.113106-7.pom.sha1
new file mode 100644
index 000000000..b0a35015d
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070727.113106-7.pom.sha1
@@ -0,0 +1 @@
+e1b45d0a5c28f15e8b235a7b4b350513c790ef39 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070728.053229-10.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070728.053229-10.pom
new file mode 100644
index 000000000..372560004
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070728.053229-10.pom
@@ -0,0 +1,300 @@
+<?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>
+ <groupId>org.apache</groupId>
+ <artifactId>apache</artifactId>
+ <version>3</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.axis2</groupId>
+ <artifactId>axis2</artifactId>
+ <version>1.3-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <name>Apache Axis 2.0 - Root</name>
+ <modules>
+ <module>modules/adb</module>
+ <module>modules/adb-codegen</module>
+ <module>modules/addressing</module>
+ <module>modules/codegen</module>
+ <module>modules/fastinfoset</module>
+ <module>modules/integration</module>
+ <module>modules/java2wsdl</module>
+ <module>modules/jibx</module>
+ <module>modules/json</module>
+ <module>modules/kernel</module>
+ <module>modules/mex</module>
+ <module>modules/mex-mar</module>
+ <module>modules/mtompolicy</module>
+ <module>modules/parent</module>
+ <module>modules/ping</module>
+ <module>modules/samples/version</module>
+ <module>modules/soapmonitor</module>
+ <module>modules/spring</module>
+ <module>modules/tool/axis2-aar-maven-plugin</module>
+ <module>modules/tool/axis2-ant-plugin</module>
+ <module>modules/tool/axis2-eclipse-codegen-plugin</module>
+ <module>modules/tool/axis2-eclipse-service-plugin</module>
+ <module>modules/tool/axis2-idea-plugin</module>
+ <module>modules/tool/axis2-java2wsdl-maven-plugin</module>
+ <module>modules/tool/axis2-mar-maven-plugin</module>
+ <module>modules/tool/axis2-wsdl2code-maven-plugin</module>
+ <module>modules/webapp</module>
+ <module>modules/xmlbeans</module>
+ <module>modules/samples</module>
+ <module>modules/scripting</module>
+ </modules>
+ <profiles>
+ <profile>
+ <activation>
+ <property>
+ <name>release</name>
+ </property>
+ </activation>
+ <modules>
+ <module>modules/distribution</module>
+ </modules>
+ </profile>
+ <profile>
+ <id>java14</id>
+ <activation>
+ <jdk>1.4</jdk>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>java15</id>
+ <activation>
+ <jdk>1.5</jdk>
+ </activation>
+ <modules>
+ <module>modules/jaxbri</module>
+ <module>modules/metadata</module>
+ <module>modules/saaj-api</module>
+ <module>modules/saaj</module>
+ <module>modules/jws-api</module>
+ <module>modules/jaxws-api</module>
+ <module>modules/jaxws</module>
+ <module>modules/clustering</module>
+ </modules>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ <fileset dir="modules/clustering/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>java16</id>
+ <activation>
+ <jdk>1.6</jdk>
+ </activation>
+ <modules>
+ <module>modules/jaxbri</module>
+ <module>modules/metadata</module>
+ <module>modules/saaj-api</module>
+ <module>modules/saaj</module>
+ <module>modules/jws-api</module>
+ <module>modules/jaxws-api</module>
+ <module>modules/jaxws</module>
+ <module>modules/clustering</module>
+ </modules>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ <fileset dir="modules/clustering/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+ <ciManagement>
+ <system>continuum</system>
+ <url>http://vmbuild.apache.org/continuum</url>
+ <notifiers>
+ <notifier>
+ <configuration>
+ <ADDRESS>axis2-cvs@ws.apache.org</ADDRESS>
+ </configuration>
+ </notifier>
+ </notifiers>
+ </ciManagement>
+ <scm>
+ <connection>
+ scm:svn:http://svn.apache.org/repos/asf/webservices/axis2/trunk/java/
+ </connection>
+ <developerConnection>
+ scm:svn:https://svn.apache.org/repos/asf/webservices/axis2/trunk/java/
+ </developerConnection>
+ <url>http://svn.apache.org/viewvc/webservices/webservices/axis2/trunk/java/</url>
+ </scm>
+ <distributionManagement>
+ <repository>
+ <id>apache-repo</id>
+ <name>Maven Central Repository</name>
+ <url>
+ scpexe://people.apache.org//www/people.apache.org/repo/m2-ibiblio-rsync-repository</url>
+ </repository>
+ <snapshotRepository>
+ <id>apache-snapshots</id>
+ <name>Apache Development Repository</name>
+ <url>scpexe://people.apache.org//www/people.apache.org/repo/m2-snapshot-repository</url>
+ </snapshotRepository>
+ </distributionManagement>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar-package</id>
+ <phase>package</phase>
+ <goals>
+ <goal>attach-artifact</goal>
+ </goals>
+ <configuration>
+ <artifacts>
+ <artifact>
+ <file>target/lib/axis2-${pom.version}.jar</file>
+ <type>jar</type>
+ </artifact>
+ </artifacts>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-site-plugin</artifactId>
+ <configuration>
+ <xdocDirectory>${basedir}/xdocs</xdocDirectory>
+ <resourcesDirectory>${basedir}/xdocs/resources</resourcesDirectory>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <aggregate>true</aggregate>
+ <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/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070728.053229-10.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070728.053229-10.pom.md5
new file mode 100644
index 000000000..7e4a5cfdd
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070728.053229-10.pom.md5
@@ -0,0 +1 @@
+69add9b3e2b7d27ae5c92de61acb2d23 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070728.053229-10.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070728.053229-10.pom.sha1
new file mode 100644
index 000000000..b0a35015d
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070728.053229-10.pom.sha1
@@ -0,0 +1 @@
+e1b45d0a5c28f15e8b235a7b4b350513c790ef39 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070728.112043-11.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070728.112043-11.pom
new file mode 100644
index 000000000..372560004
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070728.112043-11.pom
@@ -0,0 +1,300 @@
+<?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>
+ <groupId>org.apache</groupId>
+ <artifactId>apache</artifactId>
+ <version>3</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.axis2</groupId>
+ <artifactId>axis2</artifactId>
+ <version>1.3-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <name>Apache Axis 2.0 - Root</name>
+ <modules>
+ <module>modules/adb</module>
+ <module>modules/adb-codegen</module>
+ <module>modules/addressing</module>
+ <module>modules/codegen</module>
+ <module>modules/fastinfoset</module>
+ <module>modules/integration</module>
+ <module>modules/java2wsdl</module>
+ <module>modules/jibx</module>
+ <module>modules/json</module>
+ <module>modules/kernel</module>
+ <module>modules/mex</module>
+ <module>modules/mex-mar</module>
+ <module>modules/mtompolicy</module>
+ <module>modules/parent</module>
+ <module>modules/ping</module>
+ <module>modules/samples/version</module>
+ <module>modules/soapmonitor</module>
+ <module>modules/spring</module>
+ <module>modules/tool/axis2-aar-maven-plugin</module>
+ <module>modules/tool/axis2-ant-plugin</module>
+ <module>modules/tool/axis2-eclipse-codegen-plugin</module>
+ <module>modules/tool/axis2-eclipse-service-plugin</module>
+ <module>modules/tool/axis2-idea-plugin</module>
+ <module>modules/tool/axis2-java2wsdl-maven-plugin</module>
+ <module>modules/tool/axis2-mar-maven-plugin</module>
+ <module>modules/tool/axis2-wsdl2code-maven-plugin</module>
+ <module>modules/webapp</module>
+ <module>modules/xmlbeans</module>
+ <module>modules/samples</module>
+ <module>modules/scripting</module>
+ </modules>
+ <profiles>
+ <profile>
+ <activation>
+ <property>
+ <name>release</name>
+ </property>
+ </activation>
+ <modules>
+ <module>modules/distribution</module>
+ </modules>
+ </profile>
+ <profile>
+ <id>java14</id>
+ <activation>
+ <jdk>1.4</jdk>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>java15</id>
+ <activation>
+ <jdk>1.5</jdk>
+ </activation>
+ <modules>
+ <module>modules/jaxbri</module>
+ <module>modules/metadata</module>
+ <module>modules/saaj-api</module>
+ <module>modules/saaj</module>
+ <module>modules/jws-api</module>
+ <module>modules/jaxws-api</module>
+ <module>modules/jaxws</module>
+ <module>modules/clustering</module>
+ </modules>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ <fileset dir="modules/clustering/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>java16</id>
+ <activation>
+ <jdk>1.6</jdk>
+ </activation>
+ <modules>
+ <module>modules/jaxbri</module>
+ <module>modules/metadata</module>
+ <module>modules/saaj-api</module>
+ <module>modules/saaj</module>
+ <module>modules/jws-api</module>
+ <module>modules/jaxws-api</module>
+ <module>modules/jaxws</module>
+ <module>modules/clustering</module>
+ </modules>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ <fileset dir="modules/clustering/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+ <ciManagement>
+ <system>continuum</system>
+ <url>http://vmbuild.apache.org/continuum</url>
+ <notifiers>
+ <notifier>
+ <configuration>
+ <ADDRESS>axis2-cvs@ws.apache.org</ADDRESS>
+ </configuration>
+ </notifier>
+ </notifiers>
+ </ciManagement>
+ <scm>
+ <connection>
+ scm:svn:http://svn.apache.org/repos/asf/webservices/axis2/trunk/java/
+ </connection>
+ <developerConnection>
+ scm:svn:https://svn.apache.org/repos/asf/webservices/axis2/trunk/java/
+ </developerConnection>
+ <url>http://svn.apache.org/viewvc/webservices/webservices/axis2/trunk/java/</url>
+ </scm>
+ <distributionManagement>
+ <repository>
+ <id>apache-repo</id>
+ <name>Maven Central Repository</name>
+ <url>
+ scpexe://people.apache.org//www/people.apache.org/repo/m2-ibiblio-rsync-repository</url>
+ </repository>
+ <snapshotRepository>
+ <id>apache-snapshots</id>
+ <name>Apache Development Repository</name>
+ <url>scpexe://people.apache.org//www/people.apache.org/repo/m2-snapshot-repository</url>
+ </snapshotRepository>
+ </distributionManagement>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar-package</id>
+ <phase>package</phase>
+ <goals>
+ <goal>attach-artifact</goal>
+ </goals>
+ <configuration>
+ <artifacts>
+ <artifact>
+ <file>target/lib/axis2-${pom.version}.jar</file>
+ <type>jar</type>
+ </artifact>
+ </artifacts>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-site-plugin</artifactId>
+ <configuration>
+ <xdocDirectory>${basedir}/xdocs</xdocDirectory>
+ <resourcesDirectory>${basedir}/xdocs/resources</resourcesDirectory>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <aggregate>true</aggregate>
+ <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/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070728.112043-11.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070728.112043-11.pom.md5
new file mode 100644
index 000000000..7e4a5cfdd
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070728.112043-11.pom.md5
@@ -0,0 +1 @@
+69add9b3e2b7d27ae5c92de61acb2d23 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070728.112043-11.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070728.112043-11.pom.sha1
new file mode 100644
index 000000000..b0a35015d
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070728.112043-11.pom.sha1
@@ -0,0 +1 @@
+e1b45d0a5c28f15e8b235a7b4b350513c790ef39 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070729.171937-16.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070729.171937-16.pom
new file mode 100644
index 000000000..372560004
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070729.171937-16.pom
@@ -0,0 +1,300 @@
+<?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>
+ <groupId>org.apache</groupId>
+ <artifactId>apache</artifactId>
+ <version>3</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.axis2</groupId>
+ <artifactId>axis2</artifactId>
+ <version>1.3-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <name>Apache Axis 2.0 - Root</name>
+ <modules>
+ <module>modules/adb</module>
+ <module>modules/adb-codegen</module>
+ <module>modules/addressing</module>
+ <module>modules/codegen</module>
+ <module>modules/fastinfoset</module>
+ <module>modules/integration</module>
+ <module>modules/java2wsdl</module>
+ <module>modules/jibx</module>
+ <module>modules/json</module>
+ <module>modules/kernel</module>
+ <module>modules/mex</module>
+ <module>modules/mex-mar</module>
+ <module>modules/mtompolicy</module>
+ <module>modules/parent</module>
+ <module>modules/ping</module>
+ <module>modules/samples/version</module>
+ <module>modules/soapmonitor</module>
+ <module>modules/spring</module>
+ <module>modules/tool/axis2-aar-maven-plugin</module>
+ <module>modules/tool/axis2-ant-plugin</module>
+ <module>modules/tool/axis2-eclipse-codegen-plugin</module>
+ <module>modules/tool/axis2-eclipse-service-plugin</module>
+ <module>modules/tool/axis2-idea-plugin</module>
+ <module>modules/tool/axis2-java2wsdl-maven-plugin</module>
+ <module>modules/tool/axis2-mar-maven-plugin</module>
+ <module>modules/tool/axis2-wsdl2code-maven-plugin</module>
+ <module>modules/webapp</module>
+ <module>modules/xmlbeans</module>
+ <module>modules/samples</module>
+ <module>modules/scripting</module>
+ </modules>
+ <profiles>
+ <profile>
+ <activation>
+ <property>
+ <name>release</name>
+ </property>
+ </activation>
+ <modules>
+ <module>modules/distribution</module>
+ </modules>
+ </profile>
+ <profile>
+ <id>java14</id>
+ <activation>
+ <jdk>1.4</jdk>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>java15</id>
+ <activation>
+ <jdk>1.5</jdk>
+ </activation>
+ <modules>
+ <module>modules/jaxbri</module>
+ <module>modules/metadata</module>
+ <module>modules/saaj-api</module>
+ <module>modules/saaj</module>
+ <module>modules/jws-api</module>
+ <module>modules/jaxws-api</module>
+ <module>modules/jaxws</module>
+ <module>modules/clustering</module>
+ </modules>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ <fileset dir="modules/clustering/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>java16</id>
+ <activation>
+ <jdk>1.6</jdk>
+ </activation>
+ <modules>
+ <module>modules/jaxbri</module>
+ <module>modules/metadata</module>
+ <module>modules/saaj-api</module>
+ <module>modules/saaj</module>
+ <module>modules/jws-api</module>
+ <module>modules/jaxws-api</module>
+ <module>modules/jaxws</module>
+ <module>modules/clustering</module>
+ </modules>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ <fileset dir="modules/clustering/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+ <ciManagement>
+ <system>continuum</system>
+ <url>http://vmbuild.apache.org/continuum</url>
+ <notifiers>
+ <notifier>
+ <configuration>
+ <ADDRESS>axis2-cvs@ws.apache.org</ADDRESS>
+ </configuration>
+ </notifier>
+ </notifiers>
+ </ciManagement>
+ <scm>
+ <connection>
+ scm:svn:http://svn.apache.org/repos/asf/webservices/axis2/trunk/java/
+ </connection>
+ <developerConnection>
+ scm:svn:https://svn.apache.org/repos/asf/webservices/axis2/trunk/java/
+ </developerConnection>
+ <url>http://svn.apache.org/viewvc/webservices/webservices/axis2/trunk/java/</url>
+ </scm>
+ <distributionManagement>
+ <repository>
+ <id>apache-repo</id>
+ <name>Maven Central Repository</name>
+ <url>
+ scpexe://people.apache.org//www/people.apache.org/repo/m2-ibiblio-rsync-repository</url>
+ </repository>
+ <snapshotRepository>
+ <id>apache-snapshots</id>
+ <name>Apache Development Repository</name>
+ <url>scpexe://people.apache.org//www/people.apache.org/repo/m2-snapshot-repository</url>
+ </snapshotRepository>
+ </distributionManagement>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar-package</id>
+ <phase>package</phase>
+ <goals>
+ <goal>attach-artifact</goal>
+ </goals>
+ <configuration>
+ <artifacts>
+ <artifact>
+ <file>target/lib/axis2-${pom.version}.jar</file>
+ <type>jar</type>
+ </artifact>
+ </artifacts>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-site-plugin</artifactId>
+ <configuration>
+ <xdocDirectory>${basedir}/xdocs</xdocDirectory>
+ <resourcesDirectory>${basedir}/xdocs/resources</resourcesDirectory>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <aggregate>true</aggregate>
+ <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/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070729.171937-16.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070729.171937-16.pom.md5
new file mode 100644
index 000000000..7e4a5cfdd
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070729.171937-16.pom.md5
@@ -0,0 +1 @@
+69add9b3e2b7d27ae5c92de61acb2d23 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070729.171937-16.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070729.171937-16.pom.sha1
new file mode 100644
index 000000000..b0a35015d
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070729.171937-16.pom.sha1
@@ -0,0 +1 @@
+e1b45d0a5c28f15e8b235a7b4b350513c790ef39 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070730.232112-20.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070730.232112-20.pom
new file mode 100644
index 000000000..372560004
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070730.232112-20.pom
@@ -0,0 +1,300 @@
+<?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>
+ <groupId>org.apache</groupId>
+ <artifactId>apache</artifactId>
+ <version>3</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.axis2</groupId>
+ <artifactId>axis2</artifactId>
+ <version>1.3-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <name>Apache Axis 2.0 - Root</name>
+ <modules>
+ <module>modules/adb</module>
+ <module>modules/adb-codegen</module>
+ <module>modules/addressing</module>
+ <module>modules/codegen</module>
+ <module>modules/fastinfoset</module>
+ <module>modules/integration</module>
+ <module>modules/java2wsdl</module>
+ <module>modules/jibx</module>
+ <module>modules/json</module>
+ <module>modules/kernel</module>
+ <module>modules/mex</module>
+ <module>modules/mex-mar</module>
+ <module>modules/mtompolicy</module>
+ <module>modules/parent</module>
+ <module>modules/ping</module>
+ <module>modules/samples/version</module>
+ <module>modules/soapmonitor</module>
+ <module>modules/spring</module>
+ <module>modules/tool/axis2-aar-maven-plugin</module>
+ <module>modules/tool/axis2-ant-plugin</module>
+ <module>modules/tool/axis2-eclipse-codegen-plugin</module>
+ <module>modules/tool/axis2-eclipse-service-plugin</module>
+ <module>modules/tool/axis2-idea-plugin</module>
+ <module>modules/tool/axis2-java2wsdl-maven-plugin</module>
+ <module>modules/tool/axis2-mar-maven-plugin</module>
+ <module>modules/tool/axis2-wsdl2code-maven-plugin</module>
+ <module>modules/webapp</module>
+ <module>modules/xmlbeans</module>
+ <module>modules/samples</module>
+ <module>modules/scripting</module>
+ </modules>
+ <profiles>
+ <profile>
+ <activation>
+ <property>
+ <name>release</name>
+ </property>
+ </activation>
+ <modules>
+ <module>modules/distribution</module>
+ </modules>
+ </profile>
+ <profile>
+ <id>java14</id>
+ <activation>
+ <jdk>1.4</jdk>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>java15</id>
+ <activation>
+ <jdk>1.5</jdk>
+ </activation>
+ <modules>
+ <module>modules/jaxbri</module>
+ <module>modules/metadata</module>
+ <module>modules/saaj-api</module>
+ <module>modules/saaj</module>
+ <module>modules/jws-api</module>
+ <module>modules/jaxws-api</module>
+ <module>modules/jaxws</module>
+ <module>modules/clustering</module>
+ </modules>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ <fileset dir="modules/clustering/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>java16</id>
+ <activation>
+ <jdk>1.6</jdk>
+ </activation>
+ <modules>
+ <module>modules/jaxbri</module>
+ <module>modules/metadata</module>
+ <module>modules/saaj-api</module>
+ <module>modules/saaj</module>
+ <module>modules/jws-api</module>
+ <module>modules/jaxws-api</module>
+ <module>modules/jaxws</module>
+ <module>modules/clustering</module>
+ </modules>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ <fileset dir="modules/clustering/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+ <ciManagement>
+ <system>continuum</system>
+ <url>http://vmbuild.apache.org/continuum</url>
+ <notifiers>
+ <notifier>
+ <configuration>
+ <ADDRESS>axis2-cvs@ws.apache.org</ADDRESS>
+ </configuration>
+ </notifier>
+ </notifiers>
+ </ciManagement>
+ <scm>
+ <connection>
+ scm:svn:http://svn.apache.org/repos/asf/webservices/axis2/trunk/java/
+ </connection>
+ <developerConnection>
+ scm:svn:https://svn.apache.org/repos/asf/webservices/axis2/trunk/java/
+ </developerConnection>
+ <url>http://svn.apache.org/viewvc/webservices/webservices/axis2/trunk/java/</url>
+ </scm>
+ <distributionManagement>
+ <repository>
+ <id>apache-repo</id>
+ <name>Maven Central Repository</name>
+ <url>
+ scpexe://people.apache.org//www/people.apache.org/repo/m2-ibiblio-rsync-repository</url>
+ </repository>
+ <snapshotRepository>
+ <id>apache-snapshots</id>
+ <name>Apache Development Repository</name>
+ <url>scpexe://people.apache.org//www/people.apache.org/repo/m2-snapshot-repository</url>
+ </snapshotRepository>
+ </distributionManagement>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar-package</id>
+ <phase>package</phase>
+ <goals>
+ <goal>attach-artifact</goal>
+ </goals>
+ <configuration>
+ <artifacts>
+ <artifact>
+ <file>target/lib/axis2-${pom.version}.jar</file>
+ <type>jar</type>
+ </artifact>
+ </artifacts>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-site-plugin</artifactId>
+ <configuration>
+ <xdocDirectory>${basedir}/xdocs</xdocDirectory>
+ <resourcesDirectory>${basedir}/xdocs/resources</resourcesDirectory>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <aggregate>true</aggregate>
+ <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/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070730.232112-20.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070730.232112-20.pom.md5
new file mode 100644
index 000000000..7e4a5cfdd
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070730.232112-20.pom.md5
@@ -0,0 +1 @@
+69add9b3e2b7d27ae5c92de61acb2d23 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070730.232112-20.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070730.232112-20.pom.sha1
new file mode 100644
index 000000000..b0a35015d
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070730.232112-20.pom.sha1
@@ -0,0 +1 @@
+e1b45d0a5c28f15e8b235a7b4b350513c790ef39 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070731.113304-21.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070731.113304-21.pom
new file mode 100644
index 000000000..8d5931c0e
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070731.113304-21.pom
@@ -0,0 +1,268 @@
+<?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>
+ <groupId>org.apache</groupId>
+ <artifactId>apache</artifactId>
+ <version>3</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.axis2</groupId>
+ <artifactId>axis2</artifactId>
+ <version>1.3-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <name>Apache Axis 2.0 - Root</name>
+ <modules>
+ <module>modules/adb</module>
+ <module>modules/adb-codegen</module>
+ <module>modules/addressing</module>
+ <module>modules/codegen</module>
+ <module>modules/fastinfoset</module>
+ <module>modules/integration</module>
+ <module>modules/java2wsdl</module>
+ <module>modules/jibx</module>
+ <module>modules/json</module>
+ <module>modules/kernel</module>
+ <module>modules/mex</module>
+ <module>modules/mex-mar</module>
+ <module>modules/mtompolicy</module>
+ <module>modules/parent</module>
+ <module>modules/ping</module>
+ <module>modules/samples/version</module>
+ <module>modules/soapmonitor</module>
+ <module>modules/spring</module>
+ <module>modules/tool/axis2-aar-maven-plugin</module>
+ <module>modules/tool/axis2-ant-plugin</module>
+ <module>modules/tool/axis2-eclipse-codegen-plugin</module>
+ <module>modules/tool/axis2-eclipse-service-plugin</module>
+ <module>modules/tool/axis2-idea-plugin</module>
+ <module>modules/tool/axis2-java2wsdl-maven-plugin</module>
+ <module>modules/tool/axis2-mar-maven-plugin</module>
+ <module>modules/tool/axis2-wsdl2code-maven-plugin</module>
+ <module>modules/webapp</module>
+ <module>modules/xmlbeans</module>
+ <module>modules/samples</module>
+ <module>modules/scripting</module>
+ </modules>
+ <profiles>
+ <profile>
+ <activation>
+ <property>
+ <name>release</name>
+ </property>
+ </activation>
+ <modules>
+ <module>modules/documentation</module>
+ <module>modules/distribution</module>
+ </modules>
+ </profile>
+ <profile>
+ <id>java14</id>
+ <activation>
+ <jdk>1.4</jdk>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>java15</id>
+ <activation>
+ <jdk>1.5</jdk>
+ </activation>
+ <modules>
+ <module>modules/jaxbri</module>
+ <module>modules/metadata</module>
+ <module>modules/saaj-api</module>
+ <module>modules/saaj</module>
+ <module>modules/jws-api</module>
+ <module>modules/jaxws-api</module>
+ <module>modules/jaxws</module>
+ <module>modules/clustering</module>
+ </modules>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ <fileset dir="modules/clustering/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>java16</id>
+ <activation>
+ <jdk>1.6</jdk>
+ </activation>
+ <modules>
+ <module>modules/jaxbri</module>
+ <module>modules/metadata</module>
+ <module>modules/saaj-api</module>
+ <module>modules/saaj</module>
+ <module>modules/jws-api</module>
+ <module>modules/jaxws-api</module>
+ <module>modules/jaxws</module>
+ <module>modules/clustering</module>
+ </modules>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ <fileset dir="modules/clustering/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+ <ciManagement>
+ <system>continuum</system>
+ <url>http://vmbuild.apache.org/continuum</url>
+ <notifiers>
+ <notifier>
+ <configuration>
+ <ADDRESS>axis2-cvs@ws.apache.org</ADDRESS>
+ </configuration>
+ </notifier>
+ </notifiers>
+ </ciManagement>
+ <scm>
+ <connection>
+ scm:svn:http://svn.apache.org/repos/asf/webservices/axis2/trunk/java/
+ </connection>
+ <developerConnection>
+ scm:svn:https://svn.apache.org/repos/asf/webservices/axis2/trunk/java/
+ </developerConnection>
+ <url>http://svn.apache.org/viewvc/webservices/webservices/axis2/trunk/java/</url>
+ </scm>
+ <distributionManagement>
+ <repository>
+ <id>apache-repo</id>
+ <name>Maven Central Repository</name>
+ <url>
+ scpexe://people.apache.org//www/people.apache.org/repo/m2-ibiblio-rsync-repository</url>
+ </repository>
+ <snapshotRepository>
+ <id>apache-snapshots</id>
+ <name>Apache Development Repository</name>
+ <url>scpexe://people.apache.org//www/people.apache.org/repo/m2-snapshot-repository</url>
+ </snapshotRepository>
+ </distributionManagement>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar-package</id>
+ <phase>package</phase>
+ <goals>
+ <goal>attach-artifact</goal>
+ </goals>
+ <configuration>
+ <artifacts>
+ <artifact>
+ <file>target/lib/axis2-${pom.version}.jar</file>
+ <type>jar</type>
+ </artifact>
+ </artifacts>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070731.113304-21.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070731.113304-21.pom.md5
new file mode 100644
index 000000000..9cebfeecc
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070731.113304-21.pom.md5
@@ -0,0 +1 @@
+8530af16aa7f3e5268b96ff88dd703a8 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070731.113304-21.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070731.113304-21.pom.sha1
new file mode 100644
index 000000000..45d7111f6
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070731.113304-21.pom.sha1
@@ -0,0 +1 @@
+d2a036ec537737153980aed1157bad133230f2c8 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070731.172936-22.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070731.172936-22.pom
new file mode 100644
index 000000000..8d5931c0e
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070731.172936-22.pom
@@ -0,0 +1,268 @@
+<?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>
+ <groupId>org.apache</groupId>
+ <artifactId>apache</artifactId>
+ <version>3</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.axis2</groupId>
+ <artifactId>axis2</artifactId>
+ <version>1.3-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <name>Apache Axis 2.0 - Root</name>
+ <modules>
+ <module>modules/adb</module>
+ <module>modules/adb-codegen</module>
+ <module>modules/addressing</module>
+ <module>modules/codegen</module>
+ <module>modules/fastinfoset</module>
+ <module>modules/integration</module>
+ <module>modules/java2wsdl</module>
+ <module>modules/jibx</module>
+ <module>modules/json</module>
+ <module>modules/kernel</module>
+ <module>modules/mex</module>
+ <module>modules/mex-mar</module>
+ <module>modules/mtompolicy</module>
+ <module>modules/parent</module>
+ <module>modules/ping</module>
+ <module>modules/samples/version</module>
+ <module>modules/soapmonitor</module>
+ <module>modules/spring</module>
+ <module>modules/tool/axis2-aar-maven-plugin</module>
+ <module>modules/tool/axis2-ant-plugin</module>
+ <module>modules/tool/axis2-eclipse-codegen-plugin</module>
+ <module>modules/tool/axis2-eclipse-service-plugin</module>
+ <module>modules/tool/axis2-idea-plugin</module>
+ <module>modules/tool/axis2-java2wsdl-maven-plugin</module>
+ <module>modules/tool/axis2-mar-maven-plugin</module>
+ <module>modules/tool/axis2-wsdl2code-maven-plugin</module>
+ <module>modules/webapp</module>
+ <module>modules/xmlbeans</module>
+ <module>modules/samples</module>
+ <module>modules/scripting</module>
+ </modules>
+ <profiles>
+ <profile>
+ <activation>
+ <property>
+ <name>release</name>
+ </property>
+ </activation>
+ <modules>
+ <module>modules/documentation</module>
+ <module>modules/distribution</module>
+ </modules>
+ </profile>
+ <profile>
+ <id>java14</id>
+ <activation>
+ <jdk>1.4</jdk>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>java15</id>
+ <activation>
+ <jdk>1.5</jdk>
+ </activation>
+ <modules>
+ <module>modules/jaxbri</module>
+ <module>modules/metadata</module>
+ <module>modules/saaj-api</module>
+ <module>modules/saaj</module>
+ <module>modules/jws-api</module>
+ <module>modules/jaxws-api</module>
+ <module>modules/jaxws</module>
+ <module>modules/clustering</module>
+ </modules>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ <fileset dir="modules/clustering/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>java16</id>
+ <activation>
+ <jdk>1.6</jdk>
+ </activation>
+ <modules>
+ <module>modules/jaxbri</module>
+ <module>modules/metadata</module>
+ <module>modules/saaj-api</module>
+ <module>modules/saaj</module>
+ <module>modules/jws-api</module>
+ <module>modules/jaxws-api</module>
+ <module>modules/jaxws</module>
+ <module>modules/clustering</module>
+ </modules>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ <fileset dir="modules/clustering/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+ <ciManagement>
+ <system>continuum</system>
+ <url>http://vmbuild.apache.org/continuum</url>
+ <notifiers>
+ <notifier>
+ <configuration>
+ <ADDRESS>axis2-cvs@ws.apache.org</ADDRESS>
+ </configuration>
+ </notifier>
+ </notifiers>
+ </ciManagement>
+ <scm>
+ <connection>
+ scm:svn:http://svn.apache.org/repos/asf/webservices/axis2/trunk/java/
+ </connection>
+ <developerConnection>
+ scm:svn:https://svn.apache.org/repos/asf/webservices/axis2/trunk/java/
+ </developerConnection>
+ <url>http://svn.apache.org/viewvc/webservices/webservices/axis2/trunk/java/</url>
+ </scm>
+ <distributionManagement>
+ <repository>
+ <id>apache-repo</id>
+ <name>Maven Central Repository</name>
+ <url>
+ scpexe://people.apache.org//www/people.apache.org/repo/m2-ibiblio-rsync-repository</url>
+ </repository>
+ <snapshotRepository>
+ <id>apache-snapshots</id>
+ <name>Apache Development Repository</name>
+ <url>scpexe://people.apache.org//www/people.apache.org/repo/m2-snapshot-repository</url>
+ </snapshotRepository>
+ </distributionManagement>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar-package</id>
+ <phase>package</phase>
+ <goals>
+ <goal>attach-artifact</goal>
+ </goals>
+ <configuration>
+ <artifacts>
+ <artifact>
+ <file>target/lib/axis2-${pom.version}.jar</file>
+ <type>jar</type>
+ </artifact>
+ </artifacts>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070731.172936-22.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070731.172936-22.pom.md5
new file mode 100644
index 000000000..9cebfeecc
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070731.172936-22.pom.md5
@@ -0,0 +1 @@
+8530af16aa7f3e5268b96ff88dd703a8 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070731.172936-22.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070731.172936-22.pom.sha1
new file mode 100644
index 000000000..45d7111f6
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070731.172936-22.pom.sha1
@@ -0,0 +1 @@
+d2a036ec537737153980aed1157bad133230f2c8 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070802.113139-29.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070802.113139-29.pom
new file mode 100644
index 000000000..8d5931c0e
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070802.113139-29.pom
@@ -0,0 +1,268 @@
+<?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>
+ <groupId>org.apache</groupId>
+ <artifactId>apache</artifactId>
+ <version>3</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.axis2</groupId>
+ <artifactId>axis2</artifactId>
+ <version>1.3-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <name>Apache Axis 2.0 - Root</name>
+ <modules>
+ <module>modules/adb</module>
+ <module>modules/adb-codegen</module>
+ <module>modules/addressing</module>
+ <module>modules/codegen</module>
+ <module>modules/fastinfoset</module>
+ <module>modules/integration</module>
+ <module>modules/java2wsdl</module>
+ <module>modules/jibx</module>
+ <module>modules/json</module>
+ <module>modules/kernel</module>
+ <module>modules/mex</module>
+ <module>modules/mex-mar</module>
+ <module>modules/mtompolicy</module>
+ <module>modules/parent</module>
+ <module>modules/ping</module>
+ <module>modules/samples/version</module>
+ <module>modules/soapmonitor</module>
+ <module>modules/spring</module>
+ <module>modules/tool/axis2-aar-maven-plugin</module>
+ <module>modules/tool/axis2-ant-plugin</module>
+ <module>modules/tool/axis2-eclipse-codegen-plugin</module>
+ <module>modules/tool/axis2-eclipse-service-plugin</module>
+ <module>modules/tool/axis2-idea-plugin</module>
+ <module>modules/tool/axis2-java2wsdl-maven-plugin</module>
+ <module>modules/tool/axis2-mar-maven-plugin</module>
+ <module>modules/tool/axis2-wsdl2code-maven-plugin</module>
+ <module>modules/webapp</module>
+ <module>modules/xmlbeans</module>
+ <module>modules/samples</module>
+ <module>modules/scripting</module>
+ </modules>
+ <profiles>
+ <profile>
+ <activation>
+ <property>
+ <name>release</name>
+ </property>
+ </activation>
+ <modules>
+ <module>modules/documentation</module>
+ <module>modules/distribution</module>
+ </modules>
+ </profile>
+ <profile>
+ <id>java14</id>
+ <activation>
+ <jdk>1.4</jdk>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>java15</id>
+ <activation>
+ <jdk>1.5</jdk>
+ </activation>
+ <modules>
+ <module>modules/jaxbri</module>
+ <module>modules/metadata</module>
+ <module>modules/saaj-api</module>
+ <module>modules/saaj</module>
+ <module>modules/jws-api</module>
+ <module>modules/jaxws-api</module>
+ <module>modules/jaxws</module>
+ <module>modules/clustering</module>
+ </modules>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ <fileset dir="modules/clustering/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>java16</id>
+ <activation>
+ <jdk>1.6</jdk>
+ </activation>
+ <modules>
+ <module>modules/jaxbri</module>
+ <module>modules/metadata</module>
+ <module>modules/saaj-api</module>
+ <module>modules/saaj</module>
+ <module>modules/jws-api</module>
+ <module>modules/jaxws-api</module>
+ <module>modules/jaxws</module>
+ <module>modules/clustering</module>
+ </modules>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="target/lib"/>
+ <jar destfile="target/lib/axis2-${pom.version}.jar">
+ <fileset dir="modules/java2wsdl/target/classes"/>
+ <fileset dir="modules/kernel/target/classes"/>
+ <fileset dir="modules/addressing/target/classes"/>
+ <fileset dir="modules/codegen/target/classes"/>
+ <fileset dir="modules/adb/target/classes"/>
+ <fileset dir="modules/adb-codegen/target/classes"/>
+ <fileset dir="modules/xmlbeans/target/classes"/>
+ <fileset dir="modules/clustering/target/classes"/>
+ </jar>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+ <ciManagement>
+ <system>continuum</system>
+ <url>http://vmbuild.apache.org/continuum</url>
+ <notifiers>
+ <notifier>
+ <configuration>
+ <ADDRESS>axis2-cvs@ws.apache.org</ADDRESS>
+ </configuration>
+ </notifier>
+ </notifiers>
+ </ciManagement>
+ <scm>
+ <connection>
+ scm:svn:http://svn.apache.org/repos/asf/webservices/axis2/trunk/java/
+ </connection>
+ <developerConnection>
+ scm:svn:https://svn.apache.org/repos/asf/webservices/axis2/trunk/java/
+ </developerConnection>
+ <url>http://svn.apache.org/viewvc/webservices/webservices/axis2/trunk/java/</url>
+ </scm>
+ <distributionManagement>
+ <repository>
+ <id>apache-repo</id>
+ <name>Maven Central Repository</name>
+ <url>
+ scpexe://people.apache.org//www/people.apache.org/repo/m2-ibiblio-rsync-repository</url>
+ </repository>
+ <snapshotRepository>
+ <id>apache-snapshots</id>
+ <name>Apache Development Repository</name>
+ <url>scpexe://people.apache.org//www/people.apache.org/repo/m2-snapshot-repository</url>
+ </snapshotRepository>
+ </distributionManagement>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>axis2-jar-package</id>
+ <phase>package</phase>
+ <goals>
+ <goal>attach-artifact</goal>
+ </goals>
+ <configuration>
+ <artifacts>
+ <artifact>
+ <file>target/lib/axis2-${pom.version}.jar</file>
+ <type>jar</type>
+ </artifact>
+ </artifacts>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070802.113139-29.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070802.113139-29.pom.md5
new file mode 100644
index 000000000..9cebfeecc
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070802.113139-29.pom.md5
@@ -0,0 +1 @@
+8530af16aa7f3e5268b96ff88dd703a8 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070802.113139-29.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070802.113139-29.pom.sha1
new file mode 100644
index 000000000..45d7111f6
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/axis2-1.3-20070802.113139-29.pom.sha1
@@ -0,0 +1 @@
+d2a036ec537737153980aed1157bad133230f2c8 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/maven-metadata.xml
new file mode 100644
index 000000000..3d2b170fc
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/maven-metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?><metadata>
+ <groupId>org.apache.axis2</groupId>
+ <artifactId>axis2</artifactId>
+ <version>1.3-SNAPSHOT</version>
+ <versioning>
+ <snapshot>
+ <timestamp>20070802.113139</timestamp>
+ <buildNumber>29</buildNumber>
+ </snapshot>
+ <lastUpdated>20070802113139</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/maven-metadata.xml.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/maven-metadata.xml.md5
new file mode 100644
index 000000000..f39e1f745
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/maven-metadata.xml.md5
@@ -0,0 +1 @@
+f68494b20d262a4974d61e2911f90291 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/maven-metadata.xml.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/maven-metadata.xml.sha1
new file mode 100644
index 000000000..ebf6c8ce2
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/axis2/axis2/1.3-SNAPSHOT/maven-metadata.xml.sha1
@@ -0,0 +1 @@
+6d0399f05e374923a3929683b4176fe67d8ed08f \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/cocoon/cocoon/1/cocoon-1.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/cocoon/cocoon/1/cocoon-1.pom
new file mode 100644
index 000000000..81201451e
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/cocoon/cocoon/1/cocoon-1.pom
@@ -0,0 +1,379 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2005 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.
+-->
+<!--+
+ | This is the main Maven file that contains all global settings, management and information.
+ | @version $Id: cocoon-1.pom 580582 2007-09-29 13:37:01Z joakime $
+ +-->
+<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>1</version>
+ </parent>
+
+ <packaging>pom</packaging>
+
+ <groupId>org.apache.cocoon</groupId>
+ <artifactId>cocoon</artifactId>
+ <version>1</version>
+
+ <name>Apache Cocoon</name>
+ <url>http://cocoon.apache.org</url>
+ <licenses>
+ <license>
+ <name>Apache License, Version 2.0</name>
+ <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+ <distribution>repo</distribution>
+ </license>
+ </licenses>
+ <!--modules>
+ <module>blocks</module>
+ <module>commons</module>
+ <module>core</module>
+ <module>tools</module>
+ </modules-->
+ <repositories>
+ <repository>
+ <id>central</id>
+ <name>Maven central repository</name>
+ <url>http://ibiblio.org/maven2</url>
+ </repository>
+ <repository>
+ <id>apache.snapshot</id>
+ <name>Apache Snapshot Repository</name>
+ <url>http://svn.apache.org/maven-snapshot-repository</url>
+ </repository>
+ <repository>
+ <id>apache-cvs</id>
+ <name>Apache Maven Repository</name>
+ <url>http://svn.apache.org/repository</url>
+ <layout>legacy</layout>
+ </repository>
+ </repositories>
+ <!-- Activate this element if you want to use snapshot versions of plugins
+ <pluginRepositories>
+ <pluginRepository>
+ <id>snapshots</id>
+ <url>http://snapshots.maven.codehaus.org/maven2</url>
+ </pluginRepository>
+ </pluginRepositories>
+ -->
+ <organization>
+ <name>The Apache Software Foundation</name>
+ <url>http://www.apache.org/</url>
+ </organization>
+ <developers>
+ <developer>
+ <id>crossley</id>
+ <name>David Crossley</name>
+ <email>crossley@apache.org</email>
+ <organization>ASF</organization>
+ <organizationUrl>http://www.apache.org/</organizationUrl>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ <timezone>+10</timezone>
+ </developer>
+ <developer>
+ <id>bdelacretaz</id>
+ <name>Bertrand Delacretaz</name>
+ <email>bdelacretaz@apache.org</email>
+ <organization>ASF</organization>
+ <organizationUrl>http://www.apache.org</organizationUrl>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <id>danielf</id>
+ <name>Daniel Fagerstrom</name>
+ <email>danielf@apache.org</email>
+ <organization>ASF</organization>
+ <organizationUrl>http://www.apache.org</organizationUrl>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <id>antonio</id>
+ <name>Antonio Gallardo</name>
+ <email>antonio@apache.org</email>
+ <organization>ASF</organization>
+ <organizationUrl>http://www.apache.org</organizationUrl>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ <timezone>-6</timezone>
+ </developer>
+ <developer>
+ <id>lgawron</id>
+ <name>Leszek Gawron</name>
+ <email>lgawron@apache.org</email>
+ <organization>ASF</organization>
+ <organizationUrl>http://www.apache.org</organizationUrl>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <id>joerg</id>
+ <name>Jorg Heinicke</name>
+ <email>joerg@apache.org</email>
+ <organization>ASF</organization>
+ <organizationUrl>http://www.apache.org</organizationUrl>
+ <timezone>+1</timezone>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>jheymans</id>
+ <name>Jorg Heymans</name>
+ <email>jheymans@apache.org</email>
+ <organization>ASF</organization>
+ <organizationUrl>http://www.apache.org</organizationUrl>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <id>anathaniel</id>
+ <name>Alfred Nathaniel</name>
+ <email>anathaniel@apache.org</email>
+ <organization>ASF</organization>
+ <organizationUrl>http://www.apache.org</organizationUrl>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <id>giacomo</id>
+ <name>Giacomo Pati</name>
+ <email>giacomo@apache.org</email>
+ <organization>ASF</organization>
+ <organizationUrl>http://www.apache.org</organizationUrl>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <id>reinhard</id>
+ <name>Reinhard Poetz</name>
+ <email>reinhard@apache.org</email>
+ <organization>ASF</organization>
+ <organizationUrl>http://www.apache.org</organizationUrl>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <id>jbq</id>
+ <name>Jean-Baptiste Quenot</name>
+ <email>jbq@apache.org</email>
+ <organization>ASF</organization>
+ <organizationUrl>http://www.apache.org</organizationUrl>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <id>gianugo</id>
+ <name>Gianugo Rabellino</name>
+ <email>gianugo@apache.org</email>
+ <organization>ASF</organization>
+ <organizationUrl>http://www.apache.org</organizationUrl>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <id>cziegeler</id>
+ <name>Carsten Ziegeler</name>
+ <email>cziegeler@apache.org</email>
+ <organization>ASF</organization>
+ <organizationUrl>http://www.apache.org</organizationUrl>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <id>vgritsenko</id>
+ <name>Vadim Gritsenko</name>
+ <email>vgritsenko@apache.org</email>
+ <organization>ASF</organization>
+ <organizationUrl>http://www.apache.org</organizationUrl>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ <timezone>-5</timezone>
+ </developer>
+ </developers>
+ <issueManagement>
+ <system>jira</system>
+ <url>https://issues.apache.org/jira/browse/COCOON</url>
+ </issueManagement>
+ <ciManagement>
+ <system>continuum</system>
+ <url>http://cocoon.zones.apache.org:12000/continuum/servlet/continuum</url>
+ <notifiers>
+ <notifier>
+ <type>mail</type>
+ <configuration>
+ <address>dev@cocoon.apache.org</address>
+ </configuration>
+ </notifier>
+ </notifiers>
+ </ciManagement>
+ <mailingLists>
+ <mailingList>
+ <name>Cocoon User List</name>
+ <subscribe>users-subscribe@cocoon.apache.org</subscribe>
+ <unsubscribe>users-unsubscribe@cocoon.apache.org</unsubscribe>
+ <post>users@cocoon.apache.org</post>
+ <archive>http://mail-archives.apache.org/mod_mbox/cocoon-users</archive>
+ <otherArchives>
+ <otherArchive>http://www.mail-archive.com/users@cocoon.apache.org/</otherArchive>
+ <otherArchive>http://marc.theaimsgroup.com/?l=xml-cocoon-user</otherArchive>
+ <otherArchive>http://news.gmane.org/gmane.text.xml.cocoon.user</otherArchive>
+ </otherArchives>
+ </mailingList>
+ <mailingList>
+ <name>Cocoon Developer List</name>
+ <subscribe>dev-subscribe@cocoon.apache.org</subscribe>
+ <unsubscribe>dev-unsubscribe@cocoon.apache.org</unsubscribe>
+ <post>dev@cocoon.apache.org</post>
+ <archive>http://mail-archives.apache.org/mod_mbox/cocoon-dev</archive>
+ <otherArchives>
+ <otherArchive>http://www.mail-archive.com/dev@cocoon.apache.org/</otherArchive>
+ <otherArchive>http://marc.theaimsgroup.com/?l=xml-cocoon-dev</otherArchive>
+ <otherArchive>http://news.gmane.org/gmane.text.xml.cocoon.dev</otherArchive>
+ </otherArchives>
+ </mailingList>
+ <mailingList>
+ <name>Cocoon Documentation List</name>
+ <subscribe>docs-subscribe@cocoon.apache.org</subscribe>
+ <unsubscribe>docs-unsubscribe@cocoon.apache.org</unsubscribe>
+ <post>docs@cocoon.apache.org</post>
+ <archive>http://mail-archives.apache.org/mod_mbox/cocoon-docs</archive>
+ <otherArchives>
+ <otherArchive>http://www.mail-archive.com/dev@cocoon.apache.org/</otherArchive>
+ <otherArchive>http://marc.theaimsgroup.com/?l=xml-cocoon-docs</otherArchive>
+ <otherArchive>http://news.gmane.org/gmane.text.xml.cocoon.docs</otherArchive>
+ </otherArchives>
+ </mailingList>
+ <mailingList>
+ <name>Cocoon Subversion Repository List</name>
+ <subscribe>cvs-subscribe@cocoon.apache.org</subscribe>
+ <unsubscribe>cvs-unsubscribe@cocoon.apache.org</unsubscribe>
+ <archive>http://mail-archives.apache.org/mod_mbox/cocoon-cvs</archive>
+ <otherArchives>
+ <otherArchive>http://www.mail-archive.com/cvs@cocoon.apache.org/</otherArchive>
+ <otherArchive>http://marc.theaimsgroup.com/?l=xml-cocoon-cvs</otherArchive>
+ <otherArchive>http://news.gmane.org/gmane.text.xml.cocoon.cvs</otherArchive>
+ </otherArchives>
+ </mailingList>
+ </mailingLists>
+ <scm>
+ <connection>scm:svn:https://svn.apache.org/repos/asf/cocoon/tags/cocoon-1</connection>
+ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/cocoon/tags/cocoon-1</developerConnection>
+ <url>https://svn.apache.org/repos/asf/cocoon/tags/cocoon-1</url>
+ </scm>
+ <distributionManagement>
+ <repository>
+ <id>apache-maven</id>
+ <name>release repository</name>
+ <url>scpexe://people.apache.org/www/people.apache.org/repo/m2-ibiblio-rsync-repository</url>
+ </repository>
+ <snapshotRepository>
+ <id>apache-maven-snapshot</id>
+ <name>snapshot repository</name>
+ <url>scpexe://people.apache.org/www/people.apache.org/repo/m2-snapshot-repository</url>
+ </snapshotRepository>
+ </distributionManagement>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <extensions>
+ <extension>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-ssh-external</artifactId>
+ <version>1.0-alpha-6</version>
+ </extension>
+ </extensions>
+ <!--
+ <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>
+ -->
+ <plugins>
+ <plugin>
+ <artifactId>maven-release-plugin</artifactId>
+ <configuration>
+ <tagBase>https://svn.apache.org/repos/asf/cocoon/tags</tagBase>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-project-info-reports-plugin</artifactId>
+ <reportSets>
+ <reportSet>
+ <reports>
+ <report>dependencies</report>
+ <report>project-team</report>
+ <report>mailing-list</report>
+ <report>cim</report>
+ <report>issue-tracking</report>
+ <report>license</report>
+ <report>scm</report>
+ </reports>
+ </reportSet>
+ </reportSets>
+ </plugin>
+ </plugins>
+ </reporting>
+</project> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/A/1.0/A-1.0.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/A/1.0/A-1.0.pom
new file mode 100644
index 000000000..202a0a448
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/A/1.0/A-1.0.pom
@@ -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.
+ -->
+
+<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>A</artifactId>
+ <version>1.0</version>
+ <name>Maven Test Repository Artifact Discovery</name>
+ <packaging>war</packaging>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/A/1.0/A-1.0.war b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/A/1.0/A-1.0.war
new file mode 100644
index 000000000..54d190b23
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/A/1.0/A-1.0.war
@@ -0,0 +1 @@
+dummy content. sample file only.
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/B/1.0/B-1.0.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/B/1.0/B-1.0.pom
new file mode 100644
index 000000000..fa5f8f6c8
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/B/1.0/B-1.0.pom
@@ -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.
+ -->
+
+<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>B</artifactId>
+ <version>1.0</version>
+ <name>Maven Test Repository Artifact Discovery</name>
+ <packaging>pom</packaging>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/B/2.0/B-2.0.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/B/2.0/B-2.0.pom
new file mode 100644
index 000000000..c3034e820
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/B/2.0/B-2.0.pom
@@ -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.
+ -->
+
+<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>B</artifactId>
+ <version>2.0</version>
+ <name>Maven Test Repository Artifact Discovery</name>
+ <packaging>pom</packaging>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/C/1.0/C-1.0.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/C/1.0/C-1.0.pom
new file mode 100644
index 000000000..ae14cd7eb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/C/1.0/C-1.0.pom
@@ -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.
+ -->
+
+<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>C</artifactId>
+ <version>1.0</version>
+ <name>Maven Test Repository Artifact Discovery</name>
+ <packaging>war</packaging>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/C/1.0/C-1.0.war b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/C/1.0/C-1.0.war
new file mode 100644
index 000000000..54d190b23
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/C/1.0/C-1.0.war
@@ -0,0 +1 @@
+dummy content. sample file only.
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-applet/1.0-SNAPSHOT/archiva-applet-1.0-SNAPSHOT.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-applet/1.0-SNAPSHOT/archiva-applet-1.0-SNAPSHOT.pom
new file mode 100644
index 000000000..d48ebf7a8
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-applet/1.0-SNAPSHOT/archiva-applet-1.0-SNAPSHOT.pom
@@ -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 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.archiva</groupId>
+ <artifactId>archiva</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <artifactId>archiva-applet</artifactId>
+ <name>Archiva Applet</name>
+ <description>
+ Applet for performing local operations on files such as creating a checksum of an artifact
+ before uploading it.
+ </description>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.1</version>
+ <configuration>
+ <keystore>src/keystore/keystore</keystore>
+ <alias>mykey</alias>
+ <storepass>password</storepass>
+ <keypass>password</keypass>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>sign</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>cobertura-maven-plugin</artifactId>
+ <configuration>
+ <instrumentation>
+ <!-- TODO: should this module have tests? -->
+ <excludes>
+ <exclude>**/**</exclude>
+ </excludes>
+ </instrumentation>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-base/1.0-SNAPSHOT/archiva-base-1.0-SNAPSHOT.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-base/1.0-SNAPSHOT/archiva-base-1.0-SNAPSHOT.pom
new file mode 100644
index 000000000..cd51f1edc
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-base/1.0-SNAPSHOT/archiva-base-1.0-SNAPSHOT.pom
@@ -0,0 +1,42 @@
+<?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.maven.archiva</groupId>
+ <artifactId>archiva-parent</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>archiva-base</artifactId>
+ <name>Archiva Base</name>
+ <packaging>pom</packaging>
+
+ <modules>
+ <module>archiva-common</module>
+ <module>archiva-configuration</module>
+ <module>archiva-consumers</module>
+ <module>archiva-indexer</module>
+ <module>archiva-model</module>
+ <!-- <module>archiva-proxy</module> -->
+ <module>archiva-repository-layer</module>
+ <module>archiva-xml-tools</module>
+ </modules>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-cli/1.0-SNAPSHOT/archiva-cli-1.0-SNAPSHOT.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-cli/1.0-SNAPSHOT/archiva-cli-1.0-SNAPSHOT.pom
new file mode 100644
index 000000000..3041a9f8d
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-cli/1.0-SNAPSHOT/archiva-cli-1.0-SNAPSHOT.pom
@@ -0,0 +1,68 @@
+<?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>
+ <parent>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-parent</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>archiva-cli</artifactId>
+ <name>Archiva Command Line Client</name>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-converter</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-repository-layer</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-cli</artifactId>
+ <version>1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <configuration>
+ <descriptor>src/main/assembly/archiva-cli-assembly.xml</descriptor>
+ <archive>
+ <manifest>
+ <mainClass>org.apache.archiva.cli.ArchivaCli</mainClass>
+ </manifest>
+ </archive>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-common/1.0-SNAPSHOT/archiva-common-1.0-SNAPSHOT.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-common/1.0-SNAPSHOT/archiva-common-1.0-SNAPSHOT.pom
new file mode 100644
index 000000000..17a20abd5
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-common/1.0-SNAPSHOT/archiva-common-1.0-SNAPSHOT.pom
@@ -0,0 +1,98 @@
+<?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>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-base</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>archiva-common</artifactId>
+ <name>Archiva Base :: Common</name>
+ <dependencies>
+ <!-- TO OTHER DEVELOPERS:
+ This module should depend on NO OTHER ARCHIVA MODULES.
+ If you feel tempted to add one, discuss it first in the
+ archiva-dev@maven.apache.org mailing-list.
+ joakime@apache.org
+ -->
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-api</artifactId>
+ </dependency>
+ <!--
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact-manager</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project</artifactId>
+ </dependency>
+ -->
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <!--
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>test-jar</id>
+ <goals>
+ <goal>test-jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ -->
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-maven-plugin</artifactId>
+ <!--
+ <executions>
+ <execution>
+ <id>merge</id>
+ <goals>
+ <goal>merge-descriptors</goal>
+ </goals>
+ <configuration>
+ <descriptors>
+ <descriptor>${basedir}/src/main/resources/META-INF/plexus/components.xml</descriptor>
+ <descriptor>${project.build.directory}/generated-resources/plexus/META-INF/plexus/components.xml</descriptor>
+ </descriptors>
+ </configuration>
+ </execution>
+ </executions>
+ -->
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-configuration/1.0-SNAPSHOT/archiva-configuration-1.0-SNAPSHOT.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-configuration/1.0-SNAPSHOT/archiva-configuration-1.0-SNAPSHOT.pom
new file mode 100644
index 000000000..790d0cfa4
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-configuration/1.0-SNAPSHOT/archiva-configuration-1.0-SNAPSHOT.pom
@@ -0,0 +1,109 @@
+<?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>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-base</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>archiva-configuration</artifactId>
+ <name>Archiva Base :: Configuration</name>
+ <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>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.registry</groupId>
+ <artifactId>plexus-registry-api</artifactId>
+ <version>1.0-alpha-2-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.registry</groupId>
+ <artifactId>plexus-registry-commons</artifactId>
+ <version>1.0-alpha-2-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
+ <!-- Test Deps -->
+ <dependency>
+ <groupId>easymock</groupId>
+ <artifactId>easymock</artifactId>
+ <version>1.2_Java1.3</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <version>1.0-alpha-15-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>java</goal>
+ <goal>registry-reader</goal>
+ <goal>registry-writer</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <version>1.0.0</version>
+ <model>src/main/mdo/configuration.mdo</model>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>cobertura-maven-plugin</artifactId>
+ <configuration>
+ <instrumentation>
+ <!-- exclude generated -->
+ <excludes>
+ <exclude>org/apache/maven/archiva/configuration/io/**</exclude>
+ <exclude>org/apache/maven/archiva/configuration/*RepositoryConfiguration.*</exclude>
+ <exclude>org/apache/maven/archiva/configuration/Configuration.*</exclude>
+ <exclude>org/apache/maven/archiva/configuration/Proxy.*</exclude>
+ </excludes>
+ </instrumentation>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-consumer-api/1.0-SNAPSHOT/archiva-consumer-api-1.0-SNAPSHOT.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-consumer-api/1.0-SNAPSHOT/archiva-consumer-api-1.0-SNAPSHOT.pom
new file mode 100644
index 000000000..f331ed074
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-consumer-api/1.0-SNAPSHOT/archiva-consumer-api-1.0-SNAPSHOT.pom
@@ -0,0 +1,38 @@
+<?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.maven.archiva</groupId>
+ <artifactId>archiva-consumers</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>archiva-consumer-api</artifactId>
+ <name>Archiva Consumer API</name>
+ <packaging>jar</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-model</artifactId>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-consumers/1.0-SNAPSHOT/archiva-consumers-1.0-SNAPSHOT.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-consumers/1.0-SNAPSHOT/archiva-consumers-1.0-SNAPSHOT.pom
new file mode 100644
index 000000000..8969b9ed3
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-consumers/1.0-SNAPSHOT/archiva-consumers-1.0-SNAPSHOT.pom
@@ -0,0 +1,41 @@
+<?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.maven.archiva</groupId>
+ <artifactId>archiva-base</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>archiva-consumers</artifactId>
+ <name>Archiva Consumers</name>
+ <packaging>pom</packaging>
+
+ <modules>
+ <module>archiva-consumer-api</module>
+ <module>archiva-core-consumers</module>
+ <!--
+ <module>archiva-database-consumers</module>
+ <module>archiva-lucene-consumers</module>
+ <module>archiva-signature-consumers</module>
+ -->
+ </modules>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-converter/1.0-SNAPSHOT/archiva-converter-1.0-SNAPSHOT.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-converter/1.0-SNAPSHOT/archiva-converter-1.0-SNAPSHOT.pom
new file mode 100644
index 000000000..49bde7bd2
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-converter/1.0-SNAPSHOT/archiva-converter-1.0-SNAPSHOT.pom
@@ -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 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.apache.maven.archiva</groupId>
+ <artifactId>archiva</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>archiva-converter</artifactId>
+ <name>Archiva Repository Converter</name>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-discoverer</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-model-converter</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-digest</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-i18n</artifactId>
+ <version>1.0-beta-6</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ </dependency>
+ <!-- TEST DEPS -->
+ <dependency>
+ <groupId>hsqldb</groupId>
+ <artifactId>hsqldb</artifactId>
+ <version>1.7.3.3</version>
+ <scope>test</scope>
+ </dependency>
+ <!-- Needed for PlexusTestCase -->
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-core-consumers/1.0-SNAPSHOT/archiva-core-consumers-1.0-SNAPSHOT.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-core-consumers/1.0-SNAPSHOT/archiva-core-consumers-1.0-SNAPSHOT.pom
new file mode 100644
index 000000000..182578f57
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-core-consumers/1.0-SNAPSHOT/archiva-core-consumers-1.0-SNAPSHOT.pom
@@ -0,0 +1,50 @@
+<?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.maven.archiva</groupId>
+ <artifactId>archiva-consumers</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>archiva-core-consumers</artifactId>
+ <name>Archiva Consumers :: Core Consumers</name>
+ <packaging>jar</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-configuration</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-consumer-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-repository-layer</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-digest</artifactId>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-core/1.0-SNAPSHOT/archiva-core-1.0-SNAPSHOT.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-core/1.0-SNAPSHOT/archiva-core-1.0-SNAPSHOT.pom
new file mode 100644
index 000000000..18b98fc7b
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-core/1.0-SNAPSHOT/archiva-core-1.0-SNAPSHOT.pom
@@ -0,0 +1,113 @@
+<?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>archiva</artifactId>
+ <groupId>org.apache.maven.archiva</groupId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>archiva-core</artifactId>
+ <name>Archiva Core</name>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-configuration</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-discoverer</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-proxy</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-reports-standard</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-quartz</artifactId>
+ <version>1.0-alpha-3</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.cache</groupId>
+ <artifactId>plexus-cache-ehcache</artifactId>
+ <version>1.0-alpha-1-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-taskqueue</artifactId>
+ <version>1.0-alpha-6</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.registry</groupId>
+ <artifactId>plexus-registry-commons</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
+ <!-- TEST DEPS -->
+ <dependency>
+ <groupId>hsqldb</groupId>
+ <artifactId>hsqldb</artifactId>
+ <version>1.7.3.3</version>
+ <scope>test</scope>
+ </dependency>
+ <!-- needed for PlexusTestCase -->
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>merge</id>
+ <goals>
+ <goal>merge-descriptors</goal>
+ </goals>
+ <configuration>
+ <descriptors>
+ <descriptor>${basedir}/src/main/resources/META-INF/plexus/components.xml</descriptor>
+ <descriptor>${project.build.directory}/generated-resources/plexus/META-INF/plexus/components.xml</descriptor>
+ </descriptors>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-discoverer/1.0-SNAPSHOT/archiva-discoverer-1.0-SNAPSHOT.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-discoverer/1.0-SNAPSHOT/archiva-discoverer-1.0-SNAPSHOT.pom
new file mode 100644
index 000000000..8a96e39c5
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-discoverer/1.0-SNAPSHOT/archiva-discoverer-1.0-SNAPSHOT.pom
@@ -0,0 +1,65 @@
+<?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>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>archiva-discoverer</artifactId>
+ <name>Archiva Discoverer</name>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-common</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-repository-metadata</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact-manager</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-indexer/1.0-SNAPSHOT/archiva-indexer-1.0-SNAPSHOT.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-indexer/1.0-SNAPSHOT/archiva-indexer-1.0-SNAPSHOT.pom
new file mode 100644
index 000000000..7d77d445f
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-indexer/1.0-SNAPSHOT/archiva-indexer-1.0-SNAPSHOT.pom
@@ -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/maven-v4_0_0.xsd">
+ <parent>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-base</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>archiva-indexer</artifactId>
+ <name>Archiva Base :: Indexer</name>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-configuration</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-model</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.lucene</groupId>
+ <artifactId>lucene-core</artifactId>
+ <version>2.0.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-digest</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>cobertura-maven-plugin</artifactId>
+ <configuration>
+ <check>
+ <!-- TODO: increase coverage -->
+ <totalLineRate>80</totalLineRate>
+ <totalBranchRate>80</totalBranchRate>
+ </check>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-model/1.0-SNAPSHOT/archiva-model-1.0-SNAPSHOT.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-model/1.0-SNAPSHOT/archiva-model-1.0-SNAPSHOT.pom
new file mode 100644
index 000000000..9c9053a3c
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-model/1.0-SNAPSHOT/archiva-model-1.0-SNAPSHOT.pom
@@ -0,0 +1,169 @@
+<?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>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-base</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>archiva-model</artifactId>
+ <name>Archiva Base :: Model</name>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-common</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-test-A</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-test-B</artifactId>
+ <version>${parent.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.jdo</groupId>
+ <artifactId>jdo2-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <version>1.0-alpha-15-SNAPSHOT</version>
+ <configuration>
+ <version>1.0.0</version>
+ <packageWithVersion>false</packageWithVersion>
+ <model>src/main/mdo/archiva-base.xml</model>
+ </configuration>
+ <executions>
+ <execution>
+ <id>archiva-base</id>
+ <goals>
+ <goal>java</goal>
+ <goal>xsd</goal>
+ <goal>jpox-jdo-mapping</goal>
+ <goal>jpox-metadata-class</goal>
+ <!--
+ <goal>xpp3-writer</goal>
+ <goal>xpp3-reader</goal>
+ -->
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>jpox-maven-plugin</artifactId>
+ <version>1.1.6</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <version>10.2.1.6</version>
+ </dependency>
+ </dependencies>
+ <executions>
+ <execution>
+ <id>create-ddl</id>
+ <phase>generate-test-resources</phase>
+ <goals>
+ <goal>schema-create</goal>
+ </goals>
+ <configuration>
+ <outputFile>${basedir}/target/classes/org/apache/maven/archiva/model/schema.ddl</outputFile>
+ <toolProperties>
+ <property>
+ <name>javax.jdo.option.ConnectionDriverName</name>
+ <value>org.apache.derby.jdbc.EmbeddedDriver</value>
+ </property>
+ <property>
+ <name>javax.jdo.option.ConnectionURL</name>
+ <value>jdbc:derby:target/jdo-schema-create;create=true</value>
+ </property>
+ <property>
+ <name>javax.jdo.option.ConnectionUserName</name>
+ <value>sa</value>
+ </property>
+ <property>
+ <name>javax.jdo.option.ConnectionPassword</name>
+ <value></value>
+ </property>
+ <property>
+ <name>log4j.configuration</name>
+ <value>${basedir}/src/test/resources/log4j.xml</value>
+ </property>
+ <property>
+ <name>org.jpox.autoCreateTables</name>
+ <value>true</value>
+ </property>
+ </toolProperties>
+ </configuration>
+ </execution>
+ <execution>
+ <id>enhance</id>
+ <goals>
+ <goal>enhance</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>cobertura-maven-plugin</artifactId>
+ <configuration>
+ <instrumentation>
+ <!-- exclude generated -->
+ <excludes>
+ <exclude>org/apache/maven/archiva/reporting/model/**</exclude>
+ </excludes>
+ </instrumentation>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-parent/1.0-SNAPSHOT/archiva-parent-1.0-SNAPSHOT.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-parent/1.0-SNAPSHOT/archiva-parent-1.0-SNAPSHOT.pom
new file mode 100644
index 000000000..970098384
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-parent/1.0-SNAPSHOT/archiva-parent-1.0-SNAPSHOT.pom
@@ -0,0 +1,566 @@
+<?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.maven</groupId>
+ <artifactId>maven-parent</artifactId>
+ <version>4</version>
+ <relativePath>../pom/maven/pom.xml</relativePath>
+ </parent>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-parent</artifactId>
+ <packaging>pom</packaging>
+ <name>Archiva</name>
+ <version>1.0-SNAPSHOT</version>
+ <description>
+ Archiva is an application for managing one or more remote repositories, including
+ administration, artifact handling,
+ browsing and searching.
+ </description>
+ <url>http://maven.apache.org/archiva</url>
+ <issueManagement>
+ <system>jira</system>
+ <url>http://jira.codehaus.org/browse/MRM</url>
+ </issueManagement>
+ <mailingLists>
+ <mailingList>
+ <name>Maven Archiva User List</name>
+ <subscribe>archiva-users-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>archiva-users-unsubscribe@maven.apache.org</unsubscribe>
+ <post>archiva-users@maven.apache.org</post>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-archiva-users</archive>
+ </mailingList>
+ <mailingList>
+ <name>Maven Archiva Developer List</name>
+ <subscribe>archiva-dev-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>archiva-dev-unsubscribe@maven.apache.org</unsubscribe>
+ <post>archiva-dev@maven.apache.org</post>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-archiva-dev</archive>
+ </mailingList>
+ <mailingList>
+ <name>Maven Archiva Commits List</name>
+ <subscribe>archiva-commits-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>archiva-commits-unsubscribe@maven.apache.org</unsubscribe>
+ <post>archiva-commits@maven.apache.org</post>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-archiva-commits</archive>
+ </mailingList>
+ </mailingLists>
+ <scm>
+ <connection>scm:svn:http://svn.apache.org/repos/asf/maven/archiva/trunk</connection>
+ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/archiva/trunk</developerConnection>
+ <url>http://svn.apache.org/viewcvs.cgi/maven/archiva/trunk</url>
+ </scm>
+ <distributionManagement>
+ <site>
+ <id>apache.website</id>
+ <url>scpexe://people.apache.org/www/maven.apache.org/archiva/</url>
+ </site>
+ </distributionManagement>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-maven-plugin</artifactId>
+ <version>1.3.3</version>
+ <executions>
+ <execution>
+ <id>generate</id>
+ <goals>
+ <goal>descriptor</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.4</source>
+ <target>1.4</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ </plugins>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-idea-plugin</artifactId>
+ <configuration>
+ <jdkLevel>1.4</jdkLevel>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-release-plugin</artifactId>
+ <configuration>
+ <tagBase>https://svn.apache.org/repos/asf/maven/archiva/tags</tagBase>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+ <modules>
+ <module>archiva-api</module>
+ <module>archiva-base</module>
+ <module>archiva-database</module>
+ <module>archiva-reporting</module>
+ <module>archiva-web</module>
+ <module>archiva-cli</module>
+ <module>maven-meeper</module>
+ </modules>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-app-configuration-model</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-app-configuration-web</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ <version>1.0-alpha-18</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-api</artifactId>
+ <version>1.0-alpha-18</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>1.4</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <version>1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-repository-metadata</artifactId>
+ <version>${maven.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ <version>${maven.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact</artifactId>
+ <version>${maven.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact-manager</artifactId>
+ <version>${maven.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project</artifactId>
+ <version>${maven.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-model-converter</artifactId>
+ <version>2.0.5-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-provider-api</artifactId>
+ <version>${wagon.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-ssh</artifactId>
+ <version>${wagon.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-file</artifactId>
+ <version>${wagon.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-http-lightweight</artifactId>
+ <version>${wagon.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-common</artifactId>
+ <version>${archiva.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-core</artifactId>
+ <version>${archiva.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-reports-standard</artifactId>
+ <version>${archiva.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-model</artifactId>
+ <version>${archiva.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-database</artifactId>
+ <version>${archiva.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-consumer-api</artifactId>
+ <version>${archiva.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-model</artifactId>
+ <version>${archiva.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-database</artifactId>
+ <version>${archiva.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-discoverer</artifactId>
+ <version>${archiva.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-repository-layer</artifactId>
+ <version>${archiva.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-indexer</artifactId>
+ <version>${archiva.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-proxy</artifactId>
+ <version>${archiva.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-applet</artifactId>
+ <version>${archiva.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-security</artifactId>
+ <version>${archiva.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-configuration</artifactId>
+ <version>${archiva.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-converter</artifactId>
+ <version>${archiva.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-utils</artifactId>
+ <version>${archiva.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-webapp</artifactId>
+ <version>${archiva.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-digest</artifactId>
+ <version>1.1-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-rbac-profile</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-system</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-system</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-ui-web</artifactId>
+ <version>${plexus-security.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-ui-web-integration</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-ui-web-taglib</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-authentication-provider-user-manager</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-authentication-provider-keystore</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-user-management-api</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-user-management-provider-jdo</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-authorization-rbac-store-cached</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-authorization-rbac-store-jdo</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-authorization-api</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-authorization-rbac-authorizer</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-keys-jdo</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>2.2</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <version>10.1.3.1</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>cobertura-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <artifactId>maven-checkstyle-plugin</artifactId>
+ <configuration>
+ <configLocation>config/maven_checks.xml</configLocation>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>changelog-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>taglist-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jxr-plugin</artifactId>
+ <configuration>
+ <aggregate>true</aggregate>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-surefire-report-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <source>1.4</source>
+ <aggregate>true</aggregate>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-pmd-plugin</artifactId>
+ <!-- TODO: choose appropriate rulesets -->
+ </plugin>
+ </plugins>
+ </reporting>
+ <profiles>
+ <profile>
+ <id>ci</id>
+ <activation>
+ <property>
+ <name>enableCiProfile</name>
+ <value>true</value>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-pmd-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>process-sources</phase>
+ <goals>
+ <!-- TODO: after rules are set
+ <goal>check</goal>
+ -->
+ <goal>cpd-check</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-checkstyle-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>process-sources</phase>
+ <goals>
+ <!-- TODO: reformat first, and correct the checks (some are not consistent with the Maven style)
+ <goal>check</goal>
+ -->
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>cobertura-maven-plugin</artifactId>
+ <configuration>
+ <check>
+ <totalLineRate>77</totalLineRate>
+ <totalBranchRate>95</totalBranchRate>
+ </check>
+
+ <instrumentation>
+ <excludes>
+ <exclude>**/*$*</exclude>
+ </excludes>
+ </instrumentation>
+ </configuration>
+ <executions>
+ <execution>
+ <id>clean</id>
+ <goals>
+ <goal>clean</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>check</id>
+ <goals>
+ <goal>check</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+ <repositories>
+ <repository>
+ <id>codehaus.org</id>
+ <url>http://repository.codehaus.org</url>
+ <releases>
+ <enabled>true</enabled>
+ </releases>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </repository>
+ <!-- TODO: remove once ehcache, p-sec, registry, webdav, xwork, naming released -->
+ <repository>
+ <id>snapshots.codehaus.org</id>
+ <url>http://snapshots.repository.codehaus.org</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </repository>
+ </repositories>
+ <!-- TODO: remove once modello is released -->
+ <pluginRepositories>
+ <pluginRepository>
+ <id>snapshots.codehaus.org</id>
+ <url>http://snapshots.repository.codehaus.org</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </pluginRepository>
+ </pluginRepositories>
+ <properties>
+ <archiva.version>1.0-SNAPSHOT</archiva.version>
+ <maven.version>2.0.5</maven.version>
+ <wagon.version>1.0-beta-2</wagon.version>
+ <plexus-security.version>1.0-alpha-11-SNAPSHOT</plexus-security.version>
+ </properties>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-plexus-application/1.0-SNAPSHOT/archiva-plexus-application-1.0-SNAPSHOT.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-plexus-application/1.0-SNAPSHOT/archiva-plexus-application-1.0-SNAPSHOT.pom
new file mode 100644
index 000000000..21edbff05
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-plexus-application/1.0-SNAPSHOT/archiva-plexus-application-1.0-SNAPSHOT.pom
@@ -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 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>archiva</artifactId>
+ <groupId>org.apache.maven.archiva</groupId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>archiva-plexus-application</artifactId>
+ <packaging>plexus-application</packaging>
+ <name>Archiva Plexus Application</name>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-appserver-maven-plugin</artifactId>
+ <version>2.0-alpha-7</version>
+ <extensions>true</extensions>
+ <configuration>
+ <applicationConfiguration>src/conf/application.xml</applicationConfiguration>
+ <configurationsDirectory>src/conf</configurationsDirectory>
+ <configurationProperties>src/plexus.properties</configurationProperties>
+ <applicationName>archiva</applicationName>
+ <runtimeConfiguration>src/conf/plexus.xml</runtimeConfiguration>
+ <runtimeConfigurationProperties>src/plexus.properties</runtimeConfigurationProperties>
+ <runtimePath>target/plexus-archiva-runtime</runtimePath>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-webapp</artifactId>
+ <type>war</type>
+ </dependency>
+ </dependencies>
+ <!-- For filtering -->
+ <properties>
+ <archivaVersion>${project.version}</archivaVersion>
+ </properties>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-plexus-runtime/1.0-SNAPSHOT/archiva-plexus-runtime-1.0-SNAPSHOT.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-plexus-runtime/1.0-SNAPSHOT/archiva-plexus-runtime-1.0-SNAPSHOT.pom
new file mode 100644
index 000000000..1c675dc62
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-plexus-runtime/1.0-SNAPSHOT/archiva-plexus-runtime-1.0-SNAPSHOT.pom
@@ -0,0 +1,145 @@
+<?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>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>archiva-plexus-runtime</artifactId>
+ <name>Archiva Runtime Generator</name>
+ <dependencies>
+ <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.codehaus.plexus</groupId>
+ <artifactId>plexus-appserver-host</artifactId>
+ <version>2.0-alpha-7</version>
+ </dependency>
+ <!-- Services -->
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-appserver-service-jetty</artifactId>
+ <version>2.0-alpha-7</version>
+ <type>plexus-service</type>
+ </dependency>
+ <!-- Plexus applications -->
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-plexus-application</artifactId>
+ <version>${project.version}</version>
+ <type>plexus-application</type>
+ </dependency>
+
+ <!-- Additional Core Artifacts -->
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>1.2.8</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging-api</artifactId>
+ <version>1.0.4</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-naming</artifactId>
+ <version>1.0-alpha-3-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.mail</groupId>
+ <artifactId>mail</artifactId>
+ <version>1.4</version>
+ <scope>runtime</scope>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-appserver-maven-plugin</artifactId>
+ <version>2.0-alpha-7</version>
+ <extensions>true</extensions>
+ <executions>
+ <execution>
+ <phase>process-resources</phase>
+ <goals>
+ <goal>assemble-runtime</goal>
+ <goal>add-services</goal>
+ <goal>add-apps</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <runtimeConfiguration>src/conf/plexus.xml</runtimeConfiguration>
+ <runtimeConfigurationProperties>src/plexus.properties</runtimeConfigurationProperties>
+ <runtimePath>target/plexus-archiva-runtime</runtimePath>
+ <additionalCoreArtifacts>
+ <additionalCoreArtifact>commons-logging:commons-logging-api</additionalCoreArtifact>
+ <additionalCoreArtifact>log4j:log4j</additionalCoreArtifact>
+ <additionalCoreArtifact>org.apache.derby:derby</additionalCoreArtifact>
+ <additionalCoreArtifact>org.codehaus.plexus:plexus-naming</additionalCoreArtifact>
+ <additionalCoreArtifact>commons-pool:commons-pool</additionalCoreArtifact>
+ <additionalCoreArtifact>commons-dbcp:commons-dbcp</additionalCoreArtifact>
+ <additionalCoreArtifact>commons-collections:commons-collections</additionalCoreArtifact>
+ <additionalCoreArtifact>directory-naming:naming-core</additionalCoreArtifact>
+ <additionalCoreArtifact>directory-naming:naming-factory</additionalCoreArtifact>
+ <additionalCoreArtifact>directory-naming:naming-java</additionalCoreArtifact>
+ <additionalCoreArtifact>directory-naming:naming-config</additionalCoreArtifact>
+ <additionalCoreArtifact>javax.mail:mail</additionalCoreArtifact>
+ <additionalCoreArtifact>javax.activation:activation</additionalCoreArtifact>
+ </additionalCoreArtifacts>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <version>2.1</version>
+ <executions>
+ <execution>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <descriptor>src/main/assembly/bin.xml</descriptor>
+ <finalName>archiva</finalName>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-proxy/1.0-SNAPSHOT/archiva-proxy-1.0-SNAPSHOT.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-proxy/1.0-SNAPSHOT/archiva-proxy-1.0-SNAPSHOT.pom
new file mode 100644
index 000000000..23488ee0a
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-proxy/1.0-SNAPSHOT/archiva-proxy-1.0-SNAPSHOT.pom
@@ -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 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.apache.maven.archiva</groupId>
+ <artifactId>archiva</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>archiva-proxy</artifactId>
+ <name>Archiva Proxy</name>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-common</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-file</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-provider-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-digest</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>easymock</groupId>
+ <artifactId>easymock</artifactId>
+ <version>1.2_Java1.3</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-reports-standard/1.0-SNAPSHOT/archiva-reports-standard-1.0-SNAPSHOT.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-reports-standard/1.0-SNAPSHOT/archiva-reports-standard-1.0-SNAPSHOT.pom
new file mode 100644
index 000000000..24eb19954
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-reports-standard/1.0-SNAPSHOT/archiva-reports-standard-1.0-SNAPSHOT.pom
@@ -0,0 +1,176 @@
+<?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>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>archiva-reports-standard</artifactId>
+ <name>Archiva Standard Reports</name>
+ <dependencies>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact-manager</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-repository-metadata</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-provider-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-repository-layer</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-indexer</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-discoverer</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-jdo2</artifactId>
+ <version>1.0-alpha-8</version>
+ <exclusions>
+ <exclusion>
+ <groupId>xerces</groupId>
+ <artifactId>xercesImpl</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>xerces</groupId>
+ <artifactId>xmlParserAPIs</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>jpox</groupId>
+ <artifactId>jpox</artifactId>
+ <version>1.1.6</version>
+ <scope>compile</scope>
+ <exclusions>
+ <!-- targeting JDK 1.4 we don't need this -->
+ <exclusion>
+ <groupId>javax.sql</groupId>
+ <artifactId>jdbc-stdext</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <!-- TEST DEPS -->
+ <dependency>
+ <groupId>hsqldb</groupId>
+ <artifactId>hsqldb</artifactId>
+ <version>1.7.3.3</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <version>1.0-alpha-14-SNAPSHOT</version>
+ <configuration>
+ <version>1.0.0</version>
+ <packageWithVersion>false</packageWithVersion>
+ <model>src/main/mdo/reporting.mdo</model>
+ </configuration>
+ <executions>
+ <execution>
+ <id>modello-java</id>
+ <goals>
+ <goal>java</goal>
+ <goal>jpox-metadata-class</goal>
+ <!--
+ <goal>xpp3-writer</goal>
+ <goal>xpp3-reader</goal>
+ -->
+ </goals>
+ </execution>
+ <execution>
+ <id>jpox-jdo-mapping</id>
+ <goals>
+ <goal>jpox-jdo-mapping</goal>
+ </goals>
+ <configuration>
+ <outputDirectory>${basedir}/target/classes/org/apache/maven/archiva/reporting/model/</outputDirectory>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>jpox-maven-plugin</artifactId>
+ <version>1.1.6-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>enhance</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>cobertura-maven-plugin</artifactId>
+ <configuration>
+ <instrumentation>
+ <!-- exclude generated -->
+ <excludes>
+ <exclude>org/apache/maven/archiva/reporting/model/**</exclude>
+ </excludes>
+ </instrumentation>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-repository-layer/1.0-SNAPSHOT/archiva-repository-layer-1.0-SNAPSHOT.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-repository-layer/1.0-SNAPSHOT/archiva-repository-layer-1.0-SNAPSHOT.pom
new file mode 100644
index 000000000..6ec87f431
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-repository-layer/1.0-SNAPSHOT/archiva-repository-layer-1.0-SNAPSHOT.pom
@@ -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.
+ -->
+
+<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.apache.maven.archiva</groupId>
+ <artifactId>archiva-base</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>archiva-repository-layer</artifactId>
+ <name>Archiva Repository Interface Layer</name>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-consumer-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-model</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-xml-tools</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.cache</groupId>
+ <artifactId>plexus-cache-api</artifactId>
+ <version>1.0-alpha-2-SNAPSHOT</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.cache</groupId>
+ <artifactId>plexus-cache-ehcache</artifactId>
+ <version>1.0-alpha-2-SNAPSHOT</version>
+ <scope>compile</scope>
+ </dependency>
+ <!--
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact-manager</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-repository-metadata</artifactId>
+ </dependency>
+ -->
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>merge</id>
+ <goals>
+ <goal>merge-descriptors</goal>
+ </goals>
+ <configuration>
+ <descriptors>
+ <descriptor>${basedir}/src/main/resources/META-INF/plexus/components.xml</descriptor>
+ <descriptor>${project.build.directory}/generated-resources/plexus/META-INF/plexus/components.xml</descriptor>
+ </descriptors>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-security/1.0-SNAPSHOT/archiva-security-1.0-SNAPSHOT.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-security/1.0-SNAPSHOT/archiva-security-1.0-SNAPSHOT.pom
new file mode 100644
index 000000000..78cbd1282
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-security/1.0-SNAPSHOT/archiva-security-1.0-SNAPSHOT.pom
@@ -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 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>archiva</artifactId>
+ <groupId>org.apache.maven.archiva</groupId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>archiva-security</artifactId>
+ <name>Archiva Security Configuration</name>
+ <dependencies>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-rbac-profile</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-system</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-api</artifactId>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-webapp/1.0-SNAPSHOT/archiva-webapp-1.0-SNAPSHOT.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-webapp/1.0-SNAPSHOT/archiva-webapp-1.0-SNAPSHOT.pom
new file mode 100644
index 000000000..8304d2dd0
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-webapp/1.0-SNAPSHOT/archiva-webapp-1.0-SNAPSHOT.pom
@@ -0,0 +1,334 @@
+<?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.archiva</groupId>
+ <artifactId>archiva</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <artifactId>archiva-webapp</artifactId>
+ <packaging>war</packaging>
+ <name>Archiva Web Application</name>
+ <dependencies>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <version>2.4</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>jsp-api</artifactId>
+ <version>2.0</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>opensymphony</groupId>
+ <artifactId>sitemesh</artifactId>
+ <version>2.2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>taglibs</groupId>
+ <artifactId>standard</artifactId>
+ <version>1.1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>jstl</artifactId>
+ <version>1.1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-app-configuration-model</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-app-configuration-web</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-log4j-logging</artifactId>
+ <version>1.1-alpha-2</version>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>1.0.4</version>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>2.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-http-lightweight</artifactId>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-file</artifactId>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>opensymphony</groupId>
+ <artifactId>webwork</artifactId>
+ <version>2.2.4</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.registry</groupId>
+ <artifactId>plexus-registry-commons</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-proxy</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-common</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-security</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-applet</artifactId>
+ <!-- TODO: actually, just exclude from WAR plugin -->
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-dependency-tree</artifactId>
+ <version>1.0-alpha-2</version>
+ </dependency>
+ <!-- Plexus Security Dependencies -->
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-ui-web</artifactId>
+ <type>war</type>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-ui-web-taglib</artifactId>
+ </dependency>
+ <!-- Other dependencies -->
+ <dependency>
+ <groupId>org.codehaus.plexus.webdav</groupId>
+ <artifactId>plexus-webdav-simple</artifactId>
+ <version>1.0-alpha-1-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-xwork-integration</artifactId>
+ <version>1.0-alpha-5</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <version>10.1.3.1</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.mail</groupId>
+ <artifactId>mail</artifactId>
+ <version>1.4</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.activation</groupId>
+ <artifactId>activation</artifactId>
+ <version>1.1</version>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-clean-plugin</artifactId>
+ <version>2.1.1</version>
+ <!-- This configuration is added to cleanup from war:inplace -->
+ <configuration>
+ <filesets>
+ <fileset>
+ <directory>${basedir}/src/main/webapp</directory>
+ <includes>
+ <!-- TODO: META-INF shouldn't be required, seems to be an issue with the current war plugin -->
+ <include>META-INF</include>
+ <include>images/pss</include>
+ <!-- Images from other wars -->
+ <include>template/pss</include>
+ <!-- Templates from other wars -->
+ <include>WEB-INF/classes</include>
+ <!-- Classes and Resources from other wars -->
+ <include>WEB-INF/lib</include>
+ <!-- Dependencies from other wars -->
+ <include>WEB-INF/database</include>
+ <!-- Database location configured in application.xml -->
+ <include>WEB-INF/logs</include>
+ <!-- Log file location specified in application.xml -->
+ <include>pss</include>
+ <!-- plexus-security css and javascript -->
+ <include>css/pss</include>
+ <include>WEB-INF/jsp/pss</include>
+ <!-- plexus-security jsps -->
+ <include>WEB-INF/template/pss</include>
+ <!-- plexus-security xwork templates -->
+ <include>WEB-INF/logs</include>
+ <!-- Directory created by jetty:run -->
+ <include>WEB-INF/temp</include>
+ <!-- Directory created by jetty:run -->
+ </includes>
+ </fileset>
+ </filesets>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-war-plugin</artifactId>
+ <version>2.0.1</version>
+ <configuration>
+ <!-- Some versions of maven-war-plugin (snapshots) have this incorrectly defaulted to true.
+ Specifically setting this to false to avoid accidental jar file creation. -->
+ <archiveClasses>false</archiveClasses>
+ <dependentWarExcludes>META-INF/**,WEB-INF/web.xml,WEB-INF/classes/xwork.xml</dependentWarExcludes>
+ </configuration>
+ <!-- TODO: would be good to make the jetty plugin aware of these and remove the below -->
+ <executions>
+ <execution>
+ <phase>compile</phase>
+ <goals>
+ <!-- Needed to get the plexus-security war overlay to do its thing before jetty:run -->
+ <goal>inplace</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>maven-jetty-plugin</artifactId>
+ <version>6.1.1</version>
+ <configuration>
+ <scanIntervalSeconds>10</scanIntervalSeconds>
+ <contextPath>/</contextPath>
+ <jettyEnvXml>src/jetty-env.xml</jettyEnvXml>
+ <connectors>
+ <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
+ <port>9091</port>
+ <maxIdleTime>60000</maxIdleTime>
+ </connector>
+ </connectors>
+ <systemProperties>
+ <systemProperty>
+ <name>appserver.base</name>
+ <value>${project.build.directory}/appserver-base</value>
+ </systemProperty>
+ <systemProperty>
+ <name>derby.system.home</name>
+ <value>${project.build.directory}/appserver-base/logs</value>
+ </systemProperty>
+ </systemProperties>
+ </configuration>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <version>10.1.3.1</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>dependency-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>copy</id>
+ <phase>process-resources</phase>
+ <goals>
+ <goal>copy</goal>
+ </goals>
+ <configuration>
+ <artifactItems>
+ <artifactItem>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>archiva-applet</artifactId>
+ <version>${project.version}</version>
+ <outputDirectory>src/main/webapp</outputDirectory>
+ <destFileName>archiva-applet.jar</destFileName>
+ </artifactItem>
+ </artifactItems>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-maven-plugin</artifactId>
+ <configuration>
+ <roleDefaults>
+ <roleDefault>
+ <role>com.opensymphony.xwork.Action</role>
+ <instantiation-strategy>per-lookup</instantiation-strategy>
+ </roleDefault>
+ </roleDefaults>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>cobertura-maven-plugin</artifactId>
+ <configuration>
+ <instrumentation>
+ <excludes>
+ <exclude>**/**</exclude>
+ </excludes>
+ </instrumentation>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-xml-tools/1.0-SNAPSHOT/archiva-xml-tools-1.0-SNAPSHOT.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-xml-tools/1.0-SNAPSHOT/archiva-xml-tools-1.0-SNAPSHOT.pom
new file mode 100644
index 000000000..efa42d3f0
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-xml-tools/1.0-SNAPSHOT/archiva-xml-tools-1.0-SNAPSHOT.pom
@@ -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 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.apache.maven.archiva</groupId>
+ <artifactId>archiva-base</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>archiva-xml-tools</artifactId>
+ <name>Archiva Base :: XML Tools</name>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-common</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>dom4j</groupId>
+ <artifactId>dom4j</artifactId>
+ <version>1.6.1</version>
+ </dependency>
+ <dependency>
+ <groupId>jaxen</groupId>
+ <artifactId>jaxen</artifactId>
+ <version>1.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ </dependency>
+ </dependencies>
+ <!--
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>merge</id>
+ <goals>
+ <goal>merge-descriptors</goal>
+ </goals>
+ <configuration>
+ <descriptors>
+ <descriptor>${basedir}/src/main/resources/META-INF/plexus/components.xml</descriptor>
+ <descriptor>${project.build.directory}/generated-resources/plexus/META-INF/plexus/components.xml</descriptor>
+ </descriptors>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ -->
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva/1.0-SNAPSHOT/archiva-1.0-20061126.005254-2.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva/1.0-SNAPSHOT/archiva-1.0-20061126.005254-2.pom
new file mode 100644
index 000000000..201905d46
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva/1.0-SNAPSHOT/archiva-1.0-20061126.005254-2.pom
@@ -0,0 +1,505 @@
+<?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.maven</groupId>
+ <artifactId>maven-parent</artifactId>
+ <version>4</version>
+ <relativePath>../pom/maven/pom.xml</relativePath>
+ </parent>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva</artifactId>
+ <packaging>pom</packaging>
+ <name>Archiva</name>
+ <version>1.0-SNAPSHOT</version>
+ <description>
+ Archiva is an application for managing one or more remote repositories, including
+ administration, artifact handling,
+ browsing and searching.
+ </description>
+ <url>http://maven.apache.org/archiva</url>
+ <issueManagement>
+ <system>jira</system>
+ <url>http://jira.codehaus.org/browse/MRM</url>
+ </issueManagement>
+ <mailingLists>
+ <mailingList>
+ <name>Maven Archiva User List</name>
+ <subscribe>archiva-users-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>archiva-users-unsubscribe@maven.apache.org</unsubscribe>
+ <post>archiva-users@maven.apache.org</post>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-archiva-users</archive>
+ </mailingList>
+ <mailingList>
+ <name>Maven Archiva Developer List</name>
+ <subscribe>archiva-dev-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>archiva-dev-unsubscribe@maven.apache.org</unsubscribe>
+ <post>archiva-dev@maven.apache.org</post>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-archiva-dev</archive>
+ </mailingList>
+ <mailingList>
+ <name>Maven Archiva Commits List</name>
+ <subscribe>archiva-commits-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>archiva-commits-unsubscribe@maven.apache.org</unsubscribe>
+ <post>archiva-commits@maven.apache.org</post>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-archiva-commits</archive>
+ </mailingList>
+ </mailingLists>
+ <scm>
+ <connection>scm:svn:http://svn.apache.org/repos/asf/maven/archiva/trunk</connection>
+ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/archiva/trunk</developerConnection>
+ <url>http://svn.apache.org/viewcvs.cgi/maven/archiva/trunk</url>
+ </scm>
+ <distributionManagement>
+ <site>
+ <id>apache.website</id>
+ <url>scpexe://people.apache.org/www/maven.apache.org/archiva/</url>
+ </site>
+ </distributionManagement>
+ <build>
+ <extensions>
+ <extension>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-ssh-external</artifactId>
+ <version>1.0-alpha-5</version>
+ </extension>
+ </extensions>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-maven-plugin</artifactId>
+ <version>1.3</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>descriptor</goal>
+ <goal>merge-descriptors</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.4</source>
+ <target>1.4</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ </plugins>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-idea-plugin</artifactId>
+ <configuration>
+ <jdkLevel>1.4</jdkLevel>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-release-plugin</artifactId>
+ <configuration>
+ <tagBase>https://svn.apache.org/repos/asf/maven/archiva/tags</tagBase>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+ <modules>
+ <module>archiva-applet</module>
+ <module>archiva-converter</module>
+ <module>archiva-discoverer</module>
+ <module>archiva-reports-standard</module>
+ <module>archiva-indexer</module>
+ <module>archiva-webapp</module>
+ <module>archiva-proxy</module>
+ <module>archiva-core</module>
+ <module>archiva-configuration</module>
+ <module>maven-meeper</module>
+ <module>archiva-repository-layer</module>
+ <module>archiva-plexus-application</module>
+ <module>archiva-plexus-runtime</module>
+ <module>archiva-security</module>
+ <module>archiva-cli</module>
+ </modules>
+ <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-10</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>1.3</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-repository-metadata</artifactId>
+ <version>${maven.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ <version>${maven.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact</artifactId>
+ <version>${maven.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact-manager</artifactId>
+ <version>${maven.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project</artifactId>
+ <version>${maven.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model-converter</artifactId>
+ <version>2.0.4</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-provider-api</artifactId>
+ <version>${wagon.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-ssh</artifactId>
+ <version>${wagon.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-file</artifactId>
+ <version>${wagon.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-http-lightweight</artifactId>
+ <version>${wagon.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-core</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-reports-standard</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-discoverer</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-repository-layer</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-indexer</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-proxy</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-applet</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-security</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-configuration</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-converter</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-webapp</artifactId>
+ <version>${pom.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-digest</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-rbac-profile</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-system</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-system</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-ui-web</artifactId>
+ <version>${plexus-security.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-ui-web-integration</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-ui-web-taglib</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-authentication-provider-user-manager</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-authentication-provider-keystore</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-user-management-api</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-user-management-provider-jdo</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-authorization-rbac-store-jdo</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-authorization-api</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-authorization-rbac-authorizer</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-keys-jdo</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>cobertura-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <artifactId>maven-checkstyle-plugin</artifactId>
+ <configuration>
+ <configLocation>config/maven_checks.xml</configLocation>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>changelog-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>taglist-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jxr-plugin</artifactId>
+ <configuration>
+ <aggregate>true</aggregate>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-surefire-report-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <aggregate>true</aggregate>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-pmd-plugin</artifactId>
+ <!-- TODO: choose appropriate rulesets -->
+ </plugin>
+ </plugins>
+ </reporting>
+ <profiles>
+ <profile>
+ <id>ci</id>
+ <activation>
+ <property>
+ <name>enableCiProfile</name>
+ <value>true</value>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-pmd-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>process-sources</phase>
+ <goals>
+ <!-- TODO: after rules are set
+ <goal>check</goal>
+ -->
+ <goal>cpd-check</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-checkstyle-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>process-sources</phase>
+ <goals>
+ <!-- TODO: reformat first, and correct the checks (some are not consistent with the Maven style)
+ <goal>check</goal>
+ -->
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>cobertura-maven-plugin</artifactId>
+ <configuration>
+ <check>
+ <totalLineRate>77</totalLineRate>
+ <totalBranchRate>95</totalBranchRate>
+ </check>
+
+ <instrumentation>
+ <excludes>
+ <exclude>**/*$*</exclude>
+ </excludes>
+ </instrumentation>
+ </configuration>
+ <executions>
+ <execution>
+ <id>clean</id>
+ <goals>
+ <goal>clean</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>check</id>
+ <goals>
+ <goal>check</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+ <!-- TODO: remove once xwork integration, plexus container is released -->
+ <repositories>
+ <repository>
+ <id>codehaus.org</id>
+ <url>http://snapshots.repository.codehaus.org</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </repository>
+ </repositories>
+ <pluginRepositories>
+ <pluginRepository>
+ <id>codehaus.org</id>
+ <url>http://snapshots.repository.codehaus.org</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </pluginRepository>
+
+ <!-- See: http://www.nabble.com/NoClassDefFoundError-from-shared-in-project-info-reports-tf2678299s177.html#a7489595 -->
+ <pluginRepository>
+ <id>apache.org</id>
+ <url>http://people.apache.org/repo/m2-snapshot-repository</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </pluginRepository>
+ </pluginRepositories>
+ <properties>
+ <maven.version>2.0.4</maven.version>
+ <wagon.version>1.0-beta-1</wagon.version>
+ <plexus-security.version>1.0-alpha-6-SNAPSHOT</plexus-security.version>
+ </properties>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva/1.0-SNAPSHOT/archiva-1.0-SNAPSHOT-site.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva/1.0-SNAPSHOT/archiva-1.0-SNAPSHOT-site.xml
new file mode 100644
index 000000000..ac3c2e716
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva/1.0-SNAPSHOT/archiva-1.0-SNAPSHOT-site.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="ISO-8859-1"?><project>
+ <bannerLeft>
+ <name>Maven</name>
+ <src>http://maven.apache.org/images/apache-maven-project-2.png</src>
+ <href>http://maven.apache.org/</href>
+ </bannerLeft>
+ <bannerRight>
+ <src>images/archiva-logo-banner.jpg</src>
+ </bannerRight>
+ <publishDate format="dd MMM yyyy" />
+ <skin>
+ <groupId>org.apache.maven.skins</groupId>
+ <artifactId>maven-stylus-skin</artifactId>
+ </skin>
+ <body>
+ <links>
+ <item name="Maven" href="http://maven.apache.org/" />
+ </links>
+ <menu name="Documentation">
+ <item name="Welcome" href="/index.html" />
+ <item name="Getting Started" href="/guides/getting-started/index.html" />
+ <item name="FAQ" href="http://docs.codehaus.org/display/MAVENUSER/Archiva+FAQ" />
+ <item name="Maven Configuration" href="/guides/getting-started/maven-configuration.html" />
+ <item name="Developing" href="/guides/developing/index.html" />
+ </menu>
+ <menu inherit="bottom" ref="reports" />
+ </body>
+</project> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva/1.0-SNAPSHOT/archiva-1.0-SNAPSHOT.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva/1.0-SNAPSHOT/archiva-1.0-SNAPSHOT.pom
new file mode 100644
index 000000000..31df31eda
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/archiva/archiva/1.0-SNAPSHOT/archiva-1.0-SNAPSHOT.pom
@@ -0,0 +1,556 @@
+<?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.maven</groupId>
+ <artifactId>maven-parent</artifactId>
+ <version>4</version>
+ <relativePath>../pom/maven/pom.xml</relativePath>
+ </parent>
+ <prerequisites>
+ <maven>2.0.5</maven>
+ </prerequisites>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva</artifactId>
+ <packaging>pom</packaging>
+ <name>Archiva</name>
+ <version>1.0-SNAPSHOT</version>
+ <description>
+ Archiva is an application for managing one or more remote repositories, including
+ administration, artifact handling,
+ browsing and searching.
+ </description>
+ <url>http://maven.apache.org/archiva</url>
+ <issueManagement>
+ <system>jira</system>
+ <url>http://jira.codehaus.org/browse/MRM</url>
+ </issueManagement>
+ <mailingLists>
+ <mailingList>
+ <name>Maven Archiva User List</name>
+ <subscribe>archiva-users-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>archiva-users-unsubscribe@maven.apache.org</unsubscribe>
+ <post>archiva-users@maven.apache.org</post>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-archiva-users</archive>
+ </mailingList>
+ <mailingList>
+ <name>Maven Archiva Developer List</name>
+ <subscribe>archiva-dev-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>archiva-dev-unsubscribe@maven.apache.org</unsubscribe>
+ <post>archiva-dev@maven.apache.org</post>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-archiva-dev</archive>
+ </mailingList>
+ <mailingList>
+ <name>Maven Archiva Commits List</name>
+ <subscribe>archiva-commits-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>archiva-commits-unsubscribe@maven.apache.org</unsubscribe>
+ <post>archiva-commits@maven.apache.org</post>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-archiva-commits</archive>
+ </mailingList>
+ </mailingLists>
+ <scm>
+ <connection>scm:svn:http://svn.apache.org/repos/asf/maven/archiva/trunk</connection>
+ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/archiva/trunk</developerConnection>
+ <url>http://svn.apache.org/viewcvs.cgi/maven/archiva/trunk</url>
+ </scm>
+ <distributionManagement>
+ <site>
+ <id>apache.website</id>
+ <url>scpexe://people.apache.org/www/maven.apache.org/archiva/</url>
+ </site>
+ </distributionManagement>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-maven-plugin</artifactId>
+ <version>1.3.3</version>
+ <executions>
+ <execution>
+ <id>generate</id>
+ <goals>
+ <goal>descriptor</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.4</source>
+ <target>1.4</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ </plugins>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-idea-plugin</artifactId>
+ <configuration>
+ <jdkLevel>1.4</jdkLevel>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-release-plugin</artifactId>
+ <configuration>
+ <tagBase>https://svn.apache.org/repos/asf/maven/archiva/tags</tagBase>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+ <modules>
+ <module>archiva-applet</module>
+ <module>archiva-converter</module>
+ <module>archiva-common</module>
+ <module>archiva-discoverer</module>
+ <module>archiva-reports-standard</module>
+ <module>archiva-indexer</module>
+ <module>archiva-webapp</module>
+ <module>archiva-proxy</module>
+ <module>archiva-core</module>
+ <module>archiva-configuration</module>
+ <module>maven-meeper</module>
+ <module>archiva-repository-layer</module>
+ <module>archiva-plexus-application</module>
+ <module>archiva-plexus-runtime</module>
+ <module>archiva-security</module>
+ <module>archiva-cli</module>
+ </modules>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-app-configuration-model</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-app-configuration-web</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ <version>1.0-alpha-17</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-api</artifactId>
+ <version>1.0-alpha-17</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>1.4</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-repository-metadata</artifactId>
+ <version>${maven.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ <version>${maven.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact</artifactId>
+ <version>${maven.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact-manager</artifactId>
+ <version>${maven.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project</artifactId>
+ <version>${maven.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-model-converter</artifactId>
+ <version>2.0.5-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-provider-api</artifactId>
+ <version>${wagon.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-ssh</artifactId>
+ <version>${wagon.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-file</artifactId>
+ <version>${wagon.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-http-lightweight</artifactId>
+ <version>${wagon.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-common</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <!--
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-common</artifactId>
+ <version>${pom.version}</version>
+ <classifier>tests</classifier>
+ <scope>test</scope>
+ </dependency>
+ -->
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-core</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-reports-standard</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-discoverer</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-repository-layer</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-indexer</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-proxy</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-applet</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-security</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-configuration</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-converter</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-utils</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-webapp</artifactId>
+ <version>${pom.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-digest</artifactId>
+ <version>1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-rbac-profile</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-system</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-system</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-ui-web</artifactId>
+ <version>${plexus-security.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-ui-web-integration</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-ui-web-taglib</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-authentication-provider-user-manager</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-authentication-provider-keystore</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-user-management-api</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-user-management-provider-jdo</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-authorization-rbac-store-cached</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-authorization-rbac-store-jdo</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-authorization-api</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-authorization-rbac-authorizer</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.security</groupId>
+ <artifactId>plexus-security-keys-jdo</artifactId>
+ <version>${plexus-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>2.2</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <version>10.1.3.1</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>cobertura-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <artifactId>maven-checkstyle-plugin</artifactId>
+ <configuration>
+ <configLocation>config/maven_checks.xml</configLocation>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>changelog-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>taglist-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jxr-plugin</artifactId>
+ <configuration>
+ <aggregate>true</aggregate>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-surefire-report-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <source>1.4</source>
+ <aggregate>true</aggregate>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-pmd-plugin</artifactId>
+ <!-- TODO: choose appropriate rulesets -->
+ </plugin>
+ </plugins>
+ </reporting>
+ <profiles>
+ <profile>
+ <id>ci</id>
+ <activation>
+ <property>
+ <name>enableCiProfile</name>
+ <value>true</value>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-pmd-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>process-sources</phase>
+ <goals>
+ <!-- TODO: after rules are set
+ <goal>check</goal>
+ -->
+ <goal>cpd-check</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-checkstyle-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>process-sources</phase>
+ <goals>
+ <!-- TODO: reformat first, and correct the checks (some are not consistent with the Maven style)
+ <goal>check</goal>
+ -->
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>cobertura-maven-plugin</artifactId>
+ <configuration>
+ <check>
+ <totalLineRate>77</totalLineRate>
+ <totalBranchRate>95</totalBranchRate>
+ </check>
+
+ <instrumentation>
+ <excludes>
+ <exclude>**/*$*</exclude>
+ </excludes>
+ </instrumentation>
+ </configuration>
+ <executions>
+ <execution>
+ <id>clean</id>
+ <goals>
+ <goal>clean</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>check</id>
+ <goals>
+ <goal>check</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+ <repositories>
+ <repository>
+ <id>codehaus.org</id>
+ <url>http://repository.codehaus.org</url>
+ <releases>
+ <enabled>true</enabled>
+ </releases>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </repository>
+ <!-- TODO: remove once ehcache, p-sec, registry, webdav, xwork, naming released -->
+ <repository>
+ <id>codehaus.org</id>
+ <url>http://snapshots.repository.codehaus.org</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </repository>
+ </repositories>
+ <!-- TODO: remove once modello is released -->
+ <pluginRepositories>
+ <pluginRepository>
+ <id>codehaus.org</id>
+ <url>http://snapshots.repository.codehaus.org</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </pluginRepository>
+ </pluginRepositories>
+ <properties>
+ <maven.version>2.0.5</maven.version>
+ <wagon.version>1.0-beta-2</wagon.version>
+ <plexus-security.version>1.0-alpha-10-SNAPSHOT</plexus-security.version>
+ </properties>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/discovery/1.0/discovery-1.0.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/discovery/1.0/discovery-1.0.pom
new file mode 100644
index 000000000..5a29f6117
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/discovery/1.0/discovery-1.0.pom
@@ -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.
+ -->
+
+<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>discovery</artifactId>
+ <version>1.0</version>
+ <name>Maven Test Repository Artifact Discovery</name>
+ <packaging>pom</packaging>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/maven-metadata.xml
new file mode 100644
index 000000000..8ce7fc7bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/maven-metadata.xml
@@ -0,0 +1,23 @@
+<?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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven</groupId>
+</metadata> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/maven-parent/4/maven-parent-4-site.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/maven-parent/4/maven-parent-4-site.xml
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/maven-parent/4/maven-parent-4-site.xml
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/maven-parent/4/maven-parent-4-site_en.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/maven-parent/4/maven-parent-4-site_en.xml
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/maven-parent/4/maven-parent-4-site_en.xml
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/maven-parent/4/maven-parent-4.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/maven-parent/4/maven-parent-4.pom
new file mode 100644
index 000000000..132d9d736
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/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/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/maven-parent/4/maven-parent-4.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/maven-parent/4/maven-parent-4.pom.sha1
new file mode 100644
index 000000000..b6caacf5e
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/maven-parent/4/maven-parent-4.pom.sha1
@@ -0,0 +1 @@
+0fc039b0bd4d17d7c147a30e1d83994629c5297c \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/samplejar/1.0/samplejar-1.0.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/samplejar/1.0/samplejar-1.0.jar
new file mode 100644
index 000000000..54d190b23
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/samplejar/1.0/samplejar-1.0.jar
@@ -0,0 +1 @@
+dummy content. sample file only.
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/samplejar/1.0/samplejar-1.0.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/samplejar/1.0/samplejar-1.0.pom
new file mode 100644
index 000000000..6ab57d162
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/samplejar/1.0/samplejar-1.0.pom
@@ -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 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>C</artifactId>
+ <version>1.0</version>
+ <name>Maven Test Repository Artifact Discovery</name>
+ <!-- default packaging is jar -->
+ <!--packaging>jar</packaging-->
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/samplejar/2.0/samplejar-2.0.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/samplejar/2.0/samplejar-2.0.jar
new file mode 100644
index 000000000..54d190b23
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/samplejar/2.0/samplejar-2.0.jar
@@ -0,0 +1 @@
+dummy content. sample file only.
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/samplejar/2.0/samplejar-2.0.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/samplejar/2.0/samplejar-2.0.pom
new file mode 100644
index 000000000..a959980df
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/samplejar/2.0/samplejar-2.0.pom
@@ -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 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>C</artifactId>
+ <version>1.0</version>
+ <name>Maven Test Repository Artifact Discovery</name>
+ <!-- specified packaging -->
+ <packaging>jar</packaging>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/samplejar/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/samplejar/maven-metadata.xml
new file mode 100644
index 000000000..89de35f4e
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/samplejar/maven-metadata.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<metadata>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>samplejar</artifactId>
+ <version>6.0-SNAPSHOT</version>
+ <versioning>
+ <release>2.0</release>
+ <latest>6.0-SNAPSHOT</latest>
+ <snapshot>
+ <buildNumber>26</buildNumber>
+ </snapshot>
+ <versions>
+ <version>6.0-SNAPSHOT</version>
+ <version>6.0-20060311.093250-41</version>
+ <version>6.0-20060311.183228-42</version>
+ <version>6.0-20060311.183228-40</version>
+ <version>6.0-20060311.183228-37</version>
+ <version>6.0-20060311.183228-30</version>
+ <version>6.0-20060311.183228-29</version>
+ <version>6.0-20060311.183228-6</version>
+ <version>6.0-20060311.183228-9</version>
+ <version>6.0-20060311.183228-10</version>
+ <version>6.0-20060313.001659-43</version>
+ <version>6.0-20060313.001659-41</version>
+ <version>6.0-20060313.001659-38</version>
+ <version>6.0-20060313.001659-31</version>
+ <version>6.0-20060313.001659-30</version>
+ <version>6.0-20060313.001659-7</version>
+ <version>6.0-20060313.001659-10</version>
+ <version>6.0-20060313.001659-11</version>
+ </versions>
+ <lastUpdated>20060313010719</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-javadoc.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-javadoc.jar
new file mode 100644
index 000000000..ae0cb2e32
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-javadoc.jar
Binary files differ
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-javadoc.jar.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-javadoc.jar.md5
new file mode 100644
index 000000000..15a0630f6
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-javadoc.jar.md5
@@ -0,0 +1 @@
+69af4ffaf5e65d02b6ca50467e79b42a \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-javadoc.jar.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-javadoc.jar.sha1
new file mode 100644
index 000000000..107f46801
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-javadoc.jar.sha1
@@ -0,0 +1 @@
+902005afa0e151d7750735180f692d32fa5d76e2 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-sources.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-sources.jar
new file mode 100644
index 000000000..faa0d98cc
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-sources.jar
Binary files differ
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-sources.jar.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-sources.jar.md5
new file mode 100644
index 000000000..3a84ad832
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-sources.jar.md5
@@ -0,0 +1 @@
+f7d54f505b8affa8a8235e01fbc38219 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-sources.jar.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-sources.jar.sha1
new file mode 100644
index 000000000..3a72dc7bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-sources.jar.sha1
@@ -0,0 +1 @@
+821f8ec6e32c3fecd1b1fb85f83bfea148a86da8 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.jar
new file mode 100644
index 000000000..712c664dd
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.jar
Binary files differ
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.jar.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.jar.md5
new file mode 100644
index 000000000..04d4ce468
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.jar.md5
@@ -0,0 +1 @@
+a2af4d8c1c00d8405ae2074fbcca87aa \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.jar.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.jar.sha1
new file mode 100644
index 000000000..19ae195e0
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.jar.sha1
@@ -0,0 +1 @@
+43dfd03d32f70b8b72cdbefa1678dbeacf9a1f8c \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.pom
new file mode 100644
index 000000000..d3c136b8c
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.pom
@@ -0,0 +1,56 @@
+<?xml version="1.0"?><project>
+ <parent>
+ <artifactId>maven-shared-components</artifactId>
+ <groupId>org.apache.maven.shared</groupId>
+ <version>4</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-downloader</artifactId>
+ <name>Maven Downloader</name>
+ <version>1.0</version>
+ <description>Provide a super simple interface for downloading a single artifact.</description>
+ <url>http://maven.apache.org</url>
+ <scm>
+ <connection>scm:svn:https://svn.apache.org/repos/asf/maven/shared/tags/maven-downloader-1.0</connection>
+ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/shared/tags/maven-downloader-1.0</developerConnection>
+ <url>https://svn.apache.org/repos/asf/maven/shared/tags/maven-downloader-1.0</url>
+ </scm>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-maven-plugin</artifactId>
+ <version>1.1</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>descriptor</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact-manager</artifactId>
+ <version>2.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact</artifactId>
+ <version>2.0</version>
+ </dependency>
+ <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/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.pom.md5
new file mode 100644
index 000000000..89e705b79
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.pom.md5
@@ -0,0 +1 @@
+8ab3c303c12323c469be9beb591f3f12 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.pom.sha1
new file mode 100644
index 000000000..1a75091fa
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.pom.sha1
@@ -0,0 +1 @@
+e4484abb15526e31b8ea514d3ba68e31189c12b0 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-javadoc.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-javadoc.jar
new file mode 100644
index 000000000..3114e1ae6
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-javadoc.jar
Binary files differ
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-javadoc.jar.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-javadoc.jar.md5
new file mode 100644
index 000000000..3f77b9093
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-javadoc.jar.md5
@@ -0,0 +1 @@
+942c2a52f0e38b1e59b12837905d1f25 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-javadoc.jar.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-javadoc.jar.sha1
new file mode 100644
index 000000000..1b0a186fc
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-javadoc.jar.sha1
@@ -0,0 +1 @@
+738d6a8c195613ee689f0a7b8f0c6f194e909473 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-sources.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-sources.jar
new file mode 100644
index 000000000..994054bb4
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-sources.jar
Binary files differ
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-sources.jar.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-sources.jar.md5
new file mode 100644
index 000000000..aada2770b
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-sources.jar.md5
@@ -0,0 +1 @@
+c892f8533031750419c77dc87ed35a3b \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-sources.jar.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-sources.jar.sha1
new file mode 100644
index 000000000..37af4fe89
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-sources.jar.sha1
@@ -0,0 +1 @@
+8aa5027d2688c4540eec9c2b85bbee496f6d4e7c \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.jar
new file mode 100644
index 000000000..ae6638b79
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.jar
Binary files differ
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.jar.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.jar.md5
new file mode 100644
index 000000000..f5c14a937
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.jar.md5
@@ -0,0 +1 @@
+b8e59f5b162f8c0f6ef23d8d249cfed8 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.jar.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.jar.sha1
new file mode 100644
index 000000000..1bcc406e0
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.jar.sha1
@@ -0,0 +1 @@
+923bf441d4ab0d80d45e77576dff86e2b22d2ac4 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.pom
new file mode 100644
index 000000000..db5fe99e7
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.pom
@@ -0,0 +1,56 @@
+<?xml version="1.0"?><project>
+ <parent>
+ <artifactId>maven-shared-components</artifactId>
+ <groupId>org.apache.maven.shared</groupId>
+ <version>4</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-downloader</artifactId>
+ <name>Maven Downloader</name>
+ <version>1.1</version>
+ <description>Provide a super simple interface for downloading a single artifact.</description>
+ <url>http://maven.apache.org</url>
+ <scm>
+ <connection>scm:svn:https://svn.apache.org/repos/asf/maven/shared/tags/maven-downloader-1.1</connection>
+ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/shared/tags/maven-downloader-1.1</developerConnection>
+ <url>https://svn.apache.org/repos/asf/maven/shared/tags/maven-downloader-1.1</url>
+ </scm>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-maven-plugin</artifactId>
+ <version>1.1</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>descriptor</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact-manager</artifactId>
+ <version>2.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact</artifactId>
+ <version>2.0</version>
+ </dependency>
+ <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/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.pom.md5
new file mode 100644
index 000000000..bffe895ee
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.pom.md5
@@ -0,0 +1 @@
+f4d26363c090391c0b8f5a1c4d5c946a \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.pom.sha1
new file mode 100644
index 000000000..fb062b05f
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.pom.sha1
@@ -0,0 +1 @@
+59f81ef23c583f0dd8e7f432ba88595c645e1fc1 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml
new file mode 100644
index 000000000..6fbced025
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<metadata>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-downloader</artifactId>
+ <version>1.0</version>
+ <versioning>
+ <release>1.1</release>
+ <versions>
+ <version>1.0</version>
+ <version>1.1</version>
+ </versions>
+ <lastUpdated>20061212214311</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml.md5
new file mode 100644
index 000000000..354ec6c58
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml.md5
@@ -0,0 +1 @@
+f18235bd6072aa77beb7e01f07905e53 \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml.sha1
new file mode 100644
index 000000000..0ff8edcaf
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml.sha1
@@ -0,0 +1 @@
+7f87ddac6169d99fa54f29bc9a3f7af5a9c8741f \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/some-ejb/1.0/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/some-ejb/1.0/maven-metadata.xml
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/some-ejb/1.0/maven-metadata.xml
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/some-ejb/1.0/some-ejb-1.0-client.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/some-ejb/1.0/some-ejb-1.0-client.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/some-ejb/1.0/some-ejb-1.0-client.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/test/1.0-SNAPSHOT/test-1.0-20050611.112233-1-javadoc.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/test/1.0-SNAPSHOT/test-1.0-20050611.112233-1-javadoc.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/test/1.0-SNAPSHOT/test-1.0-20050611.112233-1-javadoc.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/test/1.0-SNAPSHOT/test-1.0-20050611.112233-1.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/test/1.0-SNAPSHOT/test-1.0-20050611.112233-1.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/test/1.0-SNAPSHOT/test-1.0-20050611.112233-1.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/test/1.0-SNAPSHOT/wrong-artifactId-1.0-20050611.112233-1.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/test/1.0-SNAPSHOT/wrong-artifactId-1.0-20050611.112233-1.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/test/1.0-SNAPSHOT/wrong-artifactId-1.0-20050611.112233-1.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/test/2.0.4-SNAPSHOT/test-2.0.4-SNAPSHOT.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/test/2.0.4-SNAPSHOT/test-2.0.4-SNAPSHOT.pom
new file mode 100644
index 000000000..ca115b505
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/test/2.0.4-SNAPSHOT/test-2.0.4-SNAPSHOT.pom
@@ -0,0 +1,143 @@
+<?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</groupId>
+ <artifactId>test</artifactId>
+ <packaging>pom</packaging>
+ <version>
+ ${prj.ver.maj}.${prj.ver.min}.${prj.ver.inc}${prj.ver.suf}
+ </version>
+
+ <name>Test Archiva</name>
+ <description>
+ ${pom.name} [version ${pom.version}]. Confluence:
+ ${kb.confluence.url}/display/${prj.confluence.path}
+ </description>
+
+ <build>
+ <extensions>
+ <extension>
+ <groupId>org.apache.maven.wagon</groupId>
+
+ <artifactId>wagon-webdav</artifactId>
+ <version>1.0-beta-2</version>
+ </extension>
+ </extensions>
+ </build>
+
+ <issueManagement>
+ <system>jira</system>
+
+ <url>${kb.jira.url}/browse/${prj.jira.key}</url>
+ </issueManagement>
+ <ciManagement>
+ <system>hudson</system>
+ <url>
+ ${kb.hudson.url}/view/${prj.hudson.view.root}
+ -=${prj.svn.branch}=-/
+ </url>
+ </ciManagement>
+ <inceptionYear>2005</inceptionYear>
+
+ <licenses>
+ <license>
+ <name>KB Internal License</name>
+ <distribution>repo</distribution>
+ <comments>This is internal project of KB.</comments>
+ </license>
+ </licenses>
+
+ <organization>
+ <name>KB, a.s.</name>
+ <url>http://www.kb.cz/</url>
+ </organization>
+
+ <properties>
+ <!--
+ - common settings
+ -->
+ <kb.svn.url>http://svn-server/renaissance</kb.svn.url>
+
+ <kb.svn.view.url>http://svn-server/renaissance</kb.svn.view.url>
+ <kb.site.url>http://tools-server/projects</kb.site.url>
+ <kb.site.dir>
+ scp://tools-server/home/tools/var/maven-sites
+ </kb.site.dir>
+ <kb.jira.url>http://jira-server/jira</kb.jira.url>
+ <kb.confluence.url>
+ http://confluence-server/confluence
+ </kb.confluence.url>
+ <kb.hudson.url>http://tools-server/hudson</kb.hudson.url>
+
+ <!-- Project configuration -->
+ <prj.url.root>${pom.groupId}</prj.url.root>
+ <prj.hudson.view.root>${pom.groupId}</prj.hudson.view.root>
+ <prj.svn>${kb.svn.url}/${prj.svn.path}</prj.svn>
+ <prj.svn.tagBase>${prj.svn}/tags</prj.svn.tagBase>
+ <prj.svn.branch>trunk</prj.svn.branch>
+
+ <prj.java.version>1.5</prj.java.version>
+ <prj.source.encoding>UTF-8</prj.source.encoding>
+
+ <!--
+ - Project specific
+ -->
+ <!-- version -->
+ <prj.ver.maj>2</prj.ver.maj>
+ <prj.ver.min>0</prj.ver.min>
+ <prj.ver.inc>4</prj.ver.inc>
+ <prj.ver.suf>-SNAPSHOT</prj.ver.suf><!-- !!! Increase this value after release. -->
+
+ <!-- paths and identificators in external systems -->
+ <prj.url.relative>
+ ${prj.url.root}/${prj.ver.maj}.${prj.ver.min}${prj.ver.suf}
+ </prj.url.relative>
+ <prj.svn.path>test/maven-arch/test-arch</prj.svn.path>
+ <prj.jira.key>TSTARCH</prj.jira.key>
+
+ <prj.confluence.path>TEST/Archiva</prj.confluence.path>
+ </properties>
+
+ <!-- MRM-731 : variable in url pom are not replaced. -->
+ <url>http://j.random.server.com/docs/${project.groupId}/${project.artifactId}/${project.version}</url>
+
+ <scm>
+ <connection>scm:svn:${prj.svn}/${prj.svn.branch}</connection>
+ <developerConnection>
+ scm:svn:${prj.svn}/${prj.svn.branch}
+ </developerConnection>
+
+ <url>${kb.svn.view.url}/${prj.svn.path}/${prj.svn.branch}</url>
+ </scm>
+
+ <distributionManagement>
+ <repository>
+ <id>internal</id>
+ <name>Internal Release Repository</name>
+ <url>
+ dav:http://tools-server/archiva/repository/internal
+ </url>
+
+ <uniqueVersion>false</uniqueVersion>
+ </repository>
+ <snapshotRepository>
+ <id>snapshots</id>
+ <name>Internal Snapshot Repository</name>
+ <url>
+ dav:http://tools-server/archiva/repository/snapshots
+ </url>
+ <uniqueVersion>false</uniqueVersion>
+
+ </snapshotRepository>
+ <site>
+ <id>website</id>
+ <name>Internal Maven Website</name>
+ <url>${kb.site.dir}/${prj.url.relative}</url>
+ </site>
+ </distributionManagement>
+
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/testing/1.0/testing-1.0-sources.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/testing/1.0/testing-1.0-sources.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/testing/1.0/testing-1.0-sources.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/testing/1.0/testing-1.0-test-sources.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/testing/1.0/testing-1.0-test-sources.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/testing/1.0/testing-1.0-test-sources.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/testing/1.0/testing-1.0.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/testing/1.0/testing-1.0.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/testing/1.0/testing-1.0.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/testing/1.0/testing-1.0.tar.gz b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/testing/1.0/testing-1.0.tar.gz
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/testing/1.0/testing-1.0.tar.gz
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/testing/1.0/testing-1.0.zip b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/testing/1.0/testing-1.0.zip
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/testing/1.0/testing-1.0.zip
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/update/test-not-updated/1.0/test-not-updated-1.0.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/update/test-not-updated/1.0/test-not-updated-1.0.jar
new file mode 100644
index 000000000..54d190b23
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/update/test-not-updated/1.0/test-not-updated-1.0.jar
@@ -0,0 +1 @@
+dummy content. sample file only.
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/update/test-not-updated/1.0/test-not-updated-1.0.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/update/test-not-updated/1.0/test-not-updated-1.0.pom
new file mode 100644
index 000000000..452727f28
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/update/test-not-updated/1.0/test-not-updated-1.0.pom
@@ -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 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.update</groupId>
+ <artifactId>test-not-updated</artifactId>
+ <version>1.0</version>
+ <name>Maven Test Repository Artifact Discovery</name>
+ <!-- default packaging is jar -->
+ <!--packaging>jar</packaging-->
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/update/test-not-updated/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/update/test-not-updated/maven-metadata.xml
new file mode 100644
index 000000000..bd56a21c1
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/update/test-not-updated/maven-metadata.xml
@@ -0,0 +1,24 @@
+<?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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.update</groupId>
+ <artifactId>test-not-updated</artifactId>
+</metadata> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/update/test-updated/1.0/test-updated-1.0.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/update/test-updated/1.0/test-updated-1.0.jar
new file mode 100644
index 000000000..54d190b23
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/update/test-updated/1.0/test-updated-1.0.jar
@@ -0,0 +1 @@
+dummy content. sample file only.
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/update/test-updated/1.0/test-updated-1.0.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/update/test-updated/1.0/test-updated-1.0.pom
new file mode 100644
index 000000000..edd7b6479
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/update/test-updated/1.0/test-updated-1.0.pom
@@ -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 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.update</groupId>
+ <artifactId>test-updated</artifactId>
+ <version>1.0</version>
+ <name>Maven Test Repository Artifact Discovery</name>
+ <!-- default packaging is jar -->
+ <!--packaging>jar</packaging-->
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/update/test-updated/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/update/test-updated/maven-metadata.xml
new file mode 100644
index 000000000..86e063ca8
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/maven/update/test-updated/maven-metadata.xml
@@ -0,0 +1,24 @@
+<?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.
+ -->
+
+<metadata>
+ <groupId>org.apache.maven.update</groupId>
+ <artifactId>test-updated</artifactId>
+</metadata> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/testgroup/discovery/1.0/discovery-1.0.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/testgroup/discovery/1.0/discovery-1.0.pom
new file mode 100644
index 000000000..12538e81a
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/testgroup/discovery/1.0/discovery-1.0.pom
@@ -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.
+ -->
+
+<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.testgroup</groupId>
+ <artifactId>discovery</artifactId>
+ <version>1.0</version>
+ <name>Maven Test Repository Artifact Discovery</name>
+ <packaging>pom</packaging>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/testgroup/discovery/1.0/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/testgroup/discovery/1.0/maven-metadata.xml
new file mode 100644
index 000000000..8ee18048c
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/testgroup/discovery/1.0/maven-metadata.xml
@@ -0,0 +1,25 @@
+<?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.
+ -->
+
+<metadata>
+ <groupId>org.apache.testgroup</groupId>
+ <artifactId>discovery</artifactId>
+ <version>1.0</version>
+</metadata> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/testgroup/discovery/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/testgroup/discovery/maven-metadata.xml
new file mode 100644
index 000000000..b024ef7ef
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/org/apache/testgroup/discovery/maven-metadata.xml
@@ -0,0 +1,24 @@
+<?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.
+ -->
+
+<metadata>
+ <groupId>org.apache.testgroup</groupId>
+ <artifactId>discovery</artifactId>
+</metadata> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/test-project/test-project-api/2.4.4/test-project-api-2.4.4.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/test-project/test-project-api/2.4.4/test-project-api-2.4.4.pom
new file mode 100644
index 000000000..fa0c87e5c
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/test-project/test-project-api/2.4.4/test-project-api-2.4.4.pom
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>test-project</groupId>
+ <artifactId>test-project</artifactId>
+ <version>2.4.4</version>
+ </parent>
+ <groupId>test-project</groupId>
+ <artifactId>test-project-api</artifactId>
+ <name>Test Project API</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>javax.activation</groupId>
+ <artifactId>activation</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>stax</groupId>
+ <artifactId>stax-api</artifactId>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-source-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>package</phase>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/test-project/test-project-broker-ejb/2.4.4/test-project-broker-ejb-2.4.4.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/test-project/test-project-broker-ejb/2.4.4/test-project-broker-ejb-2.4.4.pom
new file mode 100644
index 000000000..b333a52d2
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/test-project/test-project-broker-ejb/2.4.4/test-project-broker-ejb-2.4.4.pom
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>test-project</groupId>
+ <artifactId>test-project-broker-pom</artifactId>
+ <version>2.4.4</version>
+ </parent>
+ <artifactId>test-project-broker-ejb</artifactId>
+ <name>Test Project Broker EJB</name>
+ <packaging>ejb</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>test-project</groupId>
+ <artifactId>test-project-common</artifactId>
+ <type>test-jar</type>
+ <version>${pom.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>test-project</groupId>
+ <artifactId>test-project-common</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>test-project</groupId>
+ <artifactId>test-project-api</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-httpclient</groupId>
+ <artifactId>commons-httpclient</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-id</groupId>
+ <artifactId>commons-id</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-discovery</groupId>
+ <artifactId>commons-discovery</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-mock</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.jms</groupId>
+ <artifactId>jms</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.activation</groupId>
+ <artifactId>activation</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.mail</groupId>
+ <artifactId>mail</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.management</groupId>
+ <artifactId>jmxri</artifactId>
+ </dependency>
+ </dependencies>
+
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/test-project/test-project-broker-pom/2.4.4/test-project-broker-pom-2.4.4.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/test-project/test-project-broker-pom/2.4.4/test-project-broker-pom-2.4.4.pom
new file mode 100644
index 000000000..fd5473630
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/test-project/test-project-broker-pom/2.4.4/test-project-broker-pom-2.4.4.pom
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>test-project</groupId>
+ <artifactId>test-project</artifactId>
+ <version>2.4.4</version>
+ </parent>
+ <artifactId>test-project-broker-pom</artifactId>
+ <name>Test Project Broker POM</name>
+ <packaging>pom</packaging>
+
+ <modules>
+ <module>broker-ejb</module>
+ </modules>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/test-project/test-project-common/2.4.4/test-project-common-2.4.4.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/test-project/test-project-common/2.4.4/test-project-common-2.4.4.pom
new file mode 100644
index 000000000..d47958b23
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/test-project/test-project-common/2.4.4/test-project-common-2.4.4.pom
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>test-project</groupId>
+ <artifactId>test-project</artifactId>
+ <version>2.4.4</version>
+ </parent>
+ <groupId>test-project</groupId>
+ <artifactId>test-project-common</artifactId>
+ <name>Test Project Commons</name>
+ <dependencies>
+ <dependency>
+ <groupId>test-project</groupId>
+ <artifactId>test-project-api</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-id</groupId>
+ <artifactId>commons-id</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-discovery</groupId>
+ <artifactId>commons-discovery</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-httpclient</groupId>
+ <artifactId>commons-httpclient</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>stax</groupId>
+ <artifactId>stax-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.woodstox</groupId>
+ <artifactId>wstx-asl</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.castor</groupId>
+ <artifactId>castor</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>xerces</groupId>
+ <artifactId>xerces</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.activation</groupId>
+ <artifactId>activation</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.jms</groupId>
+ <artifactId>jms</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.ejb</groupId>
+ <artifactId>ejb</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.mail</groupId>
+ <artifactId>mail</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.management</groupId>
+ <artifactId>jmxri</artifactId>
+ </dependency>
+ </dependencies>
+
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-source-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>package</phase>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>package</phase>
+ <goals>
+ <goal>test-jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/test-project/test-project-endpoint-ejb/2.4.4/test-project-endpoint-ejb-2.4.4.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/test-project/test-project-endpoint-ejb/2.4.4/test-project-endpoint-ejb-2.4.4.pom
new file mode 100644
index 000000000..582f1e5e1
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/test-project/test-project-endpoint-ejb/2.4.4/test-project-endpoint-ejb-2.4.4.pom
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>test-project</groupId>
+ <artifactId>test-project-endpoint-pom</artifactId>
+ <version>2.4.4</version>
+ </parent>
+ <groupId>test-project</groupId>
+ <artifactId>test-project-endpoint-ejb</artifactId>
+ <name>Test Project Endpoint EJB</name>
+ <packaging>ejb</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>test-project</groupId>
+ <artifactId>test-project-common</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>test-project</groupId>
+ <artifactId>test-project-api</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <!-- for tests only -->
+ <groupId>test-project</groupId>
+ <artifactId>test-project-common</artifactId>
+ <version>${pom.version}</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-id</groupId>
+ <artifactId>commons-id</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-discovery</groupId>
+ <artifactId>commons-discovery</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.jms</groupId>
+ <artifactId>jms</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.activation</groupId>
+ <artifactId>activation</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.mail</groupId>
+ <artifactId>mail</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>xml-apis</groupId>
+ <artifactId>xml-apis</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.management</groupId>
+ <artifactId>jmxri</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ </dependency>
+ </dependencies>
+
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/test-project/test-project-endpoint-pom/2.4.4/test-project-endpoint-pom-2.4.4.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/test-project/test-project-endpoint-pom/2.4.4/test-project-endpoint-pom-2.4.4.pom
new file mode 100644
index 000000000..ea4d6372d
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/test-project/test-project-endpoint-pom/2.4.4/test-project-endpoint-pom-2.4.4.pom
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>test-project</groupId>
+ <artifactId>test-project</artifactId>
+ <version>2.4.4</version>
+ </parent>
+ <artifactId>test-project-endpoint-pom</artifactId>
+ <name>Test Project Endpoint POM</name>
+ <packaging>pom</packaging>
+
+ <modules>
+ <module>endpoint-ejb</module>
+ </modules>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/test-project/test-project/2.4.4/test-project-2.4.4.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/test-project/test-project/2.4.4/test-project-2.4.4.pom
new file mode 100644
index 000000000..6dc471979
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/default-repository/test-project/test-project/2.4.4/test-project-2.4.4.pom
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>test-project</groupId>
+ <artifactId>test-project</artifactId>
+ <name>Test Project</name>
+ <version>2.4.4</version>
+ <packaging>pom</packaging>
+
+ <organization>
+ <name>Company</name>
+ <url>http://www.company.com/</url>
+ </organization>
+ <inceptionYear>2002</inceptionYear>
+
+ <modules>
+ <module>api</module>
+ <module>common</module>
+ <module>broker</module>
+ <module>endpoint</module>
+ </modules>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <dependencyManagement>
+ <dependencies>
+ <!-- common version strategy -->
+ <dependency>
+ <groupId>javax.activation</groupId>
+ <artifactId>activation</artifactId>
+ <version>1.0.2</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.jms</groupId>
+ <artifactId>jms</artifactId>
+ <version>1.0.2</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.ejb</groupId>
+ <artifactId>ejb</artifactId>
+ <version>2.0</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <version>2.4</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.mail</groupId>
+ <artifactId>mail</artifactId>
+ <version>1.4</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>xml-apis</groupId>
+ <artifactId>xml-apis</artifactId>
+ <version>2.0.2</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>1.0.4</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ <version>3.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring</artifactId>
+ <version>2.0.7</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-mock</artifactId>
+ <version>2.0.7</version>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-jdbc</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-web</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>1.2.8</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-discovery</groupId>
+ <artifactId>commons-discovery</artifactId>
+ <version>0.2</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-id</groupId>
+ <artifactId>commons-id</artifactId>
+ <version>0.1-dev</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.castor</groupId>
+ <artifactId>castor</artifactId>
+ <version>1.0.5-xml</version>
+ </dependency>
+ <dependency>
+ <groupId>xerces</groupId>
+ <artifactId>xerces</artifactId>
+ <version>2.4.0</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-httpclient</groupId>
+ <artifactId>commons-httpclient</artifactId>
+ <version>3.1</version>
+ </dependency>
+ <dependency>
+ <groupId>stax</groupId>
+ <artifactId>stax-api</artifactId>
+ <version>1.0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.woodstox</groupId>
+ <artifactId>wstx-asl</artifactId>
+ <version>3.2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>com.thoughtworks.xstream</groupId>
+ <artifactId>xstream</artifactId>
+ <version>1.2.2</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.management</groupId>
+ <artifactId>jmxri</artifactId>
+ <version>1.2.1</version>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/bad_artifact/empty.txt b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/bad_artifact/empty.txt
new file mode 100644
index 000000000..1f855bdb8
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/bad_artifact/empty.txt
@@ -0,0 +1,2 @@
+git svn break to sync empty directories so add an empty file
+
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/include_xml/1.0/include_xml-1.0.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/include_xml/1.0/include_xml-1.0.pom
new file mode 100644
index 000000000..18cd43943
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/include_xml/1.0/include_xml-1.0.pom
@@ -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.archiva.metadata.tests</groupId>
+ <artifactId>include_xml</artifactId>
+ <version>1.0</version>
+ <packaging>xml</packaging>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/include_xml/1.0/include_xml-1.0.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/include_xml/1.0/include_xml-1.0.xml
new file mode 100644
index 000000000..176a50bcf
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/include_xml/1.0/include_xml-1.0.xml
@@ -0,0 +1,2 @@
+<xml />
+ \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/include_xml/1.0/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/include_xml/1.0/maven-metadata.xml
new file mode 100644
index 000000000..624cbdace
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/include_xml/1.0/maven-metadata.xml
@@ -0,0 +1,3 @@
+<metadata>
+
+</metadata> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/incomplete_metadata_a/1.0/incomplete_metadata_a-1.0.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/incomplete_metadata_a/1.0/incomplete_metadata_a-1.0.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/incomplete_metadata_a/1.0/incomplete_metadata_a-1.0.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/incomplete_metadata_a/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/incomplete_metadata_a/maven-metadata.xml
new file mode 100644
index 000000000..5ecf49673
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/incomplete_metadata_a/maven-metadata.xml
@@ -0,0 +1,5 @@
+<metadata>
+ <groupId>org.apache.archiva.metadata.tests</groupId>
+ <artifactId>incomplete_metadata_a</artifactId>
+ <version>1.0</version>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_artifact/1.0-SNAPSHOT/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_artifact/1.0-SNAPSHOT/maven-metadata.xml
new file mode 100644
index 000000000..e8840e709
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_artifact/1.0-SNAPSHOT/maven-metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<metadata>
+ <groupId>org.apache.archiva.metadata.tests</groupId>
+ <artifactId>missing_artifact</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <versioning>
+ <snapshot>
+ <buildNumber>1</buildNumber>
+ <timestamp>20091007.132409</timestamp>
+ </snapshot>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_artifact/1.0-SNAPSHOT/missing_artifact-1.0-20091007.132409-1.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_artifact/1.0-SNAPSHOT/missing_artifact-1.0-20091007.132409-1.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_artifact/1.0-SNAPSHOT/missing_artifact-1.0-20091007.132409-1.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_artifact/1.0-SNAPSHOT/missing_artifact-1.0-20091007.132409-1.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_artifact/1.0-SNAPSHOT/missing_artifact-1.0-20091007.132409-1.pom
new file mode 100644
index 000000000..d2c43abe5
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_artifact/1.0-SNAPSHOT/missing_artifact-1.0-20091007.132409-1.pom
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.archiva.metadata.tests</groupId>
+ <artifactId>missing_artifact</artifactId>
+ <version>1.0-SNAPSHOT</version>
+</project> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_artifact/1.2-SNAPSHOT/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_artifact/1.2-SNAPSHOT/maven-metadata.xml
new file mode 100644
index 000000000..1487bb280
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_artifact/1.2-SNAPSHOT/maven-metadata.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?><metadata>
+ <groupId>org.apache.archiva.metadata.tests</groupId>
+ <artifactId>missing_artifact</artifactId>
+ <version>1.2-SNAPSHOT</version>
+ <versioning>
+ <snapshot>
+ <timestamp>20091011.133751</timestamp>
+ <buildNumber>1</buildNumber>
+ </snapshot>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_artifact/1.2-SNAPSHOT/missing_artifact-1.2-20091011.133751-1.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_artifact/1.2-SNAPSHOT/missing_artifact-1.2-20091011.133751-1.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_artifact/1.2-SNAPSHOT/missing_artifact-1.2-20091011.133751-1.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_artifact/1.2-SNAPSHOT/missing_artifact-1.2-20091011.133751-1.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_artifact/1.2-SNAPSHOT/missing_artifact-1.2-20091011.133751-1.pom
new file mode 100644
index 000000000..f68e5230b
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_artifact/1.2-SNAPSHOT/missing_artifact-1.2-20091011.133751-1.pom
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.archiva.metadata.tests</groupId>
+ <artifactId>missing_artifact</artifactId>
+ <version>1.2-SNAPSHOT</version>
+</project> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_artifact/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_artifact/maven-metadata.xml
new file mode 100644
index 000000000..3867fb5bd
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_artifact/maven-metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?><metadata>
+ <groupId>org.apache.archiva.metadata.tests</groupId>
+ <artifactId>missing_artifact</artifactId>
+ <versioning>
+ <latest>1.2-SNAPSHOT</latest>
+ <versions>
+ <version>1.0-SNAPSHOT</version>
+ <version>1.1-SNAPSHOT</version>
+ <version>1.2-SNAPSHOT</version>
+ </versions>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_metadata_a/1.0/missing_metadata_a-1.0.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_metadata_a/1.0/missing_metadata_a-1.0.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_metadata_a/1.0/missing_metadata_a-1.0.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_metadata_b/1.0.1/missing_metadata_b-1.0.1.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_metadata_b/1.0.1/missing_metadata_b-1.0.1.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_metadata_b/1.0.1/missing_metadata_b-1.0.1.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_metadata_b/1.0/missing_metadata_b-1.0.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_metadata_b/1.0/missing_metadata_b-1.0.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_metadata_b/1.0/missing_metadata_b-1.0.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_metadata_b/2.0-20070821-dev/missing_metadata_b-2.0-20070821-dev.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_metadata_b/2.0-20070821-dev/missing_metadata_b-2.0-20070821-dev.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_metadata_b/2.0-20070821-dev/missing_metadata_b-2.0-20070821-dev.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_metadata_b/2.0.1/missing_metadata_b-2.0.1.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_metadata_b/2.0.1/missing_metadata_b-2.0.1.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_metadata_b/2.0.1/missing_metadata_b-2.0.1.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_metadata_b/2.0/missing_metadata_b-2.0.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_metadata_b/2.0/missing_metadata_b-2.0.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/missing_metadata_b/2.0/missing_metadata_b-2.0.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/1.0/proxied_multi-1.0.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/1.0/proxied_multi-1.0.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/1.0/proxied_multi-1.0.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/1.1/proxied_multi-1.1.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/1.1/proxied_multi-1.1.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/1.1/proxied_multi-1.1.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/2.1/proxied_multi-2.1.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/2.1/proxied_multi-2.1.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/2.1/proxied_multi-2.1.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/maven-metadata-central.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/maven-metadata-central.xml
new file mode 100644
index 000000000..a8b764bd7
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/maven-metadata-central.xml
@@ -0,0 +1,16 @@
+<metadata>
+ <groupId>org.apache.archiva.metadata.tests</groupId>
+ <artifactId>proxied_multi</artifactId>
+ <version>1.0</version>
+ <versioning>
+ <latest>3.1</latest>
+ <release>3.1</release>
+ <versions>
+ <version>1.0</version>
+ <version>1.0.1</version>
+ <version>2.0</version>
+ <version>3.0</version>
+ <version>3.1</version>
+ </versions>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/maven-metadata-java.net.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/maven-metadata-java.net.xml
new file mode 100644
index 000000000..13024c74e
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/maven-metadata-java.net.xml
@@ -0,0 +1,16 @@
+<metadata>
+ <groupId>org.apache.archiva.metadata.tests</groupId>
+ <artifactId>proxied_multi</artifactId>
+ <version>1.0</version>
+ <versioning>
+ <latest>2.0.1</latest>
+ <release>2.0.1</release>
+ <versions>
+ <version>1.0-spec</version>
+ <version>2.0</version>
+ <version>2.0-proposal-beta</version>
+ <version>2.0-spec</version>
+ <version>2.0.1</version>
+ </versions>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/maven-metadata.xml
new file mode 100644
index 000000000..a1e402c94
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/maven-metadata.xml
@@ -0,0 +1,14 @@
+<metadata>
+ <groupId>org.apache.archiva.metadata.tests</groupId>
+ <artifactId>proxied_multi</artifactId>
+ <version>1.0</version>
+ <versioning>
+ <latest>2.1</latest>
+ <release>2.1</release>
+ <versions>
+ <version>1.0</version>
+ <version>1.1</version>
+ <version>2.1</version>
+ </versions>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/maven-metadata-apache-snapshots.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/maven-metadata-apache-snapshots.xml
new file mode 100644
index 000000000..f3e0dbd0a
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/maven-metadata-apache-snapshots.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?><metadata>
+ <groupId>org.apache.archiva.metadata.tests</groupId>
+ <artifactId>snap_shots_a</artifactId>
+ <version>1.0-alpha-11-SNAPSHOT</version>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/maven-metadata-internal-snapshots.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/maven-metadata-internal-snapshots.xml
new file mode 100644
index 000000000..f3e0dbd0a
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/maven-metadata-internal-snapshots.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?><metadata>
+ <groupId>org.apache.archiva.metadata.tests</groupId>
+ <artifactId>snap_shots_a</artifactId>
+ <version>1.0-alpha-11-SNAPSHOT</version>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/maven-metadata-snapshots.codehaus.org.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/maven-metadata-snapshots.codehaus.org.xml
new file mode 100644
index 000000000..f62d4482f
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/maven-metadata-snapshots.codehaus.org.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?><metadata>
+ <groupId>org.apache.archiva.metadata.tests</groupId>
+ <artifactId>snap_shots_a</artifactId>
+ <version>1.0-alpha-11-SNAPSHOT</version>
+ <versioning>
+ <snapshot>
+ <timestamp>20070315.033030</timestamp>
+ <buildNumber>10</buildNumber>
+ </snapshot>
+ <lastUpdated>20070315.033030</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/maven-metadata.xml
new file mode 100644
index 000000000..3265734bd
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/maven-metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?><metadata>
+ <groupId>org.apache.archiva.metadata.tests</groupId>
+ <artifactId>snap_shots_a</artifactId>
+ <version>1.0-alpha-11-SNAPSHOT</version>
+ <versioning>
+ <snapshot />
+ <lastUpdated>20070314163205</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070221.194724-2-javadoc.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070221.194724-2-javadoc.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070221.194724-2-javadoc.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070221.194724-2-sources.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070221.194724-2-sources.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070221.194724-2-sources.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070221.194724-2.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070221.194724-2.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070221.194724-2.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070221.194724-2.war b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070221.194724-2.war
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070221.194724-2.war
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070302.212723-3-sources.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070302.212723-3-sources.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070302.212723-3-sources.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070302.212723-3.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070302.212723-3.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070302.212723-3.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070302.212723-3.war b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070302.212723-3.war
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070302.212723-3.war
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070303.152828-4-sources.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070303.152828-4-sources.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070303.152828-4-sources.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070303.152828-4.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070303.152828-4.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070303.152828-4.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070303.152828-4.war b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070303.152828-4.war
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070303.152828-4.war
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070305.215149-5.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070305.215149-5.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070305.215149-5.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070305.215149-5.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070305.215149-5.pom.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070305.215149-5.pom.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070305.215149-5.war b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070305.215149-5.war
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070305.215149-5.war
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070305.215149-5.war.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070305.215149-5.war.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070305.215149-5.war.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070307.170909-6.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070307.170909-6.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070307.170909-6.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070307.170909-6.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070307.170909-6.pom.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070307.170909-6.pom.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070307.170909-6.war b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070307.170909-6.war
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070307.170909-6.war
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070307.170909-6.war.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070307.170909-6.war.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070307.170909-6.war.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070314.211405-9.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070314.211405-9.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070314.211405-9.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070314.211405-9.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070314.211405-9.pom.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070314.211405-9.pom.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070314.211405-9.war b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070314.211405-9.war
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070314.211405-9.war
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070314.211405-9.war.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070314.211405-9.war.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070314.211405-9.war.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070316.175232-11.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070316.175232-11.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070316.175232-11.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070316.175232-11.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070316.175232-11.pom.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070316.175232-11.pom.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070316.175232-11.war b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070316.175232-11.war
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070316.175232-11.war
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070316.175232-11.war.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070316.175232-11.war.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-20070316.175232-11.war.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-SNAPSHOT-sources.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-SNAPSHOT-sources.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-SNAPSHOT-sources.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-SNAPSHOT.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-SNAPSHOT.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-SNAPSHOT.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-SNAPSHOT.war b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-SNAPSHOT.war
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT/snap_shots_a-1.0-alpha-11-SNAPSHOT.war
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/maven-metadata.xml
new file mode 100644
index 000000000..efda5def5
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/maven-metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?><metadata>
+ <groupId>org.apache.archiva.metadata.tests</groupId>
+ <artifactId>snap_shots_b</artifactId>
+ <version>2.2-SNAPSHOT</version>
+ <versioning>
+ <snapshot>
+ <timestamp>20070316.153953</timestamp>
+ <buildNumber>10</buildNumber>
+ </snapshot>
+ <lastUpdated>20070316153953</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.172940-1.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.172940-1.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.172940-1.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.172940-1.jar.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.172940-1.jar.md5
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.172940-1.jar.md5
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.172940-1.jar.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.172940-1.jar.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.172940-1.jar.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.172940-1.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.172940-1.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.172940-1.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.172940-1.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.172940-1.pom.md5
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.172940-1.pom.md5
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.172940-1.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.172940-1.pom.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.172940-1.pom.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2-sources.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2-sources.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2-sources.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2-sources.jar.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2-sources.jar.md5
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2-sources.jar.md5
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2-sources.jar.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2-sources.jar.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2-sources.jar.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2.jar.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2.jar.md5
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2.jar.md5
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2.jar.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2.jar.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2.jar.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2.pom.md5
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2.pom.md5
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2.pom.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070221.194724-2.pom.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3-sources.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3-sources.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3-sources.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3-sources.jar.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3-sources.jar.md5
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3-sources.jar.md5
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3-sources.jar.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3-sources.jar.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3-sources.jar.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3.jar.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3.jar.md5
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3.jar.md5
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3.jar.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3.jar.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3.jar.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3.pom.md5
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3.pom.md5
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3.pom.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070302.212723-3.pom.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4-sources.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4-sources.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4-sources.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4-sources.jar.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4-sources.jar.md5
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4-sources.jar.md5
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4-sources.jar.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4-sources.jar.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4-sources.jar.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4.jar.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4.jar.md5
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4.jar.md5
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4.jar.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4.jar.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4.jar.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4.pom.md5
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4.pom.md5
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4.pom.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070303.152828-4.pom.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070305.215149-5.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070305.215149-5.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070305.215149-5.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070305.215149-5.jar.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070305.215149-5.jar.md5
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070305.215149-5.jar.md5
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070305.215149-5.jar.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070305.215149-5.jar.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070305.215149-5.jar.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070305.215149-5.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070305.215149-5.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070305.215149-5.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070305.215149-5.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070305.215149-5.pom.md5
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070305.215149-5.pom.md5
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070305.215149-5.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070305.215149-5.pom.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070305.215149-5.pom.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070307.170909-6.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070307.170909-6.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070307.170909-6.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070307.170909-6.jar.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070307.170909-6.jar.md5
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070307.170909-6.jar.md5
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070307.170909-6.jar.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070307.170909-6.jar.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070307.170909-6.jar.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070307.170909-6.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070307.170909-6.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070307.170909-6.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070307.170909-6.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070307.170909-6.pom.md5
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070307.170909-6.pom.md5
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070307.170909-6.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070307.170909-6.pom.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070307.170909-6.pom.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.190911-7.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.190911-7.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.190911-7.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.190911-7.jar.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.190911-7.jar.md5
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.190911-7.jar.md5
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.190911-7.jar.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.190911-7.jar.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.190911-7.jar.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.190911-7.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.190911-7.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.190911-7.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.190911-7.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.190911-7.pom.md5
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.190911-7.pom.md5
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.190911-7.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.190911-7.pom.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.190911-7.pom.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.193642-8.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.193642-8.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.193642-8.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.193642-8.jar.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.193642-8.jar.md5
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.193642-8.jar.md5
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.193642-8.jar.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.193642-8.jar.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.193642-8.jar.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.193642-8.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.193642-8.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.193642-8.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.193642-8.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.193642-8.pom.md5
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.193642-8.pom.md5
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.193642-8.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.193642-8.pom.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.193642-8.pom.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9-javadoc.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9-javadoc.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9-javadoc.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9-javadoc.jar.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9-javadoc.jar.md5
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9-javadoc.jar.md5
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9-javadoc.jar.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9-javadoc.jar.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9-javadoc.jar.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9-sources.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9-sources.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9-sources.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9-sources.jar.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9-sources.jar.md5
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9-sources.jar.md5
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9-sources.jar.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9-sources.jar.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9-sources.jar.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9.jar.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9.jar.md5
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9.jar.md5
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9.jar.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9.jar.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9.jar.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9.pom.md5
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9.pom.md5
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9.pom.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070314.211405-9.pom.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070316.153953-10.jar b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070316.153953-10.jar
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070316.153953-10.jar
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070316.153953-10.jar.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070316.153953-10.jar.md5
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070316.153953-10.jar.md5
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070316.153953-10.jar.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070316.153953-10.jar.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070316.153953-10.jar.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070316.153953-10.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070316.153953-10.pom
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070316.153953-10.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070316.153953-10.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070316.153953-10.pom.md5
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070316.153953-10.pom.md5
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070316.153953-10.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070316.153953-10.pom.sha1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT/snap_shots_b-2.2-20070316.153953-10.pom.sha1
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/META-INF/spring-context.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/META-INF/spring-context.xml
new file mode 100644
index 000000000..5b721190f
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/META-INF/spring-context.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.
+ -->
+
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
+ default-lazy-init="true">
+
+
+
+
+</beans> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-module-a/1.0/test-artifact-module-a-1.0.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-module-a/1.0/test-artifact-module-a-1.0.pom
new file mode 100644
index 000000000..c8db3fb29
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-module-a/1.0/test-artifact-module-a-1.0.pom
@@ -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/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>com.example.test</groupId>
+ <artifactId>test-artifact-root</artifactId>
+ <version>1.0</version>
+ </parent>
+ <artifactId>test-artifact-module-a</artifactId>
+ <packaging>jar</packaging>
+ <name>Test Artifact :: Module A</name>
+ <url>http://maven.apache.org</url>
+ <dependencies>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-module-a/1.0/test-artifact-module-a-1.0.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-module-a/1.0/test-artifact-module-a-1.0.pom.md5
new file mode 100644
index 000000000..40dc44a73
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-module-a/1.0/test-artifact-module-a-1.0.pom.md5
@@ -0,0 +1 @@
+61a4d030260fc6bee0681cf99ba54674 test-artifact-module-a-1.0.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-module-a/1.0/test-artifact-module-a-1.0.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-module-a/1.0/test-artifact-module-a-1.0.pom.sha1
new file mode 100644
index 000000000..59d811196
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-module-a/1.0/test-artifact-module-a-1.0.pom.sha1
@@ -0,0 +1 @@
+6f54bc4223bc39d7880420f66baa3a24d7f9c181 test-artifact-module-a-1.0.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-module-b/1.0/test-artifact-module-b-1.0.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-module-b/1.0/test-artifact-module-b-1.0.pom
new file mode 100644
index 000000000..1ba7d8710
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-module-b/1.0/test-artifact-module-b-1.0.pom
@@ -0,0 +1,20 @@
+<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>com.example.test</groupId>
+ <artifactId>test-snapshot-artifact-root</artifactId>
+ <version>1.1-SNAPSHOT</version>
+ </parent>
+ <artifactId>test-artifact-module-b</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+ <name>Test Artifact :: Module B</name>
+ <url>http://maven.apache.org</url>
+ <dependencies>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-module-b/1.0/test-artifact-module-b-1.0.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-module-b/1.0/test-artifact-module-b-1.0.pom.md5
new file mode 100644
index 000000000..c087db3b9
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-module-b/1.0/test-artifact-module-b-1.0.pom.md5
@@ -0,0 +1 @@
+daa5fa59239b1a81d7c04aea1c235aad test-artifact-module-b-1.0.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-module-b/1.0/test-artifact-module-b-1.0.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-module-b/1.0/test-artifact-module-b-1.0.pom.sha1
new file mode 100644
index 000000000..3315ef896
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-module-b/1.0/test-artifact-module-b-1.0.pom.sha1
@@ -0,0 +1 @@
+3d0a66ad4f202b823feb367c46c7574cbb0301c8 test-artifact-module-b-1.0.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-parent/1/test-artifact-parent-1.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-parent/1/test-artifact-parent-1.pom
new file mode 100644
index 000000000..4a3ebefb0
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-parent/1/test-artifact-parent-1.pom
@@ -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>
+ <groupId>com.example.test</groupId>
+ <artifactId>test-artifact-parent</artifactId>
+ <version>1</version>
+ <packaging>pom</packaging>
+ <name>Test Artifact :: Parent</name>
+ <description>This is the uber parent POM.</description>
+ <url>http://test.com</url>
+ <scm>
+ <connection>scm:svn:http://svn.example.com/repos/test-artifact-parent/trunk</connection>
+ <developerConnection>scm:svn:https://svn.example.com/repos/test-artifact-parent/trunk</developerConnection>
+ <url>http://svn.example.com/repos/test-artifact-parent/trunk</url>
+ </scm>
+ <distributionManagement>
+ <repository>
+ <id>releases</id>
+ <name>Releases Repository</name>
+ <url>http://repo.test.com/archiva/repository/releases</url>
+ </repository>
+ <snapshotRepository>
+ <id>snapshots</id>
+ <name>Snapshots Repository</name>
+ <url>http://repo.test.com/archiva/repository/snapshots</url>
+ </snapshotRepository>
+ </distributionManagement>
+ <developers>
+ <developer>
+ <id>jsmith</id>
+ <name>John Smith</name>
+ <email>jsmith@mail.com</email>
+ </developer>
+ </developers>
+ <licenses>
+ <license>
+ <name>The Apache Software License, Version 2.0</name>
+ <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+ </license>
+ </licenses>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-parent/1/test-artifact-parent-1.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-parent/1/test-artifact-parent-1.pom.md5
new file mode 100644
index 000000000..98587da1d
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-parent/1/test-artifact-parent-1.pom.md5
@@ -0,0 +1 @@
+92c60efe85e23fe5afd8a854cea87209 test-artifact-parent-1.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-parent/1/test-artifact-parent-1.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-parent/1/test-artifact-parent-1.pom.sha1
new file mode 100644
index 000000000..a0bcb35bd
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-parent/1/test-artifact-parent-1.pom.sha1
@@ -0,0 +1 @@
+6eca3509acf66023c29e2bc17f73e79d1d1a341a test-artifact-parent-1.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-root/1.0/test-artifact-root-1.0.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-root/1.0/test-artifact-root-1.0.pom
new file mode 100644
index 000000000..6fe544923
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-root/1.0/test-artifact-root-1.0.pom
@@ -0,0 +1,40 @@
+<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>com.example.test</groupId>
+ <artifactId>test-artifact-parent</artifactId>
+ <version>1</version>
+ </parent>
+ <artifactId>test-artifact-root</artifactId>
+ <version>1.0</version>
+ <packaging>pom</packaging>
+ <name>Test Artifact :: Root</name>
+ <description>This is the Test project.</description>
+ <modules>
+ <module>test-artifact-module-a</module>
+ <module>test-artifact-module-b</module>
+ </modules>
+ <scm>
+ <connection>scm:svn:http://svn.example.com/repos/test-artifact/trunk</connection>
+ <developerConnection>scm:svn:https://svn.example.com/repos/test-artifact/trunk</developerConnection>
+ <url>http://svn.example.com/repos/test-artifact/trunk</url>
+ </scm>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>1.4</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-root/1.0/test-artifact-root-1.0.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-root/1.0/test-artifact-root-1.0.pom.md5
new file mode 100644
index 000000000..8870d46d1
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-root/1.0/test-artifact-root-1.0.pom.md5
@@ -0,0 +1 @@
+034449f8696981edce2485b841a02a47 test-artifact-root-1.0.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-root/1.0/test-artifact-root-1.0.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-root/1.0/test-artifact-root-1.0.pom.sha1
new file mode 100644
index 000000000..eba419703
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-artifact-root/1.0/test-artifact-root-1.0.pom.sha1
@@ -0,0 +1 @@
+bef26aec1a0714cec7fa56cdbb7ebcdb452295eb test-artifact-root-1.0.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-snapshot-artifact-module-a/1.1-SNAPSHOT/test-snapshot-artifact-module-a-1.1-SNAPSHOT.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-snapshot-artifact-module-a/1.1-SNAPSHOT/test-snapshot-artifact-module-a-1.1-SNAPSHOT.pom
new file mode 100644
index 000000000..8250e90ca
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-snapshot-artifact-module-a/1.1-SNAPSHOT/test-snapshot-artifact-module-a-1.1-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>
+ <parent>
+ <groupId>com.example.test</groupId>
+ <artifactId>test-snapshot-artifact-root</artifactId>
+ <version>1.1-SNAPSHOT</version>
+ </parent>
+ <artifactId>test-snapshot-artifact-module-a</artifactId>
+ <packaging>jar</packaging>
+ <name>Test Snapshot Artifact :: Module A</name>
+ <dependencies>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-snapshot-artifact-module-a/1.1-SNAPSHOT/test-snapshot-artifact-module-a-1.1-SNAPSHOT.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-snapshot-artifact-module-a/1.1-SNAPSHOT/test-snapshot-artifact-module-a-1.1-SNAPSHOT.pom.md5
new file mode 100644
index 000000000..a36564b4f
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-snapshot-artifact-module-a/1.1-SNAPSHOT/test-snapshot-artifact-module-a-1.1-SNAPSHOT.pom.md5
@@ -0,0 +1 @@
+3b689a3c3cacecdf4371c342606211f1 test-snapshot-artifact-module-a-1.1-SNAPSHOT.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-snapshot-artifact-module-a/1.1-SNAPSHOT/test-snapshot-artifact-module-a-1.1-SNAPSHOT.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-snapshot-artifact-module-a/1.1-SNAPSHOT/test-snapshot-artifact-module-a-1.1-SNAPSHOT.pom.sha1
new file mode 100644
index 000000000..e9d1ab6f9
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-snapshot-artifact-module-a/1.1-SNAPSHOT/test-snapshot-artifact-module-a-1.1-SNAPSHOT.pom.sha1
@@ -0,0 +1 @@
+b401e87baeeb0174efd85eaf327d9c98efe79cf1 test-snapshot-artifact-module-a-1.1-SNAPSHOT.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-snapshot-artifact-root/1.1-SNAPSHOT/maven-metadata.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-snapshot-artifact-root/1.1-SNAPSHOT/maven-metadata.xml
new file mode 100644
index 000000000..8fa2f8f08
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-snapshot-artifact-root/1.1-SNAPSHOT/maven-metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+ <groupId>com.example.test</groupId>
+ <artifactId>test-snapshot-artifact-root</artifactId>
+ <version>1.1-SNAPSHOT</version>
+ <versioning>
+ <snapshot>
+ <timestamp>20100310.014828</timestamp>
+ <buildNumber>2</buildNumber>
+ </snapshot>
+ <lastUpdated>20100310014828</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-snapshot-artifact-root/1.1-SNAPSHOT/test-snapshot-artifact-root-1.1-20100310.014828-2.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-snapshot-artifact-root/1.1-SNAPSHOT/test-snapshot-artifact-root-1.1-20100310.014828-2.pom
new file mode 100644
index 000000000..75fe8be54
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-snapshot-artifact-root/1.1-SNAPSHOT/test-snapshot-artifact-root-1.1-20100310.014828-2.pom
@@ -0,0 +1,39 @@
+<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>com.example.test</groupId>
+ <artifactId>test-artifact-parent</artifactId>
+ <version>1</version>
+ </parent>
+ <artifactId>test-snapshot-artifact-root</artifactId>
+ <version>1.1-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <name>Test Snapshot Artifact :: Root</name>
+ <description>This is the Test project.</description>
+ <modules>
+ <module>test-snapshot-artifact-module-a</module>
+ </modules>
+ <scm>
+ <connection>scm:svn:http://svn.example.com/repos/test-snapshot-artifact/trunk</connection>
+ <developerConnection>scm:svn:https://svn.example.com/repos/test-snapshot-artifact/trunk</developerConnection>
+ <url>http://svn.example.com/repos/test-snapshot-artifact/trunk</url>
+ </scm>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>1.4</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-snapshot-artifact-root/1.1-SNAPSHOT/test-snapshot-artifact-root-1.1-20100310.014828-2.pom.md5 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-snapshot-artifact-root/1.1-SNAPSHOT/test-snapshot-artifact-root-1.1-20100310.014828-2.pom.md5
new file mode 100644
index 000000000..278e71bca
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-snapshot-artifact-root/1.1-SNAPSHOT/test-snapshot-artifact-root-1.1-20100310.014828-2.pom.md5
@@ -0,0 +1 @@
+0c304367d7a99291eb8292b1fe7114a2 test-snapshot-artifact-root-1.1-20100310.014828-2.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-snapshot-artifact-root/1.1-SNAPSHOT/test-snapshot-artifact-root-1.1-20100310.014828-2.pom.sha1 b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-snapshot-artifact-root/1.1-SNAPSHOT/test-snapshot-artifact-root-1.1-20100310.014828-2.pom.sha1
new file mode 100644
index 000000000..3fe44e181
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/com/example/test/test-snapshot-artifact-root/1.1-SNAPSHOT/test-snapshot-artifact-root-1.1-20100310.014828-2.pom.sha1
@@ -0,0 +1 @@
+e5e6ca9ae3628ae474c155619467848dc900b8cf test-snapshot-artifact-root-1.1-20100310.014828-2.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/commons-io/commons-io/1.4/commons-io-1.4.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/commons-io/commons-io/1.4/commons-io-1.4.pom
new file mode 100644
index 000000000..09abb5a47
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/commons-io/commons-io/1.4/commons-io-1.4.pom
@@ -0,0 +1,419 @@
+<?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 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.apache.commons</groupId>
+ <artifactId>commons-parent</artifactId>
+ <version>7</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>1.4</version>
+ <name>Commons IO</name>
+
+ <inceptionYear>2002</inceptionYear>
+ <description>
+ Commons-IO contains utility classes, stream implementations, file filters, file comparators and endian classes.
+ </description>
+
+ <url>http://commons.apache.org/io/</url>
+
+ <issueManagement>
+ <system>jira</system>
+ <url>http://issues.apache.org/jira/browse/IO</url>
+ </issueManagement>
+
+ <scm>
+ <connection>scm:svn:http://svn.apache.org/repos/asf/commons/proper/io/trunk</connection>
+ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/commons/proper/io/trunk</developerConnection>
+ <url>http://svn.apache.org/viewvc/commons/proper/io/trunk</url>
+ </scm>
+
+ <developers>
+ <developer>
+ <name>Scott Sanders</name>
+ <id>sanders</id>
+ <email>sanders@apache.org</email>
+ <organization></organization>
+ <roles>
+ <role>Java Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>dIon Gillard</name>
+ <id>dion</id>
+ <email>dion@apache.org</email>
+ <organization></organization>
+ <roles>
+ <role>Java Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Nicola Ken Barozzi</name>
+ <id>nicolaken</id>
+ <email>nicolaken@apache.org</email>
+ <organization></organization>
+ <roles>
+ <role>Java Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Henri Yandell</name>
+ <id>bayard</id>
+ <email>bayard@apache.org</email>
+ <organization></organization>
+ <roles>
+ <role>Java Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Stephen Colebourne</name>
+ <id>scolebourne</id>
+ <organization></organization>
+ <roles>
+ <role>Java Developer</role>
+ </roles>
+ <timezone>0</timezone>
+ </developer>
+ <developer>
+ <name>Jeremias Maerki</name>
+ <id>jeremias</id>
+ <email>jeremias@apache.org</email>
+ <organization/>
+ <roles>
+ <role>Java Developer</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <name>Matthew Hawthorne</name>
+ <id>matth</id>
+ <email>matth@apache.org</email>
+ <organization/>
+ <roles>
+ <role>Java Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Martin Cooper</name>
+ <id>martinc</id>
+ <email>martinc@apache.org</email>
+ <organization/>
+ <roles>
+ <role>Java Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Rob Oxspring</name>
+ <id>roxspring</id>
+ <email>roxspring@apache.org</email>
+ <organization/>
+ <roles>
+ <role>Java Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Jochen Wiedmann</name>
+ <id>jochen</id>
+ <email>jochen.wiedmann@gmail.com</email>
+ </developer>
+ <developer>
+ <name>Niall Pemberton</name>
+ <id>niallp</id>
+ <roles>
+ <role>Java Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Jukka Zitting</name>
+ <id>jukka</id>
+ <roles>
+ <role>Java Developer</role>
+ </roles>
+ </developer>
+ </developers>
+
+ <contributors>
+ <contributor>
+ <name>Rahul Akolkar</name>
+ </contributor>
+ <contributor>
+ <name>Jason Anderson</name>
+ </contributor>
+ <contributor>
+ <name>Nathan Beyer</name>
+ </contributor>
+ <contributor>
+ <name>Emmanuel Bourg</name>
+ </contributor>
+ <contributor>
+ <name>Chris Eldredge</name>
+ </contributor>
+ <contributor>
+ <name>Magnus Grimsell</name>
+ </contributor>
+ <contributor>
+ <name>Jim Harrington</name>
+ </contributor>
+ <contributor>
+ <name>Thomas Ledoux</name>
+ </contributor>
+ <contributor>
+ <name>Andy Lehane</name>
+ </contributor>
+ <contributor>
+ <name>Marcelo Liberato</name>
+ </contributor>
+ <contributor>
+ <name>Alban Peignier</name>
+ <email>alban.peignier at free.fr</email>
+ </contributor>
+ <contributor>
+ <name>Ian Springer</name>
+ </contributor>
+ <contributor>
+ <name>Masato Tezuka</name>
+ </contributor>
+ <contributor>
+ <name>James Urie</name>
+ </contributor>
+ <contributor>
+ <name>Frank W. Zammetti</name>
+ </contributor>
+ </contributors>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <sourceDirectory>src/java</sourceDirectory>
+ <testSourceDirectory>src/test</testSourceDirectory>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <includes>
+ <include>**/*Test*</include>
+ </includes>
+ <excludes>
+ <exclude>**/*AbstractTestCase*</exclude>
+ <exclude>**/AllIOTestSuite*</exclude>
+ <exclude>**/PackageTestSuite*</exclude>
+ <exclude>**/testtools/**</exclude>
+
+ <!-- http://jira.codehaus.org/browse/SUREFIRE-44 -->
+ <exclude>**/*$*</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <configuration>
+ <descriptors>
+ <descriptor>src/main/assembly/bin.xml</descriptor>
+ <descriptor>src/main/assembly/src.xml</descriptor>
+ </descriptors>
+ <tarLongFileMode>gnu</tarLongFileMode>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <configuration>
+ <archive>
+ <!--
+ Configure OSGi bundle information
+ (remove when maven bundle plugin is added to commons-parent pom)
+ -->
+ <manifestEntries>
+ <Bundle-SymbolicName>org.apache.commons.io</Bundle-SymbolicName>
+ <Bundle-License>http://www.apache.org/licenses/LICENSE-2.0.txt</Bundle-License>
+ <Bundle-ManifestVersion>2</Bundle-ManifestVersion>
+ <Bundle-Name>Apache Commons IO Bundle</Bundle-Name>
+ <Bundle-Vendor>${project.organization.name}</Bundle-Vendor>
+ <Bundle-Version>${project.version}</Bundle-Version>
+ <Export-Package>
+org.apache.commons.io;version=${project.version},
+org.apache.commons.io.comparator;version=${project.version},
+org.apache.commons.io.filefilter;version=${project.version},
+org.apache.commons.io.input;version=${project.version},
+org.apache.commons.io.output;version=${project.version}
+ </Export-Package>
+ <Import-Package>
+org.apache.commons.io;version=${project.version},
+org.apache.commons.io.comparator;version=${project.version},
+org.apache.commons.io.filefilter;version=${project.version},
+org.apache.commons.io.input;version=${project.version},
+org.apache.commons.io.output;version=${project.version}
+ </Import-Package>
+ </manifestEntries>
+ </archive>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>cobertura-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-changes-plugin</artifactId>
+ <version>2.0-beta-3</version>
+ <configuration>
+ <issueLinkTemplate>%URL%/../%ISSUE%</issueLinkTemplate>
+ <!--
+ JIRA Search parameters:
+ - resolution=1 specifies "Fixed"
+ - fixfor=12312101 specifies "Commons IO version 1.4"
+
+ If/when http://jira.codehaus.org/browse/MCHANGES-92
+ is fixed this will be easier/less messy
+ -->
+ <filter>&amp;&amp;resolution=1&amp;fixfor=12312101</filter>
+ </configuration>
+ <reportSets>
+ <reportSet>
+ <reports>
+ <report>jira-report</report>
+ </reports>
+ </reportSet>
+ </reportSets>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-checkstyle-plugin</artifactId>
+ <version>2.1</version>
+ <configuration>
+ <configLocation>checkstyle.xml</configLocation>
+ <enableRulesSummary>false</enableRulesSummary>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <version>2.3</version>
+ <configuration>
+ <source>1.4</source>
+ <links>
+ <link>http://java.sun.com/j2se/1.4.2/docs/api</link>
+ </links>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>clirr-maven-plugin</artifactId>
+ <version>2.1</version>
+ <configuration>
+ <comparisonVersion>1.3.2</comparisonVersion>
+ <minSeverity>info</minSeverity>
+ </configuration>
+ </plugin>
+ </plugins>
+ </reporting>
+
+ <profiles>
+ <profile>
+ <id>release</id>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-site-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>site</goal>
+ </goals>
+ <phase>package</phase>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <copy todir="${project.build.directory}/site/api-release">
+ <fileset dir="${project.build.directory}/site/apidocs"/>
+ </copy>
+ </tasks>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>attached</goal>
+ </goals>
+ <phase>package</phase>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>rc</id>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-site-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>site</goal>
+ </goals>
+ <phase>package</phase>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>attached</goal>
+ </goals>
+ <phase>package</phase>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/m1-repo-filelist.txt b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/m1-repo-filelist.txt
new file mode 100644
index 000000000..3ddb2c4ce
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/m1-repo-filelist.txt
@@ -0,0 +1,6230 @@
+# Directory listing from people.apache.org
+# of path /www/people.apache.org/repo/m1-ibiblio-rsync-repository
+# Taken September 9, 2007
+#
+# File listing has been filtered using the following sed command.
+#
+# sed -e "/\.md5$/d" -e "/\.sha1$/d" -e "/\.asc$/d" -e "/\.meta$/d" \
+# -e "/LICENSE/d" -e "/\/licenses\//d"
+#
+# Any entries in here that are blatently wrong should be deleted.
+#
+ant/jars/ant-1.4.1.jar
+ant/jars/ant-1.5.1.jar
+ant/jars/ant-1.5.2.jar
+ant/jars/ant-1.5.3-1.jar
+ant/jars/ant-1.5.4.jar
+ant/jars/ant-1.6.3.jar
+ant/jars/ant-1.5.jar
+ant/jars/ant-1.6.1.jar
+ant/jars/ant-1.6.2.jar
+ant/jars/ant-1.6.jar
+ant/jars/ant-1.6.4.jar
+ant/jars/ant-1.6.5.jar
+ant/jars/ant-antlr-1.6.1.jar
+ant/jars/ant-antlr-1.6.2.jar
+ant/jars/ant-antlr-1.6.3.jar
+ant/jars/ant-antlr-1.6.4.jar
+ant/jars/ant-apache-oro-1.6.5.jar
+ant/jars/ant-antlr-1.6.5.jar
+ant/jars/ant-antlr-1.6.jar
+ant/jars/ant-apache-bcel-1.6.2.jar
+ant/jars/ant-apache-bcel-1.6.3.jar
+ant/jars/ant-apache-bcel-1.6.4.jar
+ant/jars/ant-apache-bcel-1.6.5.jar
+ant/jars/ant-apache-bsf-1.6.1.jar
+ant/jars/ant-apache-bsf-1.6.2.jar
+ant/jars/ant-apache-bsf-1.6.3.jar
+ant/jars/ant-apache-bsf-1.6.4.jar
+ant/jars/ant-apache-bsf-1.6.5.jar
+ant/jars/ant-apache-bsf-1.6.jar
+ant/jars/ant-apache-log4j-1.6.2.jar
+ant/jars/ant-apache-log4j-1.6.3.jar
+ant/jars/ant-apache-log4j-1.6.4.jar
+ant/jars/ant-apache-log4j-1.6.5.jar
+ant/jars/ant-apache-oro-1.6.2.jar
+ant/jars/ant-apache-oro-1.6.3.jar
+ant/jars/ant-apache-oro-1.6.4.jar
+ant/jars/ant-apache-regexp-1.6.2.jar
+ant/jars/ant-apache-regexp-1.6.3.jar
+ant/jars/ant-apache-regexp-1.6.4.jar
+ant/jars/ant-apache-regexp-1.6.5.jar
+ant/jars/ant-apache-resolver-1.6.jar
+ant/jars/ant-apache-resolver-1.6.1.jar
+ant/jars/ant-apache-resolver-1.6.2.jar
+ant/jars/ant-apache-resolver-1.6.3.jar
+ant/jars/ant-apache-resolver-1.6.4.jar
+ant/jars/ant-apache-resolver-1.6.5.jar
+ant/jars/ant-commons-logging-1.6.1.jar
+ant/jars/ant-commons-logging-1.6.2.jar
+ant/jars/ant-commons-logging-1.6.3.jar
+ant/jars/ant-commons-logging-1.6.4.jar
+ant/jars/ant-commons-logging-1.6.5.jar
+ant/jars/ant-commons-logging-1.6.jar
+ant/jars/ant-commons-net-1.6.1.jar
+ant/jars/ant-commons-net-1.6.2.jar
+ant/jars/ant-commons-net-1.6.3.jar
+ant/jars/ant-commons-net-1.6.jar
+ant/jars/ant-commons-net-1.6.4.jar
+ant/jars/ant-commons-net-1.6.5.jar
+ant/jars/ant-icontract-1.6.1.jar
+ant/jars/ant-icontract-1.6.2.jar
+ant/jars/ant-icontract-1.6.3.jar
+ant/jars/ant-icontract-1.6.4.jar
+ant/jars/ant-icontract-1.6.5.jar
+ant/jars/ant-icontract-1.6.jar
+ant/jars/ant-jai-1.6.1.jar
+ant/jars/ant-jai-1.6.2.jar
+ant/jars/ant-jai-1.6.3.jar
+ant/jars/ant-jakarta-bcel-1.6.1.jar
+ant/jars/ant-jai-1.6.4.jar
+ant/jars/ant-jai-1.6.5.jar
+ant/jars/ant-jai-1.6.jar
+ant/jars/ant-jakarta-bcel-1.6.jar
+ant/jars/ant-jakarta-log4j-1.6.1.jar
+ant/jars/ant-jakarta-log4j-1.6.jar
+ant/jars/ant-jakarta-oro-1.6.1.jar
+ant/jars/ant-jakarta-oro-1.6.jar
+ant/jars/ant-jakarta-regexp-1.6.1.jar
+ant/jars/ant-jakarta-regexp-1.6.jar
+ant/jars/ant-javamail-1.6.1.jar
+ant/jars/ant-javamail-1.6.2.jar
+ant/jars/ant-javamail-1.6.3.jar
+ant/jars/ant-javamail-1.6.4.jar
+ant/jars/ant-javamail-1.6.5.jar
+ant/jars/ant-javamail-1.6.jar
+ant/jars/ant-jdepend-1.6.1.jar
+ant/jars/ant-jdepend-1.6.2.jar
+ant/jars/ant-jdepend-1.6.jar
+ant/jars/ant-jdepend-1.6.3.jar
+ant/jars/ant-jdepend-1.6.4.jar
+ant/jars/ant-jdepend-1.6.5.jar
+ant/jars/ant-jmf-1.6.1.jar
+ant/jars/ant-jmf-1.6.2.jar
+ant/jars/ant-jmf-1.6.3.jar
+ant/jars/ant-jmf-1.6.4.jar
+ant/jars/ant-jmf-1.6.5.jar
+ant/jars/ant-jmf-1.6.jar
+ant/jars/ant-jsch-1.6.1.jar
+ant/jars/ant-jsch-1.6.2.jar
+ant/jars/ant-jsch-1.6.3.jar
+ant/jars/ant-jsch-1.6.4.jar
+ant/jars/ant-jsch-1.6.5.jar
+ant/jars/ant-jsch-1.6.jar
+ant/jars/ant-junit-1.6.1.jar
+ant/jars/ant-junit-1.6.2.jar
+ant/jars/ant-junit-1.6.3.jar
+ant/jars/ant-junit-1.6.4.jar
+ant/jars/ant-junit-1.6.5.jar
+ant/jars/ant-junit-1.6.jar
+ant/jars/ant-launcher-1.6.1.jar
+ant/jars/ant-launcher-1.6.2.jar
+ant/jars/ant-launcher-1.6.3.jar
+ant/jars/ant-launcher-1.6.4.jar
+ant/jars/ant-launcher-1.6.5.jar
+ant/jars/ant-launcher-1.6.jar
+ant/jars/ant-netrexx-1.6.1.jar
+ant/jars/ant-netrexx-1.6.2.jar
+ant/jars/ant-netrexx-1.6.3.jar
+ant/jars/ant-netrexx-1.6.4.jar
+ant/jars/ant-netrexx-1.6.5.jar
+ant/jars/ant-netrexx-1.6.jar
+ant/jars/ant-nodeps-1.6.1.jar
+ant/jars/ant-nodeps-1.6.2.jar
+ant/jars/ant-nodeps-1.6.3.jar
+ant/jars/ant-nodeps-1.6.4.jar
+ant/jars/ant-nodeps-1.6.5.jar
+ant/jars/ant-nodeps-1.6.jar
+ant/jars/ant-optional-1.4.1.jar
+ant/jars/ant-optional-1.5.1.jar
+ant/jars/ant-optional-1.5.2.jar
+ant/jars/ant-optional-1.5.3-1.jar
+ant/jars/ant-optional-1.5.jar
+ant/jars/ant-starteam-1.6.1.jar
+ant/jars/ant-starteam-1.6.2.jar
+ant/jars/ant-starteam-1.6.3.jar
+ant/jars/ant-starteam-1.6.4.jar
+ant/jars/ant-starteam-1.6.5.jar
+ant/jars/ant-swing-1.6.1.jar
+ant/jars/ant-starteam-1.6.jar
+ant/jars/ant-stylebook-1.6.1.jar
+ant/jars/ant-stylebook-1.6.2.jar
+ant/jars/ant-stylebook-1.6.3.jar
+ant/jars/ant-stylebook-1.6.4.jar
+ant/jars/ant-swing-1.6.5.jar
+ant/jars/ant-stylebook-1.6.5.jar
+ant/jars/ant-stylebook-1.6.jar
+ant/jars/ant-swing-1.6.2.jar
+ant/jars/ant-swing-1.6.3.jar
+ant/jars/ant-swing-1.6.4.jar
+ant/jars/ant-swing-1.6.jar
+ant/jars/ant-trax-1.6.1.jar
+ant/jars/ant-trax-1.6.2.jar
+ant/jars/ant-trax-1.6.3.jar
+ant/jars/ant-trax-1.6.4.jar
+ant/jars/ant-trax-1.6.5.jar
+ant/jars/ant-trax-1.6.jar
+ant/jars/ant-vaj-1.6.1.jar
+ant/jars/ant-vaj-1.6.2.jar
+ant/jars/ant-vaj-1.6.3.jar
+ant/jars/ant-vaj-1.6.4.jar
+ant/jars/ant-vaj-1.6.5.jar
+ant/jars/ant-vaj-1.6.jar
+ant/jars/ant-weblogic-1.6.1.jar
+ant/jars/ant-weblogic-1.6.2.jar
+ant/jars/ant-weblogic-1.6.3.jar
+ant/jars/ant-weblogic-1.6.4.jar
+ant/jars/ant-weblogic-1.6.5.jar
+ant/jars/ant-weblogic-1.6.jar
+ant/jars/ant-xalan1-1.6.1.jar
+ant/jars/ant-xalan1-1.6.2.jar
+ant/jars/ant-xalan1-1.6.3.jar
+ant/jars/ant-xalan1-1.6.4.jar
+ant/jars/ant-xalan1-1.6.5.jar
+ant/jars/ant-xalan1-1.6.jar
+ant/jars/ant-xalan2-1.6.1.jar
+ant/jars/ant-xalan2-1.6.jar
+ant/jars/ant-xslp-1.6.1.jar
+ant/jars/ant-xslp-1.6.2.jar
+ant/jars/ant-xslp-1.6.3.jar
+ant/jars/ant-xslp-1.6.4.jar
+ant/jars/ant-xslp-1.6.5.jar
+ant/jars/ant-xslp-1.6.jar
+ant/jars/optional-1.5.4.jar
+ant-contrib/jars/ant-contrib-20020829.jar
+ant-contrib/jars/cpptasks-20030309.134440.jar
+ant-doxygen/jars/ant-doxygen-1.2.jar
+apache-jaxme/jars/jaxme-incubation-0.2.jar
+apache-jaxme/jars/jaxme-rt-incubation-0.2.jar
+apache-jaxme/jars/jaxmeapi-incubation-0.2.jar
+apache-jaxme/jars/jaxmejs-incubation-0.2.jar
+apache-jaxme/jars/jaxmepm-incubation-0.2.jar
+apache-jaxme/jars/jaxmexs-incubation-0.2.jar
+avalon/jars/avalon-activation-1.0.jar
+avalon/jars/avalon-activation-spi-1.0.jar
+avalon/jars/avalon-assembly-1.0.jar
+avalon/jars/avalon-assembly-spi-1.0.jar
+avalon/jars/avalon-composition-1.0.jar
+avalon/jars/avalon-meta-1.0.jar
+avalon/jars/avalon-composition-spi-1.0.jar
+avalon/jars/avalon-framework-4.1.4.jar
+avalon/jars/avalon-framework-api-4.1.4.jar
+avalon/jars/avalon-logkit-1.2.2.jar
+avalon/jars/avalon-logkit-1.2.jar
+avalon/jars/avalon-meta-spi-1.0.jar
+avalon/jars/avalon-meta-tools-1.0.jar
+avalon-activation/jars/avalon-activation-api-1.0-beta-1-RC1.jar
+avalon-activation/jars/avalon-activation-api-1.0b1.jar
+avalon-activation/jars/avalon-activation-api-1.1-dev.jar
+avalon-activation/jars/avalon-activation-api-1.2-dev.jar
+avalon-activation/jars/avalon-activation-api-1.2.1-dev.jar
+avalon-activation/jars/avalon-activation-api-1.2.1.jar
+avalon-activation/jars/avalon-activation-api-1.2.2.jar
+avalon-activation/jars/avalon-activation-api-2.0-DEV.jar
+avalon-activation/jars/avalon-activation-api-2.0.0.jar
+avalon-activation/jars/avalon-activation-impl-1.0-beta-1-RC1.jar
+avalon-activation/jars/avalon-activation-impl-1.0b1.jar
+avalon-activation/jars/avalon-activation-impl-1.0b2.jar
+avalon-activation/jars/avalon-activation-impl-1.1-dev.jar
+avalon-activation/jars/avalon-activation-impl-1.2-dev.jar
+avalon-activation/jars/avalon-activation-impl-1.2.1-dev.jar
+avalon-activation/jars/avalon-activation-impl-1.2.2-dev.jar
+avalon-activation/jars/avalon-activation-impl-1.2.3-dev.jar
+avalon-activation/jars/avalon-activation-impl-1.2.3.jar
+avalon-activation/jars/avalon-activation-impl-1.2.4.jar
+avalon-activation/jars/avalon-activation-impl-1.2.5.jar
+avalon-activation/jars/avalon-activation-impl-1.2.6.jar
+avalon-activation/jars/avalon-activation-impl-2.0-DEV.jar
+avalon-activation/jars/avalon-activation-impl-2.0.0.jar
+avalon-activation/jars/avalon-activation-spi-1.0-beta-1-RC1.jar
+avalon-activation/jars/avalon-activation-spi-1.0b1.jar
+avalon-activation/jars/avalon-activation-spi-1.1-dev.jar
+avalon-activation/jars/avalon-activation-spi-1.2-dev.jar
+avalon-activation/jars/avalon-activation-spi-1.2.1-dev.jar
+avalon-activation/jars/avalon-activation-spi-1.2.2-dev.jar
+avalon-activation/jars/avalon-activation-spi-1.2.2.jar
+avalon-activation/jars/avalon-activation-spi-2.0-DEV.jar
+avalon-apps/jars/avalon-apps-hsql-0.1.jar
+avalon-apps/jars/avalon-apps-sevak-api-0.1.jar
+avalon-apps/jars/avalon-apps-sevak-jo-0.1.jar
+avalon-composition/jars/avalon-composition-api-1.0-beta-1-RC1.jar
+avalon-composition/jars/avalon-composition-api-1.0b1.jar
+avalon-composition/jars/avalon-composition-api-1.1-dev.jar
+avalon-composition/jars/avalon-composition-api-1.2-dev.jar
+avalon-composition/jars/avalon-composition-api-1.2.1-dev.jar
+avalon-composition/jars/avalon-composition-api-1.2.1.jar
+avalon-composition/jars/avalon-composition-api-1.2.2.jar
+avalon-composition/jars/avalon-composition-api-1.2.3.jar
+avalon-composition/jars/avalon-composition-api-2.0-DEV.jar
+avalon-composition/jars/avalon-composition-api-2.0.0.jar
+avalon-composition/jars/avalon-composition-impl-1.0-beta-1-RC1.jar
+avalon-composition/jars/avalon-composition-impl-1.0b1.jar
+avalon-composition/jars/avalon-composition-impl-1.1-dev.jar
+avalon-composition/jars/avalon-composition-impl-1.2-dev.jar
+avalon-composition/jars/avalon-composition-impl-1.2.1-dev.jar
+avalon-composition/jars/avalon-composition-impl-1.2.2-dev.jar
+avalon-composition/jars/avalon-composition-impl-1.2.2.jar
+avalon-composition/jars/avalon-composition-impl-1.2.3.jar
+avalon-composition/jars/avalon-composition-impl-1.2.4.jar
+avalon-composition/jars/avalon-composition-impl-1.2.5.jar
+avalon-composition/jars/avalon-composition-impl-2.0-DEV.jar
+avalon-composition/jars/avalon-composition-impl-2.0.0.jar
+avalon-composition/jars/avalon-composition-spi-1.0-beta-1-RC1.jar
+avalon-composition/jars/avalon-composition-spi-1.0b1.jar
+avalon-composition/jars/avalon-composition-spi-1.1-dev.jar
+avalon-composition/jars/avalon-composition-spi-1.2-dev.jar
+avalon-composition/jars/avalon-composition-spi-1.2.1-dev.jar
+avalon-composition/jars/avalon-composition-spi-1.2.1.jar
+avalon-composition/jars/avalon-composition-spi-2.0-DEV.jar
+avalon-composition/jars/avalon-composition-spi-2.0.0.jar
+avalon-cornerstone/jars/avalon-cornerstone-4.0.jar
+avalon-extension/jars/avalon-extension-impl-1.0-RC1.jar
+avalon-extension/jars/avalon-extension-impl-1.0.jar
+avalon-extension/jars/avalon-extension-impl-1.1.jar
+avalon-extension/jars/avalon-extension-spi-1.0-RC1.jar
+avalon-extension/jars/avalon-extension-spi-1.0.jar
+avalon-extension/jars/avalon-extension-spi-1.1.jar
+avalon-framework/distributions/avalon-framework-4.1.5-RC3-src.tar.gz
+avalon-framework/distributions/avalon-framework-4.1.5-RC3-src.zip
+avalon-framework/distributions/avalon-framework-4.1.5-RC3.tar.gz
+avalon-framework/distributions/avalon-framework-4.1.5-RC3.zip
+avalon-framework/distributions/avalon-framework-4.1.5.src.tar.gz
+avalon-framework/distributions/avalon-framework-4.1.5.src.zip
+avalon-framework/distributions/avalon-framework-4.1.5.tar.gz
+avalon-framework/distributions/avalon-framework-4.1.5.zip
+avalon-framework/jars/avalon-framework-20020627.jar
+avalon-framework/jars/avalon-framework-4.0.jar
+avalon-framework/jars/avalon-framework-4.1.3.jar
+avalon-framework/jars/avalon-framework-4.1.4.jar
+avalon-framework/jars/avalon-framework-4.1.5-RC2.jar
+avalon-framework/jars/avalon-framework-4.1.5-dev.jar
+avalon-framework/jars/avalon-framework-4.1.5.jar
+avalon-framework/jars/avalon-framework-api-4.1.5-RC2.jar
+avalon-framework/jars/avalon-framework-api-4.1.5-RC3.jar
+avalon-framework/jars/avalon-framework-api-4.1.5-dev.jar
+avalon-framework/jars/avalon-framework-api-4.1.5.jar
+avalon-framework/jars/avalon-framework-api-4.2.0.jar
+avalon-framework/jars/avalon-framework-api-4.3.jar
+avalon-framework/jars/avalon-framework-impl-4.1.5-RC2.jar
+avalon-framework/jars/avalon-framework-impl-4.1.5-RC3.jar
+avalon-framework/jars/avalon-framework-impl-4.1.5-dev.jar
+avalon-framework/jars/avalon-framework-impl-4.1.5.jar
+avalon-framework/jars/avalon-framework-impl-4.2.0.jar
+avalon-framework/jars/avalon-framework-impl-4.3.jar
+avalon-framework/poms/avalon-framework-api-4.3.pom
+avalon-framework/poms/avalon-framework-impl-4.3.pom
+avalon-http/blocks/avalon-http-1.3.block
+avalon-http/jars/avalon-http-api-1.3.jar
+avalon-http/jars/avalon-http-impl-1.3.jar
+avalon-logging/jars/avalon-logging-api-1.0.0.jar
+avalon-logging/jars/avalon-logging-impl-1.0.0.jar
+avalon-logging/jars/avalon-logging-logkit-api-1.0.0.jar
+avalon-logging/jars/avalon-logging-logkit-impl-1.0.0.jar
+avalon-logging/jars/avalon-logging-spi-1.0.0.jar
+avalon-logkit/jars/avalon-logkit-2.0.0.jar
+avalon-logkit/jars/avalon-logkit-2.0.jar
+avalon-logkit/jars/avalon-logkit-2.1.jar
+avalon-logkit/poms/avalon-logkit-2.1.pom
+avalon-meta/distributions/1.1/avalon-meta-1.1-src.tar.gz
+avalon-meta/distributions/1.1/avalon-meta-1.1-src.zip
+avalon-meta/distributions/1.1/avalon-meta-1.1.tar.gz
+avalon-meta/distributions/1.1/avalon-meta-1.1.zip
+avalon-meta/distributions/1.3/avalon-meta-1.3-src.tar.gz.MD5
+avalon-meta/distributions/1.3/avalon-meta-1.3-src.tar.gz
+avalon-meta/distributions/1.3/avalon-meta-1.3-src.zip.MD5
+avalon-meta/distributions/1.3/avalon-meta-1.3-src.zip
+avalon-meta/distributions/1.3/avalon-meta-1.3.tar.gz.MD5
+avalon-meta/distributions/1.3/avalon-meta-1.3.tar.gz
+avalon-meta/distributions/1.3/avalon-meta-1.3.zip.MD5
+avalon-meta/distributions/1.3/avalon-meta-1.3.zip
+avalon-meta/distributions/1.3.1/avalon-meta-1.3.1-src.tar.gz.MD5
+avalon-meta/distributions/1.3.1/avalon-meta-1.3.1-src.tar.gz
+avalon-meta/distributions/1.3.1/avalon-meta-1.3.1-src.zip.MD5
+avalon-meta/distributions/1.3.1/avalon-meta-1.3.1-src.zip
+avalon-meta/distributions/1.3.1/avalon-meta-1.3.1.tar.gz.MD5
+avalon-meta/distributions/1.3.1/avalon-meta-1.3.1.tar.gz
+avalon-meta/distributions/1.3.1/avalon-meta-1.3.1.zip.MD5
+avalon-meta/distributions/1.3.1/avalon-meta-1.3.1.zip
+avalon-meta/jars/avalon-meta-api-1.2.1-dev.jar
+avalon-meta/jars/avalon-meta-api-1.1-RC1.jar
+avalon-meta/jars/avalon-meta-api-1.1.jar
+avalon-meta/jars/avalon-meta-api-1.2-dev.jar
+avalon-meta/jars/avalon-meta-api-1.4.0.jar
+avalon-meta/jars/avalon-meta-api-1.3.jar
+avalon-meta/jars/avalon-meta-spi-1.2.1-dev.jar
+avalon-meta/jars/avalon-meta-impl-1.1-RC1.jar
+avalon-meta/jars/avalon-meta-impl-1.1.jar
+avalon-meta/jars/avalon-meta-impl-1.2-dev.jar
+avalon-meta/jars/avalon-meta-spi-1.2-dev.jar
+avalon-meta/jars/avalon-meta-impl-1.2.1-dev.jar
+avalon-meta/jars/avalon-meta-impl-1.3.1.jar
+avalon-meta/jars/avalon-meta-impl-1.3.jar
+avalon-meta/jars/avalon-meta-impl-1.4.0.jar
+avalon-meta/jars/avalon-meta-plugin-1.1.jar
+avalon-meta/jars/avalon-meta-plugin-1.2.jar
+avalon-meta/jars/avalon-meta-plugin-1.3.1.jar
+avalon-meta/jars/avalon-meta-plugin-1.3.2.jar
+avalon-meta/jars/avalon-meta-plugin-1.3.jar
+avalon-meta/jars/avalon-meta-spi-1.1-RC1.jar
+avalon-meta/jars/avalon-meta-spi-1.1.jar
+avalon-meta/jars/avalon-meta-spi-1.4.0.jar
+avalon-meta/jars/avalon-meta-spi-1.3.jar
+avalon-meta/jars/avalon-meta-tools-1.1-RC1.jar
+avalon-meta/jars/avalon-meta-tools-1.1.jar
+avalon-meta/jars/avalon-meta-tools-1.2-dev.jar
+avalon-meta/jars/avalon-meta-tools-1.2.1-dev.jar
+avalon-meta/jars/avalon-meta-tools-1.3.1.jar
+avalon-meta/jars/avalon-meta-tools-1.3.jar
+avalon-meta/jars/avalon-meta-tools-1.4.0.jar
+avalon-meta/plugins/avalon-meta-plugin-1.3.1.jar
+avalon-meta/plugins/avalon-meta-plugin-1.1.jar
+avalon-meta/plugins/avalon-meta-plugin-1.2.jar
+avalon-meta/plugins/avalon-meta-plugin-1.3.2.jar
+avalon-meta/plugins/avalon-meta-plugin-1.3.jar
+avalon-meta/plugins/avalon-meta-plugin-1.4.0.jar
+avalon-phoenix/jars/avalon-phoenix-bsh-commands-4.0.4.jar
+avalon-phoenix/jars/avalon-phoenix-client-4.0.4.jar
+avalon-phoenix/jars/avalon-phoenix-client-4.0.jar
+avalon-phoenix/jars/avalon-phoenix-engine-4.0.4.jar
+avalon-phoenix/jars/avalon-phoenix-loader-4.0.4.jar
+avalon-phoenix/jars/avalon-phoenix-metagenerate-4.0.jar
+avalon-repository/distributions/1.2/avalon-repository-1.2-src.tar.gz.MD5
+avalon-repository/distributions/1.2/avalon-repository-1.2-src.tar.gz
+avalon-repository/distributions/1.2/avalon-repository-1.2-src.zip.MD5
+avalon-repository/distributions/1.2/avalon-repository-1.2-src.zip
+avalon-repository/distributions/1.2/avalon-repository-1.2.tar.gz.MD5
+avalon-repository/distributions/1.2/avalon-repository-1.2.tar.gz
+avalon-repository/distributions/1.2/avalon-repository-1.2.zip.MD5
+avalon-repository/distributions/1.2/avalon-repository-1.2.zip
+avalon-repository/jars/avalon-repository-api-1.2-dev.jar
+avalon-repository/jars/avalon-repository-api-1.2.jar
+avalon-repository/jars/avalon-repository-api-2.0.0.jar
+avalon-repository/jars/avalon-repository-cli-2.0.0.jar
+avalon-repository/jars/avalon-repository-impl-1.2.jar
+avalon-repository/jars/avalon-repository-impl-1.0-beta-1-RC1.jar
+avalon-repository/jars/avalon-repository-impl-1.0b1.jar
+avalon-repository/jars/avalon-repository-impl-1.1-dev.jar
+avalon-repository/jars/avalon-repository-impl-1.2-dev.jar
+avalon-repository/jars/avalon-repository-impl-2.0.0.jar
+avalon-repository/jars/avalon-repository-main-1.2-dev.jar
+avalon-repository/jars/avalon-repository-main-1.2.jar
+avalon-repository/jars/avalon-repository-main-2.0.0.jar
+avalon-repository/jars/avalon-repository-spi-1.0-beta-1-RC1.jar
+avalon-repository/jars/avalon-repository-spi-1.0b1.jar
+avalon-repository/jars/avalon-repository-spi-1.1-dev.jar
+avalon-repository/jars/avalon-repository-spi-1.2-dev.jar
+avalon-repository/jars/avalon-repository-spi-1.2.jar
+avalon-repository/jars/avalon-repository-spi-2.0.0.jar
+avalon-repository/jars/avalon-repository-util-1.2-dev.jar
+avalon-repository/jars/avalon-repository-util-1.2.jar
+avalon-repository/jars/avalon-repository-util-2.0.0.jar
+avalon-repository/propertiess/repository.properties
+avalon-util/distributions/1.0/avalon-util-1.0-src.tar.gz.MD5
+avalon-util/distributions/1.0/avalon-util-1.0-src.tar.gz
+avalon-util/distributions/1.0/avalon-util-1.0-src.zip.MD5
+avalon-util/distributions/1.0/avalon-util-1.0-src.zip
+avalon-util/distributions/1.0/avalon-util-1.0.tar.gz.MD5
+avalon-util/distributions/1.0/avalon-util-1.0.tar.gz
+avalon-util/distributions/1.0/avalon-util-1.0.zip.MD5
+avalon-util/distributions/1.0/avalon-util-1.0.zip
+avalon-util/jars/avalon-util-criteria-1.0-dev.jar
+avalon-util/jars/avalon-plugin-1.0-dev.jar
+avalon-util/jars/avalon-plugin-1.0.jar
+avalon-util/jars/avalon-util-criteria-1.0.jar
+avalon-util/jars/avalon-util-criteria-1.1.0.jar
+avalon-util/jars/avalon-util-defaults-1.0-dev.jar
+avalon-util/jars/avalon-util-defaults-1.1-dev.jar
+avalon-util/jars/avalon-util-defaults-1.1.jar
+avalon-util/jars/avalon-util-defaults-1.2.1.jar
+avalon-util/jars/avalon-util-env-1.0-dev.jar
+avalon-util/jars/avalon-util-env-1.0.jar
+avalon-util/jars/avalon-util-env-1.1.1.jar
+avalon-util/jars/avalon-util-exception-1.0-dev.jar
+avalon-util/jars/avalon-util-exception-1.0.0.jar
+avalon-util/jars/avalon-util-exception-1.0.jar
+avalon-util/jars/avalon-util-extension-api-1.2.0.jar
+avalon-util/jars/avalon-util-extension-impl-1.2.0.jar
+avalon-util/jars/avalon-util-i18n-1.0.0.jar
+avalon-util/plugins/avalon-util-plugin-1.0.0.jar
+avalon-util/plugins/avalon-plugin-1.0-dev.jar
+avalon-util/plugins/avalon-plugin-1.0.jar
+axis/jars/axis-1.0.jar
+axis/jars/axis-1.1-beta.jar
+axis/jars/axis-1.1.jar
+axis/jars/axis-1.2-RC1.jar
+axis/jars/axis-1.2-RC2.jar
+axis/jars/axis-1.2-RC3.jar
+axis/jars/axis-1.2-beta-2.jar
+axis/jars/axis-1.2-alpha-1.jar
+axis/jars/axis-1.2-beta-3.jar
+axis/jars/axis-1.2.1.jar
+axis/jars/axis-1.2.jar
+axis/jars/axis-1.3.jar
+axis/jars/axis-1.4.jar
+axis/jars/axis-1.4.jar.sha
+axis/jars/axis-ant-1.1.jar
+axis/jars/axis-ant-1.2-RC1.jar
+axis/jars/axis-ant-1.2.1.jar
+axis/jars/axis-ant-1.2-RC2.jar
+axis/jars/axis-ant-1.2-RC3.jar
+axis/jars/axis-ant-1.2-beta-2.jar
+axis/jars/axis-ant-1.2-beta-3.jar
+axis/jars/axis-ant-1.2.jar
+axis/jars/axis-ant-1.3.jar
+axis/jars/axis-ant-1.4.jar
+axis/jars/axis-jaxrpc-1.2.jar
+axis/jars/axis-ant-1.4.jar.sha
+axis/jars/axis-jaxrpc-1.2-RC1.jar
+axis/jars/axis-jaxrpc-1.2-RC2.jar
+axis/jars/axis-jaxrpc-1.2-RC3.jar
+axis/jars/axis-jaxrpc-1.2-alpha-1.jar
+axis/jars/axis-jaxrpc-1.2-beta-2.jar
+axis/jars/axis-jaxrpc-1.2-beta-3.jar
+axis/jars/axis-jaxrpc-1.2.1.jar
+axis/jars/axis-jaxrpc-1.3.jar
+axis/jars/axis-jaxrpc-1.4.jar
+axis/jars/axis-jaxrpc-1.4.jar.sha
+axis/jars/axis-saaj-1.2-RC1.jar
+axis/jars/axis-saaj-1.2-RC2.jar
+axis/jars/axis-saaj-1.2-RC3.jar
+axis/jars/axis-saaj-1.2-alpha-1.jar
+axis/jars/axis-saaj-1.2-beta-2.jar
+axis/jars/axis-saaj-1.2-beta-3.jar
+axis/jars/axis-saaj-1.2.1.jar
+axis/jars/axis-saaj-1.2.jar
+axis/jars/axis-saaj-1.3.jar
+axis/jars/axis-saaj-1.4.jar
+axis/jars/axis-saaj-1.4.jar.sha
+axis/jars/axis-schema-1.3.jar
+axis/jars/axis-wsdl4j-1.2-RC1.jar
+axis/jars/axis-wsdl4j-1.2-RC2.jar
+axis/jars/axis-wsdl4j-1.2-RC3.jar
+axis/jars/axis-wsdl4j-1.2-beta-2.jar
+axis/jars/axis-wsdl4j-1.2-beta-3.jar
+axis/jars/axis-wsdl4j-1.2.1.jar
+axis/jars/axis-wsdl4j-1.2.jar
+axis/jars/axis-wsdl4j-1.3.jar
+axis/poms/axis-1.2.1.pom
+axis2/jars/addressing-0.94.mar
+axis2/jars/axis2-0.9.jar
+axis2/jars/axis2-0.95.jar
+axis2/jars/axis2-1.0.jar
+axis2/jars/axis2-adb-0.94.jar
+axis2/jars/axis2-adb-0.95.jar
+axis2/jars/axis2-adb-1.0.jar
+axis2/jars/axis2-codegen-0.94.jar
+axis2/jars/axis2-codegen-0.95.jar
+axis2/jars/axis2-codegen-1.0.jar
+axis2/jars/axis2-core-0.94.jar
+axis2/jars/axis2-doom-0.94.jar
+axis2/jars/axis2-doom-0.95.jar
+axis2/jars/axis2-java2wsdl-1.0.jar
+axis2/jars/axis2-jibx-1.0.jar
+axis2/jars/axis2-kernel-0.95.jar
+axis2/jars/axis2-kernel-1.0.jar
+axis2/jars/axis2-xmlbeans-1.0.jar
+axis2/mars/addressing-0.94.mar
+axis2/mars/addressing-0.95.mar
+axis2/mars/addressing-1.0.mar
+axis2/mars/rampart-1.0.mar
+axis2/mars/security-0.95.mar
+axis2/mars/soapmonitor-1.0.mar
+batik/jars/batik-1.1.1.jar
+batik/jars/batik-1.5.jar
+batik/jars/batik-awt-util-1.5.jar
+batik/jars/batik-awt-util-1.6.jar
+batik/jars/batik-bridge-1.5.jar
+batik/jars/batik-bridge-1.6.jar
+batik/jars/batik-css-1.5.jar
+batik/jars/batik-css-1.6.jar
+batik/jars/batik-dom-1.5.jar
+batik/jars/batik-dom-1.6.jar
+batik/jars/batik-ext-1.5.jar
+batik/jars/batik-ext-1.6.jar
+batik/jars/batik-extension-1.5.jar
+batik/jars/batik-extension-1.6.jar
+batik/jars/batik-gui-util-1.5.jar
+batik/jars/batik-gui-util-1.6.jar
+batik/jars/batik-gvt-1.5.jar
+batik/jars/batik-gvt-1.6.jar
+batik/jars/batik-parser-1.5.jar
+batik/jars/batik-parser-1.6.jar
+batik/jars/batik-rasterizer-1.5.jar
+batik/jars/batik-rasterizer-1.6.jar
+batik/jars/batik-script-1.5.jar
+batik/jars/batik-rasterizer-ext-1.6.jar
+batik/jars/batik-rasterizer-ext.jar
+batik/jars/batik-script-1.6.jar
+batik/jars/batik-slideshow-1.6.jar
+batik/jars/batik-squiggle-1.6.jar
+batik/jars/batik-squiggle-ext-1.6.jar
+batik/jars/batik-squiggle-ext.jar
+batik/jars/batik-svg-dom-1.5.jar
+batik/jars/batik-svg-dom-1.6.jar
+batik/jars/batik-svggen-1.5.jar
+batik/jars/batik-svggen-1.6.jar
+batik/jars/batik-svgpp-1.6.jar
+batik/jars/batik-swing-1.5.jar
+batik/jars/batik-swing-1.6.jar
+batik/jars/batik-transcoder-1.5.jar
+batik/jars/batik-transcoder-1.6.jar
+batik/jars/batik-ttf2svg-1.6.jar
+batik/jars/batik-util-1.5.jar
+batik/jars/batik-util-1.6.jar
+batik/jars/batik-xml-1.5.jar
+batik/jars/batik-xml-1.6.jar
+batik/poms/batik-awt-util-1.6.pom
+batik/poms/batik-bridge-1.6.pom
+batik/poms/batik-css-1.6.pom
+batik/poms/batik-dom-1.6.pom
+batik/poms/batik-ext-1.6.pom
+batik/poms/batik-extension-1.6.pom
+batik/poms/batik-gvt-1.6.pom
+batik/poms/batik-gui-util-1.6.pom
+batik/poms/batik-parser-1.6.pom
+batik/poms/batik-rasterizer-1.6.pom
+batik/poms/batik-rasterizer-ext-1.6.pom
+batik/poms/batik-script-1.6.pom
+batik/poms/batik-slideshow-1.6.pom
+batik/poms/batik-squiggle-1.6.pom
+batik/poms/batik-squiggle-ext-1.6.pom
+batik/poms/batik-svg-dom-1.6.pom
+batik/poms/batik-svggen-1.6.pom
+batik/poms/batik-svgpp-1.6.pom
+batik/poms/batik-swing-1.6.pom
+batik/poms/batik-transcoder-1.6.pom
+batik/poms/batik-ttf2svg-1.6.pom
+batik/poms/batik-util-1.6.pom
+batik/poms/batik-xml-1.6.pom
+bsf/jars/bsf-2.2.jar
+bsf/jars/bsf-2.3.0-rc1.jar
+bcel/jars/bcel-5.0.jar
+bcel/jars/bcel-5.1.jar
+beehive/jars/apache-xbean-beehive-1.0-alpha.jar
+beehive/jars/beehive-netui-compiler-1.0-alpha.jar
+beehive/jars/beehive-netui-pageflow-1.0-alpha.jar
+beehive/jars/beehive-netui-scoping-1.0-alpha.jar
+beehive/jars/controls-1.0-alpha.jar
+beehive/jars/beehive-netui-tags-databinding-1.0-alpha.jar
+beehive/jars/beehive-netui-tags-html-1.0-alpha.jar
+beehive/jars/beehive-netui-tags-template-1.0-alpha.jar
+beehive/jars/beehive-netui-util-1.0-alpha.jar
+beehive/jars/wsdltypes-beehive-1.0-alpha.jar
+beehive/jars/wsm-1.0-alpha.jar
+beehive/jars/wsm-axis-1.0-alpha.jar
+beehive/poms/beehive-controls-1.0.pom
+beehive/tlds/beehive-netui-tags-databinding-1.0-alpha.tld
+beehive/tlds/beehive-netui-tags-html-1.0-alpha.tld
+beehive/tlds/beehive-netui-tags-template-1.0-alpha.tld
+beehive/xmls/buildWebappCore.xml
+beehive/xmls/buildWebapp.xml
+beehive/xmls/webappRuntimeCore.xml
+beehive/xmls/runTomcatCore.xml
+cactus/distributions/jakarta-cactus-1.5-beta1-src.zip
+cactus/distributions/jakarta-cactus-12-1.5-beta1.zip
+cactus/distributions/jakarta-cactus-13-1.5-beta1.zip
+cactus/jars/cactus-1.4b1.jar
+cactus/jars/cactus-12-1.4.1.jar
+cactus/jars/cactus-12-1.5-beta1.jar
+cactus/jars/cactus-12-1.7.1.jar
+cactus/jars/cactus-12-1.7.2.jar
+cactus/jars/cactus-13-1.4.1.jar
+cactus/jars/cactus-13-1.5-beta1.jar
+cactus/jars/cactus-13-1.5-rc1.jar
+cactus/jars/cactus-13-1.5dev-20030522.jar
+cactus/jars/cactus-13-1.5dev-20030607.jar
+cactus/jars/cactus-13-1.5dev-20030619.jar
+cactus/jars/cactus-13-1.6.1.jar
+cactus/jars/cactus-13-1.6dev-20030807.jar
+cactus/jars/cactus-13-1.6.jar
+cactus/jars/cactus-13-1.6dev-20030809.jar
+cactus/jars/cactus-13-1.6dev-20030829.jar
+cactus/jars/cactus-13-1.6dev-20040115.jar
+cactus/jars/cactus-13-1.7.1.jar
+cactus/jars/cactus-13-1.7.2.jar
+cactus/jars/cactus-ant-13-1.6.1.jar
+cactus/jars/cactus-ant-13-1.6.jar
+cactus/jars/cactus-13-1.7.jar
+cactus/jars/cactus-13-1.7dev-20040815.jar
+cactus/jars/cactus-ant-1.4.1.jar
+cactus/jars/cactus-ant-12-1.5-beta1.jar
+cactus/jars/cactus-ant-12-1.7.1.jar
+cactus/jars/cactus-ant-12-1.7.2.jar
+cactus/jars/cactus-ant-13-1.5-beta1.jar
+cactus/jars/cactus-ant-13-1.5-rc1.jar
+cactus/jars/cactus-ant-13-1.5dev-20030522.jar
+cactus/jars/cactus-ant-13-1.5dev-20030607.jar
+cactus/jars/cactus-ant-13-1.5dev-20030619.jar
+cactus/jars/cactus-ant-13-1.6dev-20030807.jar
+cactus/jars/cactus-ant-13-1.6dev-20030809.jar
+cactus/jars/cactus-ant-13-1.6dev-20030829.jar
+cactus/jars/cactus-ant-13-1.6dev-20040115.jar
+cactus/jars/cactus-ant-13-1.7.1.jar
+cactus/jars/cactus-ant-13-1.7dev-20040815.jar
+cactus/jars/cactus-ant-13-1.7.2.jar
+cactus/jars/cactus-ant-13-1.7.jar
+cactus/jars/cactus-framework-13-1.5dev-20030322.jar
+cactus/jars/cactus-framework-13-1.5dev-20030407.jar
+cactus/jars/cactus-integration-ant-1.5dev-20030322.jar
+cactus/jars/cactus-integration-ant-1.5dev-20030407.jar
+cactus/plugins/cactus-maven-1.6.1.jar
+cactus/plugins/cactus-maven-1.6.jar
+cactus/plugins/cactus-maven-1.6dev-20031031.jar
+cactus/plugins/cactus-maven-1.6dev-20040115.jar
+cactus/plugins/cactus-maven-1.7.1.jar
+cactus/plugins/cactus-maven-1.7dev-20040815.jar
+cactus/plugins/cactus-maven-1.7.2.jar
+cactus/plugins/cactus-maven-1.7.jar
+cactus/poms/cactus-maven-1.7.1.pom
+cactus/poms/cactus-maven-1.7.2.pom
+cactus/zips/jakarta-cactus-integration-ant-13-1.5dev-20030325.zip
+cactus/zips/jakarta-cactus-integration-ant-13-1.5dev-20030329.zip
+cactus/zips/jakarta-cactus-integration-ant-13-1.5dev-20030407.zip
+cactus/zips/jakarta-cactus-integration-ant-13-1.5dev-20030426.zip
+cocoon/jars/cocoon-2.1.3.jar
+cocoon/jars/cocoon-2.1.4.jar
+cocoon/jars/cocoon-2.1.5.1-deprecated.jar
+cocoon/jars/cocoon-2.1.5.1.jar
+cocoon/jars/cocoon-2.1.6.jar
+cocoon/jars/cocoon-2.1.7.jar
+cocoon/jars/cocoon-2.1.8.jar
+cocoon/jars/cocoon-2.1.9.jar
+cocoon/jars/cocoon-ajax-2.1.8.jar
+cocoon/jars/cocoon-ajax-2.1.9.jar
+cocoon/jars/cocoon-apples-2.1.3.jar
+cocoon/jars/cocoon-apples-2.1.4.jar
+cocoon/jars/cocoon-apples-2.1.5.1.jar
+cocoon/jars/cocoon-apples-2.1.6.jar
+cocoon/jars/cocoon-apples-2.1.7.jar
+cocoon/jars/cocoon-apples-2.1.8.jar
+cocoon/jars/cocoon-apples-2.1.9.jar
+cocoon/jars/cocoon-asciiart-2.1.3.jar
+cocoon/jars/cocoon-asciiart-2.1.4.jar
+cocoon/jars/cocoon-asciiart-2.1.5.1.jar
+cocoon/jars/cocoon-asciiart-2.1.6.jar
+cocoon/jars/cocoon-asciiart-2.1.7.jar
+cocoon/jars/cocoon-asciiart-2.1.8.jar
+cocoon/jars/cocoon-asciiart-2.1.9.jar
+cocoon/jars/cocoon-authentication-fw-2.1.3.jar
+cocoon/jars/cocoon-authentication-fw-2.1.4.jar
+cocoon/jars/cocoon-authentication-fw-2.1.5.1.jar
+cocoon/jars/cocoon-authentication-fw-2.1.6.jar
+cocoon/jars/cocoon-authentication-fw-2.1.7.jar
+cocoon/jars/cocoon-authentication-fw-2.1.8.jar
+cocoon/jars/cocoon-authentication-fw-2.1.9.jar
+cocoon/jars/cocoon-axis-2.1.3.jar
+cocoon/jars/cocoon-axis-2.1.4.jar
+cocoon/jars/cocoon-axis-2.1.5.1.jar
+cocoon/jars/cocoon-axis-2.1.6.jar
+cocoon/jars/cocoon-axis-2.1.7.jar
+cocoon/jars/cocoon-axis-2.1.8.jar
+cocoon/jars/cocoon-axis-2.1.9.jar
+cocoon/jars/cocoon-batik-2.1.3.jar
+cocoon/jars/cocoon-batik-2.1.4.jar
+cocoon/jars/cocoon-batik-2.1.5.1.jar
+cocoon/jars/cocoon-batik-2.1.6.jar
+cocoon/jars/cocoon-batik-2.1.7.jar
+cocoon/jars/cocoon-batik-2.1.8.jar
+cocoon/jars/cocoon-batik-2.1.9.jar
+cocoon/jars/cocoon-bsf-2.1.3.jar
+cocoon/jars/cocoon-bsf-2.1.4.jar
+cocoon/jars/cocoon-bsf-2.1.5.1.jar
+cocoon/jars/cocoon-bsf-2.1.6.jar
+cocoon/jars/cocoon-bsf-2.1.7.jar
+cocoon/jars/cocoon-bsf-2.1.8.jar
+cocoon/jars/cocoon-bsf-2.1.9.jar
+cocoon/jars/cocoon-captcha-2.1.8.jar
+cocoon/jars/cocoon-captcha-2.1.9.jar
+cocoon/jars/cocoon-chaperon-2.1.3.jar
+cocoon/jars/cocoon-chaperon-2.1.4.jar
+cocoon/jars/cocoon-chaperon-2.1.5.1.jar
+cocoon/jars/cocoon-chaperon-2.1.6.jar
+cocoon/jars/cocoon-chaperon-2.1.7.jar
+cocoon/jars/cocoon-chaperon-2.1.8.jar
+cocoon/jars/cocoon-chaperon-2.1.9.jar
+cocoon/jars/cocoon-cron-2.1.3.jar
+cocoon/jars/cocoon-cron-2.1.4.jar
+cocoon/jars/cocoon-cron-2.1.5.1.jar
+cocoon/jars/cocoon-cron-2.1.6.jar
+cocoon/jars/cocoon-cron-2.1.7.jar
+cocoon/jars/cocoon-cron-2.1.8.jar
+cocoon/jars/cocoon-cron-2.1.9.jar
+cocoon/jars/cocoon-databases-2.1.3.jar
+cocoon/jars/cocoon-databases-2.1.4.jar
+cocoon/jars/cocoon-databases-2.1.5.1.jar
+cocoon/jars/cocoon-databases-2.1.6.jar
+cocoon/jars/cocoon-databases-2.1.7.jar
+cocoon/jars/cocoon-deli-2.1.6.jar
+cocoon/jars/cocoon-databases-2.1.8.jar
+cocoon/jars/cocoon-databases-2.1.9.jar
+cocoon/jars/cocoon-deli-2.1.3.jar
+cocoon/jars/cocoon-deli-2.1.4.jar
+cocoon/jars/cocoon-deli-2.1.5.1.jar
+cocoon/jars/cocoon-deli-2.1.7.jar
+cocoon/jars/cocoon-deli-2.1.8.jar
+cocoon/jars/cocoon-deli-2.1.9.jar
+cocoon/jars/cocoon-deprecated-2.1.3.jar
+cocoon/jars/cocoon-deprecated-2.1.4.jar
+cocoon/jars/cocoon-deprecated-2.1.6.jar
+cocoon/jars/cocoon-deprecated-2.1.5.1.jar
+cocoon/jars/cocoon-deprecated-2.1.7.jar
+cocoon/jars/cocoon-deprecated-2.1.8.jar
+cocoon/jars/cocoon-deprecated-2.1.9.jar
+cocoon/jars/cocoon-eventcache-2.1.3.jar
+cocoon/jars/cocoon-eventcache-2.1.4.jar
+cocoon/jars/cocoon-eventcache-2.1.5.1.jar
+cocoon/jars/cocoon-eventcache-2.1.6.jar
+cocoon/jars/cocoon-eventcache-2.1.7.jar
+cocoon/jars/cocoon-eventcache-2.1.8.jar
+cocoon/jars/cocoon-eventcache-2.1.9.jar
+cocoon/jars/cocoon-faces-2.1.6.jar
+cocoon/jars/cocoon-faces-2.1.7.jar
+cocoon/jars/cocoon-faces-2.1.8.jar
+cocoon/jars/cocoon-faces-2.1.9.jar
+cocoon/jars/cocoon-fop-2.1.3.jar
+cocoon/jars/cocoon-fop-2.1.4.jar
+cocoon/jars/cocoon-fop-2.1.5.1.jar
+cocoon/jars/cocoon-fop-2.1.6.jar
+cocoon/jars/cocoon-fop-2.1.7.jar
+cocoon/jars/cocoon-fop-2.1.8.jar
+cocoon/jars/cocoon-fop-2.1.9.jar
+cocoon/jars/cocoon-forms-2.1.6.jar
+cocoon/jars/cocoon-forms-2.1.5.1.jar
+cocoon/jars/cocoon-forms-2.1.7.jar
+cocoon/jars/cocoon-forms-2.1.8.jar
+cocoon/jars/cocoon-forms-2.1.9.jar
+cocoon/jars/cocoon-hsqldb-2.1.3.jar
+cocoon/jars/cocoon-hsqldb-2.1.4.jar
+cocoon/jars/cocoon-hsqldb-2.1.5.1.jar
+cocoon/jars/cocoon-hsqldb-2.1.6.jar
+cocoon/jars/cocoon-hsqldb-2.1.7.jar
+cocoon/jars/cocoon-hsqldb-2.1.8.jar
+cocoon/jars/cocoon-hsqldb-2.1.9.jar
+cocoon/jars/cocoon-html-2.1.3.jar
+cocoon/jars/cocoon-html-2.1.4.jar
+cocoon/jars/cocoon-html-2.1.5.1.jar
+cocoon/jars/cocoon-html-2.1.6.jar
+cocoon/jars/cocoon-html-2.1.7.jar
+cocoon/jars/cocoon-html-2.1.8.jar
+cocoon/jars/cocoon-html-2.1.9.jar
+cocoon/jars/cocoon-imageop-2.1.9.jar
+cocoon/jars/cocoon-itext-2.1.3.jar
+cocoon/jars/cocoon-itext-2.1.4.jar
+cocoon/jars/cocoon-itext-2.1.5.1.jar
+cocoon/jars/cocoon-itext-2.1.6.jar
+cocoon/jars/cocoon-itext-2.1.7.jar
+cocoon/jars/cocoon-itext-2.1.8.jar
+cocoon/jars/cocoon-itext-2.1.9.jar
+cocoon/jars/cocoon-javaflow-2.1.5.1.jar
+cocoon/jars/cocoon-javaflow-2.1.6.jar
+cocoon/jars/cocoon-javaflow-2.1.7.jar
+cocoon/jars/cocoon-javaflow-2.1.8.jar
+cocoon/jars/cocoon-javaflow-2.1.9.jar
+cocoon/jars/cocoon-jcr-2.1.8.jar
+cocoon/jars/cocoon-jcr-2.1.9.jar
+cocoon/jars/cocoon-jfor-2.1.3.jar
+cocoon/jars/cocoon-jfor-2.1.4.jar
+cocoon/jars/cocoon-jfor-2.1.5.1.jar
+cocoon/jars/cocoon-jfor-2.1.6.jar
+cocoon/jars/cocoon-jfor-2.1.7.jar
+cocoon/jars/cocoon-jfor-2.1.8.jar
+cocoon/jars/cocoon-jfor-2.1.9.jar
+cocoon/jars/cocoon-jms-2.1.4.jar
+cocoon/jars/cocoon-jms-2.1.5.1.jar
+cocoon/jars/cocoon-jms-2.1.6.jar
+cocoon/jars/cocoon-jms-2.1.7.jar
+cocoon/jars/cocoon-jms-2.1.8.jar
+cocoon/jars/cocoon-jms-2.1.9.jar
+cocoon/jars/cocoon-jsp-2.1.3.jar
+cocoon/jars/cocoon-jsp-2.1.4.jar
+cocoon/jars/cocoon-jsp-2.1.5.1.jar
+cocoon/jars/cocoon-jsp-2.1.6.jar
+cocoon/jars/cocoon-jsp-2.1.7.jar
+cocoon/jars/cocoon-jsp-2.1.8.jar
+cocoon/jars/cocoon-jsp-2.1.9.jar
+cocoon/jars/cocoon-jxforms-2.1.3.jar
+cocoon/jars/cocoon-jxforms-2.1.4.jar
+cocoon/jars/cocoon-linkrewriter-2.1.3.jar
+cocoon/jars/cocoon-linkrewriter-2.1.4.jar
+cocoon/jars/cocoon-linkrewriter-2.1.5.1.jar
+cocoon/jars/cocoon-linkrewriter-2.1.6.jar
+cocoon/jars/cocoon-linkrewriter-2.1.7.jar
+cocoon/jars/cocoon-linkrewriter-2.1.8.jar
+cocoon/jars/cocoon-linkrewriter-2.1.9.jar
+cocoon/jars/cocoon-linotype-2.1.3.jar
+cocoon/jars/cocoon-linotype-2.1.4.jar
+cocoon/jars/cocoon-linotype-2.1.5.1.jar
+cocoon/jars/cocoon-linotype-2.1.6.jar
+cocoon/jars/cocoon-linotype-2.1.7.jar
+cocoon/jars/cocoon-linotype-2.1.8.jar
+cocoon/jars/cocoon-linotype-2.1.9.jar
+cocoon/jars/cocoon-lucene-2.1.3.jar
+cocoon/jars/cocoon-lucene-2.1.4.jar
+cocoon/jars/cocoon-lucene-2.1.5.1.jar
+cocoon/jars/cocoon-mail-2.1.4.jar
+cocoon/jars/cocoon-lucene-2.1.6.jar
+cocoon/jars/cocoon-lucene-2.1.7.jar
+cocoon/jars/cocoon-lucene-2.1.8.jar
+cocoon/jars/cocoon-lucene-2.1.9.jar
+cocoon/jars/cocoon-mail-2.1.3.jar
+cocoon/jars/cocoon-mail-2.1.5.1.jar
+cocoon/jars/cocoon-mail-2.1.6.jar
+cocoon/jars/cocoon-mail-2.1.7.jar
+cocoon/jars/cocoon-mail-2.1.8.jar
+cocoon/jars/cocoon-mail-2.1.9.jar
+cocoon/jars/cocoon-midi-2.1.3.jar
+cocoon/jars/cocoon-midi-2.1.4.jar
+cocoon/jars/cocoon-midi-2.1.5.1.jar
+cocoon/jars/cocoon-midi-2.1.6.jar
+cocoon/jars/cocoon-midi-2.1.7.jar
+cocoon/jars/cocoon-midi-2.1.8.jar
+cocoon/jars/cocoon-midi-2.1.9.jar
+cocoon/jars/cocoon-naming-2.1.3.jar
+cocoon/jars/cocoon-naming-2.1.4.jar
+cocoon/jars/cocoon-naming-2.1.5.1.jar
+cocoon/jars/cocoon-naming-2.1.6.jar
+cocoon/jars/cocoon-naming-2.1.7.jar
+cocoon/jars/cocoon-naming-2.1.8.jar
+cocoon/jars/cocoon-naming-2.1.9.jar
+cocoon/jars/cocoon-ojb-2.1.4.jar
+cocoon/jars/cocoon-ojb-2.1.5.1.jar
+cocoon/jars/cocoon-ojb-2.1.6.jar
+cocoon/jars/cocoon-ojb-2.1.7.jar
+cocoon/jars/cocoon-ojb-2.1.8.jar
+cocoon/jars/cocoon-ojb-2.1.9.jar
+cocoon/jars/cocoon-paranoid-2.1.4.jar
+cocoon/jars/cocoon-paranoid-2.1.5.1.jar
+cocoon/jars/cocoon-paranoid-2.1.6.jar
+cocoon/jars/cocoon-paranoid-2.1.7.jar
+cocoon/jars/cocoon-paranoid-2.1.8.jar
+cocoon/jars/cocoon-paranoid-2.1.9.jar
+cocoon/jars/cocoon-petstore-2.1.3.jar
+cocoon/jars/cocoon-petstore-2.1.4.jar
+cocoon/jars/cocoon-petstore-2.1.5.1.jar
+cocoon/jars/cocoon-portal-2.1.6.jar
+cocoon/jars/cocoon-petstore-2.1.6.jar
+cocoon/jars/cocoon-petstore-2.1.7.jar
+cocoon/jars/cocoon-petstore-2.1.8.jar
+cocoon/jars/cocoon-petstore-2.1.9.jar
+cocoon/jars/cocoon-php-2.1.3.jar
+cocoon/jars/cocoon-php-2.1.4.jar
+cocoon/jars/cocoon-php-2.1.5.1.jar
+cocoon/jars/cocoon-poi-2.1.3.jar
+cocoon/jars/cocoon-poi-2.1.4.jar
+cocoon/jars/cocoon-poi-2.1.5.1.jar
+cocoon/jars/cocoon-poi-2.1.6.jar
+cocoon/jars/cocoon-poi-2.1.7.jar
+cocoon/jars/cocoon-poi-2.1.8.jar
+cocoon/jars/cocoon-poi-2.1.9.jar
+cocoon/jars/cocoon-portal-2.1.3.jar
+cocoon/jars/cocoon-portal-2.1.4.jar
+cocoon/jars/cocoon-portal-2.1.5.1.jar
+cocoon/jars/cocoon-portal-2.1.7.jar
+cocoon/jars/cocoon-portal-2.1.8.jar
+cocoon/jars/cocoon-portal-2.1.9.jar
+cocoon/jars/cocoon-portal-fw-2.1.3.jar
+cocoon/jars/cocoon-portal-fw-2.1.4.jar
+cocoon/jars/cocoon-portal-fw-2.1.5.1.jar
+cocoon/jars/cocoon-precept-2.1.3.jar
+cocoon/jars/cocoon-precept-2.1.4.jar
+cocoon/jars/cocoon-profiler-2.1.3.jar
+cocoon/jars/cocoon-profiler-2.1.4.jar
+cocoon/jars/cocoon-profiler-2.1.5.1.jar
+cocoon/jars/cocoon-profiler-2.1.6.jar
+cocoon/jars/cocoon-profiler-2.1.7.jar
+cocoon/jars/cocoon-profiler-2.1.8.jar
+cocoon/jars/cocoon-profiler-2.1.9.jar
+cocoon/jars/cocoon-proxy-2.1.3.jar
+cocoon/jars/cocoon-proxy-2.1.4.jar
+cocoon/jars/cocoon-proxy-2.1.5.1.jar
+cocoon/jars/cocoon-proxy-2.1.6.jar
+cocoon/jars/cocoon-proxy-2.1.7.jar
+cocoon/jars/cocoon-proxy-2.1.8.jar
+cocoon/jars/cocoon-proxy-2.1.9.jar
+cocoon/jars/cocoon-python-2.1.3.jar
+cocoon/jars/cocoon-python-2.1.4.jar
+cocoon/jars/cocoon-python-2.1.5.1.jar
+cocoon/jars/cocoon-python-2.1.6.jar
+cocoon/jars/cocoon-python-2.1.7.jar
+cocoon/jars/cocoon-python-2.1.8.jar
+cocoon/jars/cocoon-python-2.1.9.jar
+cocoon/jars/cocoon-qdox-2.1.3.jar
+cocoon/jars/cocoon-qdox-2.1.4.jar
+cocoon/jars/cocoon-qdox-2.1.5.1.jar
+cocoon/jars/cocoon-qdox-2.1.6.jar
+cocoon/jars/cocoon-qdox-2.1.7.jar
+cocoon/jars/cocoon-qdox-2.1.8.jar
+cocoon/jars/cocoon-qdox-2.1.9.jar
+cocoon/jars/cocoon-querybean-2.1.7.jar
+cocoon/jars/cocoon-querybean-2.1.8.jar
+cocoon/jars/cocoon-querybean-2.1.9.jar
+cocoon/jars/cocoon-repository-2.1.3.jar
+cocoon/jars/cocoon-repository-2.1.4.jar
+cocoon/jars/cocoon-repository-2.1.5.1.jar
+cocoon/jars/cocoon-repository-2.1.6.jar
+cocoon/jars/cocoon-repository-2.1.7.jar
+cocoon/jars/cocoon-repository-2.1.8.jar
+cocoon/jars/cocoon-repository-2.1.9.jar
+cocoon/jars/cocoon-scratchpad-2.1.3.jar
+cocoon/jars/cocoon-scratchpad-2.1.4.jar
+cocoon/jars/cocoon-scratchpad-2.1.5.1.jar
+cocoon/jars/cocoon-scratchpad-2.1.6.jar
+cocoon/jars/cocoon-serializers-2.1.9.jar
+cocoon/jars/cocoon-serializers-2.1.5.1.jar
+cocoon/jars/cocoon-serializers-2.1.6.jar
+cocoon/jars/cocoon-serializers-2.1.7.jar
+cocoon/jars/cocoon-serializers-2.1.8.jar
+cocoon/jars/cocoon-session-fw-2.1.3.jar
+cocoon/jars/cocoon-session-fw-2.1.4.jar
+cocoon/jars/cocoon-session-fw-2.1.5.1.jar
+cocoon/jars/cocoon-session-fw-2.1.6.jar
+cocoon/jars/cocoon-session-fw-2.1.7.jar
+cocoon/jars/cocoon-session-fw-2.1.8.jar
+cocoon/jars/cocoon-session-fw-2.1.9.jar
+cocoon/jars/cocoon-slide-2.1.3.jar
+cocoon/jars/cocoon-slide-2.1.4.jar
+cocoon/jars/cocoon-slide-2.1.5.1.jar
+cocoon/jars/cocoon-slide-2.1.6.jar
+cocoon/jars/cocoon-slide-2.1.7.jar
+cocoon/jars/cocoon-slide-2.1.8.jar
+cocoon/jars/cocoon-slide-2.1.9.jar
+cocoon/jars/cocoon-slop-2.1.3.jar
+cocoon/jars/cocoon-slop-2.1.4.jar
+cocoon/jars/cocoon-slop-2.1.5.1.jar
+cocoon/jars/cocoon-slop-2.1.6.jar
+cocoon/jars/cocoon-slop-2.1.7.jar
+cocoon/jars/cocoon-slop-2.1.8.jar
+cocoon/jars/cocoon-slop-2.1.9.jar
+cocoon/jars/cocoon-snapshot.version
+cocoon/jars/cocoon-stx-2.1.3.jar
+cocoon/jars/cocoon-stx-2.1.4.jar
+cocoon/jars/cocoon-stx-2.1.5.1.jar
+cocoon/jars/cocoon-stx-2.1.6.jar
+cocoon/jars/cocoon-stx-2.1.7.jar
+cocoon/jars/cocoon-stx-2.1.8.jar
+cocoon/jars/cocoon-stx-2.1.9.jar
+cocoon/jars/cocoon-swf-2.1.3.jar
+cocoon/jars/cocoon-swf-2.1.4.jar
+cocoon/jars/cocoon-swf-2.1.5.1.jar
+cocoon/jars/cocoon-taglib-2.1.3.jar
+cocoon/jars/cocoon-taglib-2.1.4.jar
+cocoon/jars/cocoon-taglib-2.1.5.1.jar
+cocoon/jars/cocoon-testcase-2.1.3.jar
+cocoon/jars/cocoon-taglib-2.1.6.jar
+cocoon/jars/cocoon-taglib-2.1.7.jar
+cocoon/jars/cocoon-taglib-2.1.8.jar
+cocoon/jars/cocoon-taglib-2.1.9.jar
+cocoon/jars/cocoon-template-2.1.9.jar
+cocoon/jars/cocoon-woody-2.1.3.jar
+cocoon/jars/cocoon-testcase-2.1.4.jar
+cocoon/jars/cocoon-testcase-2.1.6.jar
+cocoon/jars/cocoon-testcase-2.1.7.jar
+cocoon/jars/cocoon-testcase-2.1.9.jar
+cocoon/jars/cocoon-tour-2.1.5.1.jar
+cocoon/jars/cocoon-tour-2.1.6.jar
+cocoon/jars/cocoon-tour-2.1.7.jar
+cocoon/jars/cocoon-tour-2.1.8.jar
+cocoon/jars/cocoon-tour-2.1.9.jar
+cocoon/jars/cocoon-validation-2.1.8.jar
+cocoon/jars/cocoon-validation-2.1.9.jar
+cocoon/jars/cocoon-velocity-2.1.3.jar
+cocoon/jars/cocoon-velocity-2.1.4.jar
+cocoon/jars/cocoon-velocity-2.1.5.1.jar
+cocoon/jars/cocoon-velocity-2.1.6.jar
+cocoon/jars/cocoon-velocity-2.1.7.jar
+cocoon/jars/cocoon-velocity-2.1.8.jar
+cocoon/jars/cocoon-velocity-2.1.9.jar
+cocoon/jars/cocoon-web3-2.1.3.jar
+cocoon/jars/cocoon-web3-2.1.4.jar
+cocoon/jars/cocoon-web3-2.1.5.1.jar
+cocoon/jars/cocoon-web3-2.1.6.jar
+cocoon/jars/cocoon-web3-2.1.7.jar
+cocoon/jars/cocoon-web3-2.1.8.jar
+cocoon/jars/cocoon-web3-2.1.9.jar
+cocoon/jars/cocoon-webdav-2.1.3.jar
+cocoon/jars/cocoon-webdav-2.1.4.jar
+cocoon/jars/cocoon-webdav-2.1.6.jar
+cocoon/jars/cocoon-webdav-2.1.5.1.jar
+cocoon/jars/cocoon-webdav-2.1.7.jar
+cocoon/jars/cocoon-webdav-2.1.8.jar
+cocoon/jars/cocoon-webdav-2.1.9.jar
+cocoon/jars/cocoon-woody-2.1.4.jar
+cocoon/jars/cocoon-xmldb-2.1.3.jar
+cocoon/jars/cocoon-xmldb-2.1.4.jar
+cocoon/jars/cocoon-xmldb-2.1.5.1.jar
+cocoon/jars/cocoon-xmldb-2.1.6.jar
+cocoon/jars/cocoon-xmldb-2.1.7.jar
+cocoon/jars/cocoon-xmldb-2.1.8.jar
+cocoon/jars/cocoon-xmldb-2.1.9.jar
+cocoon/jars/cocoon-xsltal-2.1.8.jar
+cocoon/jars/cocoon-xsltal-2.1.9.jar
+cocoon/jars/cocoon-xsp-2.1.5.1.jar
+cocoon/jars/cocoon-xsp-2.1.6.jar
+cocoon/jars/cocoon-xsp-2.1.7.jar
+cocoon/jars/cocoon-xsp-2.1.8.jar
+cocoon/jars/cocoon-xsp-2.1.9.jar
+cocoon/wars/cocoon-2.1.8.war
+cocoon/wars/cocoon-war-2.1.3.war
+cocoon/wars/cocoon-war-2.1.4.war
+cocoon/wars/cocoon-war-2.1.6.war
+cocoon/wars/cocoon-war-2.1.7.war
+commons-attributes/jars/commons-attributes-2.1-javadoc.jar
+commons-attributes/jars/commons-attributes-api-2.1.jar
+commons-attributes/jars/commons-attributes-api-2.2.jar
+commons-attributes/jars/commons-attributes-compiler-2.1.jar
+commons-attributes/jars/commons-attributes-compiler-2.2.jar
+commons-attributes/plugins/commons-attributes-plugin-2.1.jar
+commons-attributes/plugins/commons-attributes-plugin-2.2.jar
+commons-attributes/poms/commons-attributes-api-2.2.pom
+commons-attributes/poms/commons-attributes-compiler-2.2.pom
+commons-beanutils/jars/commons-beanutils-1.0-dev.20020812.082103.jar
+commons-beanutils/jars/commons-beanutils-1.0-dev.20020913.114846.jar
+commons-beanutils/jars/commons-beanutils-1.0.jar
+commons-beanutils/jars/commons-beanutils-1.3.jar
+commons-beanutils/jars/commons-beanutils-1.4-dev.20020812.084325.jar
+commons-beanutils/jars/commons-beanutils-1.4-dev.jar
+commons-beanutils/jars/commons-beanutils-1.4.1.jar
+commons-beanutils/jars/commons-beanutils-1.4.jar
+commons-beanutils/jars/commons-beanutils-1.5-javadoc.jar
+commons-beanutils/jars/commons-beanutils-1.5.jar
+commons-beanutils/jars/commons-beanutils-1.6-dev.20021128.082114.jar
+commons-beanutils/jars/commons-beanutils-1.6-javadoc.jar
+commons-beanutils/jars/commons-beanutils-1.6.1-javadoc.jar
+commons-beanutils/jars/commons-beanutils-1.6.1.jar
+commons-beanutils/jars/commons-beanutils-1.6.jar
+commons-beanutils/jars/commons-beanutils-1.7-dev.jar
+commons-beanutils/jars/commons-beanutils-1.7.0-javadoc.jar
+commons-beanutils/jars/commons-beanutils-1.7.0.jar
+commons-beanutils/jars/commons-beanutils-20020520.jar
+commons-beanutils/jars/commons-beanutils-20030211.134440.jar
+commons-beanutils/jars/commons-beanutils-bean-collections-1.7.0.jar
+commons-beanutils/jars/commons-beanutils-core-1.7.0.jar
+commons-beanutils/jars/commons-beanutils-dev.jar
+commons-beanutils/jars/commons-beanutils-1.8.0-BETA-javadoc.jar
+commons-beanutils/jars/commons-beanutils-snapshot-version
+commons-beanutils/jars/commons-beanutils-1.8.0-BETA.jar
+commons-beanutils/jars/commons-beanutils-1.8.0-BETA-sources.jar
+commons-beanutils/jars/commons-beanutils-core-1.8.0-BETA.jar
+commons-beanutils/jars/commons-beanutils-bean-collections-1.8.0-BETA.jar
+commons-beanutils/poms/commons-beanutils-1.4.1.pom
+commons-beanutils/poms/commons-beanutils-1.4.pom
+commons-beanutils/poms/commons-beanutils-1.5.pom
+commons-beanutils/poms/commons-beanutils-1.6.1.pom
+commons-beanutils/poms/commons-beanutils-1.6.pom
+commons-beanutils/poms/commons-beanutils-1.8.0-BETA.pom
+commons-betwixt/jars/commons-betwixt-0.5-javadoc.jar
+commons-betwixt/jars/commons-betwixt-0.5.jar
+commons-betwixt/jars/commons-betwixt-0.6-javadoc.jar
+commons-betwixt/jars/commons-betwixt-1.0-alpha-1-javadoc.jar
+commons-betwixt/jars/commons-betwixt-0.6.jar
+commons-betwixt/jars/commons-betwixt-0.7-javadoc.jar
+commons-betwixt/jars/commons-betwixt-0.7.jar
+commons-betwixt/jars/commons-betwixt-1.0-beta-1.20020910.124754.jar
+commons-betwixt/jars/commons-betwixt-1.0-alpha-1.jar
+commons-betwixt/jars/commons-betwixt-0.8.jar.sha
+commons-betwixt/jars/commons-betwixt-0.8.jar
+commons-betwixt/jars/commons-betwixt-1.0-beta-1.jar
+commons-betwixt/jars/commons-betwixt-1.0-beta-1.20020912.014405.jar
+commons-betwixt/jars/commons-betwixt-1.0-beta-1.20020920.020057.jar
+commons-betwixt/jars/commons-betwixt-1.0-beta-1.20030111.103454.jar
+commons-betwixt/jars/commons-betwixt-1.0-dev.20020712.083337.jar
+commons-betwixt/jars/commons-betwixt-1.0-dev.20020719.010630.jar
+commons-betwixt/jars/commons-betwixt-1.0-dev.jar
+commons-betwixt/jars/commons-betwixt-20030211.133854.jar
+commons-betwixt/jars/commons-betwixt-snapshot-version
+commons-betwixt/poms/commons-betwixt-0.8.pom
+commons-betwixt/poms/commons-betwixt-0.6.pom
+commons-betwixt/poms/commons-betwixt-0.7.pom
+commons-chain/jars/commons-chain-1.0-javadoc.jar
+commons-chain/jars/commons-chain-1.0.jar
+commons-chain/jars/commons-chain-1.1.jar
+commons-chain/poms/commons-chain-1.0.pom
+commons-chain/poms/commons-chain-1.1.pom
+commons-cli/jars/commons-cli-1.0-beta-1.jar
+commons-cli/jars/commons-cli-1.0-beta-2-dev.20021004.111657.jar
+commons-cli/jars/commons-cli-1.0-beta-2-dev.jar
+commons-cli/jars/commons-cli-1.0-beta-2.jar
+commons-cli/jars/commons-cli-1.0-dev.jar
+commons-cli/jars/commons-cli-1.0-dev.20020710.025055.jar
+commons-cli/jars/commons-cli-1.0-dev.20020727.104720.jar
+commons-cli/jars/commons-cli-1.0-javadoc.jar
+commons-cli/jars/commons-cli-1.0.jar
+commons-cli/jars/commons-cli-1.1-javadoc.jar
+commons-cli/jars/commons-cli-1.0.jar.sha
+commons-cli/jars/commons-cli-1.1-sources.jar
+commons-cli/jars/commons-cli-1.1.jar
+commons-cli/poms/commons-cli-1.0.pom
+commons-cli/poms/commons-cli-1.1.pom
+commons-codec/jars/commons-codec-1.0-dev.jar
+commons-codec/jars/commons-codec-1.1-javadoc.jar
+commons-codec/jars/commons-codec-1.1.jar
+commons-codec/jars/commons-codec-1.2-javadoc.jar
+commons-codec/jars/commons-codec-1.2.jar
+commons-codec/jars/commons-codec-1.3-javadoc.jar
+commons-codec/jars/commons-codec-1.3.jar
+commons-codec/jars/commons-codec-20041127.091804.jar
+commons-codec/jars/commons-codec-snapshot-version
+commons-codec/poms/commons-codec-1.1.pom
+commons-codec/poms/commons-codec-1.2.pom
+commons-codec/poms/commons-codec-1.3.pom
+commons-codec/poms/commons-codec-20041127.091804.pom
+commons-codec/poms/commons-codec-snapshot-version
+commons-collections/jars/commons-collections-1.0-javadoc.jar
+commons-collections/jars/commons-collections-1.0.jar
+commons-collections/jars/commons-collections-2.0-javadoc.jar
+commons-collections/jars/commons-collections-2.0.20020914.015953.jar
+commons-collections/jars/commons-collections-3.1.jar
+commons-collections/jars/commons-collections-snapshot-version
+commons-collections/jars/commons-collections-2.0.20020914.020746.jar
+commons-collections/jars/commons-collections-2.0.20020914.020858.jar
+commons-collections/jars/commons-collections-2.0.jar
+commons-collections/jars/commons-collections-2.1-dev.jar
+commons-collections/jars/commons-collections-2.1-javadoc.jar
+commons-collections/jars/commons-collections-2.1.jar
+commons-collections/jars/commons-collections-2.1.1-javadoc.jar
+commons-collections/jars/commons-collections-2.1.1.jar
+commons-collections/jars/commons-collections-20030418.083655.jar
+commons-collections/jars/commons-collections-20031027.000000.jar
+commons-collections/jars/commons-collections-3.0-dev.jar
+commons-collections/jars/commons-collections-20040102.233541.jar
+commons-collections/jars/commons-collections-20040616.jar
+commons-collections/jars/commons-collections-3.0-javadoc.jar
+commons-collections/jars/commons-collections-3.0.jar
+commons-collections/jars/commons-collections-3.1-javadoc.jar
+commons-collections/jars/commons-collections-3.2.jar
+commons-collections/jars/commons-collections-testframework-20031027.000000.jar
+commons-collections/jars/commons-collections-testframework-20040102.233541.jar
+commons-collections/jars/commons-collections-testframework-3.1.jar
+commons-collections/jars/commons-collections-testframework-3.2.jar
+commons-collections/poms/commons-collections-2.1.pom
+commons-collections/poms/commons-collections-3.0.pom
+commons-collections/poms/commons-collections-3.2.pom
+commons-configuration/jars/commons-configuration-1.0-dev-2.20021231.045254.jar
+commons-configuration/jars/commons-configuration-1.0-dev-3.20030603.101200.jar
+commons-configuration/jars/commons-configuration-1.0-dev-3.20030607.194155.jar
+commons-configuration/jars/commons-configuration-1.4-javadoc.jar
+commons-configuration/jars/commons-configuration-1.0-dev.jar
+commons-configuration/jars/commons-configuration-1.0-javadoc.jar
+commons-configuration/jars/commons-configuration-1.0-rc1.jar
+commons-configuration/jars/commons-configuration-1.0-rc2.jar
+commons-configuration/jars/commons-configuration-1.0.jar
+commons-configuration/jars/commons-configuration-1.1-javadoc.jar
+commons-configuration/jars/commons-configuration-1.1.jar
+commons-configuration/jars/commons-configuration-1.2.jar
+commons-configuration/jars/commons-configuration-20030311.152757.jar
+commons-configuration/jars/commons-configuration-20030620.073343.jar
+commons-configuration/jars/commons-configuration-20030706.202021.jar
+commons-configuration/jars/commons-configuration-20041012.002623.jar
+commons-configuration/jars/commons-configuration-20041012.002804.jar
+commons-configuration/jars/commons-configuration-snapshot-version
+commons-configuration/jars/commons-configuration-1.4-sources.jar
+commons-configuration/jars/commons-configuration-1.4.jar
+commons-configuration/poms/commons-configuration-20041012.002623.pom
+commons-configuration/poms/commons-configuration-1.0-rc1.pom
+commons-configuration/poms/commons-configuration-1.0.pom
+commons-configuration/poms/commons-configuration-1.1.pom
+commons-configuration/poms/commons-configuration-1.2.pom
+commons-configuration/poms/commons-configuration-20041012.002804.pom
+commons-configuration/poms/commons-configuration-snapshot-version
+commons-configuration/poms/commons-configuration-1.4.pom
+commons-daemon/jars/commons-daemon-1.0-dev.20021002.084851.jar
+commons-dbcp/jars/commons-dbcp-1.0-dev-20020806.jar
+commons-dbcp/jars/commons-dbcp-1.0-dev.jar
+commons-dbcp/jars/commons-dbcp-1.0-javadoc.jar
+commons-dbcp/jars/commons-dbcp-1.0.jar
+commons-dbcp/jars/commons-dbcp-1.1-RC1.jar
+commons-dbcp/jars/commons-dbcp-1.1-RC2.jar
+commons-dbcp/jars/commons-dbcp-1.1-dev.20021231.054941.jar
+commons-dbcp/jars/commons-dbcp-1.1-dev.20021231.055112.jar
+commons-dbcp/jars/commons-dbcp-1.1-javadoc.jar
+commons-dbcp/jars/commons-dbcp-1.1.jar
+commons-dbcp/jars/commons-dbcp-1.2-javadoc.jar
+commons-dbcp/jars/commons-dbcp-1.2.1-javadoc.jar
+commons-dbcp/jars/commons-dbcp-1.2.1.jar
+commons-dbcp/jars/commons-dbcp-1.2.jar
+commons-dbcp/jars/commons-dbcp-20030818.201141.jar
+commons-dbcp/jars/commons-dbcp-20030821.193421.jar
+commons-dbcp/jars/commons-dbcp-20030825.184428.jar
+commons-dbcp/jars/commons-dbcp-snapshot-version
+commons-dbcp/jars/commons-dbcp-1.2.2.jar
+commons-dbcp/poms/commons-dbcp-1.0.pom
+commons-dbcp/poms/commons-dbcp-1.1.pom
+commons-dbcp/poms/commons-dbcp-1.2.1.pom
+commons-dbcp/poms/commons-dbcp-1.2.pom
+commons-dbcp/poms/commons-dbcp-1.2.2.pom
+commons-dbutils/jars/commons-dbutils-1.0-javadoc.jar
+commons-dbutils/jars/commons-dbutils-1.0.jar
+commons-dbutils/jars/commons-dbutils-1.1.jar
+commons-dbutils/jars/commons-dbutils-1.1-sources.jar
+commons-dbutils/poms/commons-dbutils-1.0.pom
+commons-dbutils/poms/commons-dbutils-1.1.pom
+commons-digester/jars/commons-digester-1.0-dev.20020731.104901.jar
+commons-digester/jars/commons-digester-1.2.jar
+commons-digester/jars/commons-digester-1.3.jar
+commons-digester/jars/commons-digester-1.4-javadoc.jar
+commons-digester/jars/commons-digester-1.4.1-javadoc.jar
+commons-digester/jars/commons-digester-1.4.1.jar
+commons-digester/jars/commons-digester-1.5-javadoc.jar
+commons-digester/jars/commons-digester-1.5.jar
+commons-digester/jars/commons-digester-1.6-javadoc.jar
+commons-digester/jars/commons-digester-1.6.jar
+commons-digester/jars/commons-digester-1.7-javadoc.jar
+commons-digester/jars/commons-digester-1.7.jar
+commons-digester/jars/commons-digester-1.8.jar
+commons-digester/jars/commons-digester-1.8-javadoc.jar
+commons-digester/jars/commons-digester-1.8-sources.jar
+commons-digester/poms/commons-digester-1.3.pom
+commons-digester/poms/commons-digester-1.4.1.pom
+commons-digester/poms/commons-digester-1.5.pom
+commons-digester/poms/commons-digester-1.7.pom
+commons-digester/poms/commons-digester-1.8.pom
+commons-digester/distributions/commons-digester-1.8-src.zip
+commons-digester/distributions/commons-digester-1.8-src.tar.gz
+commons-digester/distributions/commons-digester-1.8.tar.gz
+commons-digester/distributions/commons-digester-1.8.zip
+commons-discovery/jars/commons-discovery-0.1-javadoc.jar
+commons-discovery/jars/commons-discovery-0.1.jar
+commons-discovery/jars/commons-discovery-0.2-javadoc.jar
+commons-discovery/jars/commons-discovery-0.2-dev.jar
+commons-discovery/jars/commons-discovery-0.2.jar
+commons-discovery/jars/commons-discovery-1.0-dev.20021010.101254.jar
+commons-discovery/jars/commons-discovery-20030211.213356.jar
+commons-discovery/jars/commons-discovery-20040218.194635.jar
+commons-discovery/jars/commons-discovery-snapshot-version
+commons-discovery/jars/commons-discovery-0.4.jar
+commons-discovery/poms/commons-discovery-0.1.pom
+commons-discovery/poms/commons-discovery-0.2.pom
+commons-discovery/poms/commons-discovery-0.4.pom
+commons-el/jars/commons-el-1.0-javadoc.jar
+commons-el/jars/commons-el-1.0.jar
+commons-el/poms/commons-el-1.0.pom
+commons-email/distributions/commons-email-1.0-src.tar.gz
+commons-email/distributions/commons-email-1.0-src.zip
+commons-email/distributions/commons-email-1.0.tar.gz
+commons-email/distributions/commons-email-1.0.zip
+commons-email/jars/commons-email-0.1-dev.jar
+commons-email/jars/commons-email-1.0-javadoc.jar
+commons-email/jars/commons-email-1.0.jar
+commons-email/jars/commons-email-20030310.165926.jar
+commons-email/jars/commons-email-snapshot-version
+commons-email/poms/commons-email-1.0.pom
+commons-fileupload/jars/commons-fileupload-1.0-beta-1-javadoc.jar
+commons-fileupload/jars/commons-fileupload-1.0-beta-1.jar
+commons-fileupload/jars/commons-fileupload-1.0-dev.jar
+commons-fileupload/jars/commons-fileupload-1.0-javadoc.jar
+commons-fileupload/jars/commons-fileupload-1.0-rc1-javadoc.jar
+commons-fileupload/jars/commons-fileupload-1.0-rc1.jar
+commons-fileupload/jars/commons-fileupload-1.0.jar
+commons-fileupload/jars/commons-fileupload-1.1.1.jar
+commons-fileupload/jars/commons-fileupload-1.1.jar
+commons-fileupload/poms/commons-fileupload-1.0.pom
+commons-fileupload/poms/commons-fileupload-1.1.1.pom
+commons-fileupload/poms/commons-fileupload-1.1.pom
+ecs/jars/ecs-1.4.1.jar
+ecs/jars/ecs-1.4.2.jar
+commons-grant/jars/commons-grant-1.0-b1.jar
+commons-grant/jars/commons-grant-1.0-beta-2.jar
+commons-grant/jars/commons-grant-1.0-beta-3.jar
+commons-grant/jars/commons-grant-1.0-beta-4.jar
+commons-grant/jars/commons-grant-1.0-beta-5.jar
+commons-graph/jars/commons-graph-0.8.1.jar
+commons-graph/jars/commons-graph-0.8.jar
+commons-http/jars/commons-http-1.1.jar
+commons-httpclient/jars/commons-httpclient-1.0.jar
+commons-httpclient/jars/commons-httpclient-2.0-alpha1-javadoc.jar
+commons-httpclient/jars/commons-httpclient-2.0-alpha2-javadoc.jar
+commons-httpclient/jars/commons-httpclient-2.0.jar
+commons-httpclient/jars/commons-httpclient-3.0.jar
+commons-httpclient/jars/commons-httpclient-2.0-alpha2.20020903.070259.jar
+commons-httpclient/jars/commons-httpclient-2.0-alpha2.20021115.044352.jar
+commons-httpclient/jars/commons-httpclient-2.0-alpha2.jar
+commons-httpclient/jars/commons-httpclient-2.0-alpha3-javadoc.jar
+commons-httpclient/jars/commons-httpclient-2.0-alpha3.jar
+commons-httpclient/jars/commons-httpclient-2.0-beta1-javadoc.jar
+commons-httpclient/jars/commons-httpclient-2.0-beta1.jar
+commons-httpclient/jars/commons-httpclient-2.0-beta2-javadoc.jar
+commons-httpclient/jars/commons-httpclient-2.0-beta2.jar
+commons-httpclient/jars/commons-httpclient-2.0-dev.20020705.071400.jar
+commons-httpclient/jars/commons-httpclient-2.0-dev.jar
+commons-httpclient/jars/commons-httpclient-2.0-javadoc.jar
+commons-httpclient/jars/commons-httpclient-2.0-rc1-javadoc.jar
+commons-httpclient/jars/commons-httpclient-2.0-rc1.jar
+commons-httpclient/jars/commons-httpclient-2.0-rc2-javadoc.jar
+commons-httpclient/jars/commons-httpclient-2.0-rc2.jar
+commons-httpclient/jars/commons-httpclient-2.0-rc3-javadoc.jar
+commons-httpclient/jars/commons-httpclient-2.0-rc3.jar
+commons-httpclient/jars/commons-httpclient-2.0.1-javadoc.jar
+commons-httpclient/jars/commons-httpclient-2.0.1.jar
+commons-httpclient/jars/commons-httpclient-2.0.2-javadoc.jar
+commons-httpclient/jars/commons-httpclient-2.0.2.jar
+commons-httpclient/jars/commons-httpclient-2.0alpha1-20020606.jar
+commons-httpclient/jars/commons-httpclient-2.0alpha1-20020829.jar
+commons-httpclient/jars/commons-httpclient-2.0alpha1.jar
+commons-httpclient/jars/commons-httpclient-20020423.jar
+commons-httpclient/jars/commons-httpclient-3.0-alpha1-javadoc.jar
+commons-httpclient/jars/commons-httpclient-3.0-beta1.jar
+commons-httpclient/jars/commons-httpclient-3.1.jar
+commons-httpclient/jars/commons-httpclient-3.0-alpha1.jar
+commons-httpclient/jars/commons-httpclient-3.0-alpha2-javadoc.jar
+commons-httpclient/jars/commons-httpclient-3.0-alpha2.jar
+commons-httpclient/jars/commons-httpclient-3.0-beta1-javadoc.jar
+commons-httpclient/jars/commons-httpclient-3.0-rc1-javadoc.jar
+commons-httpclient/jars/commons-httpclient-3.0-rc1.jar
+commons-httpclient/jars/commons-httpclient-3.0-rc2-javadoc.jar
+commons-httpclient/jars/commons-httpclient-3.0-rc2.jar
+commons-httpclient/jars/commons-httpclient-3.0-rc3-javadoc.jar
+commons-httpclient/jars/commons-httpclient-3.0-rc3.jar
+commons-httpclient/jars/commons-httpclient-3.0-rc4-javadoc.jar
+commons-httpclient/jars/commons-httpclient-3.0-rc4.jar
+commons-httpclient/jars/commons-httpclient-3.0.1.jar
+commons-httpclient/jars/commons-httpclient-3.1-alpha1.jar
+commons-httpclient/jars/commons-httpclient-3.1-beta1.jar
+commons-httpclient/jars/commons-httpclient-3.1-rc1.jar
+commons-httpclient/poms/commons-httpclient-3.0alpha2.pom
+commons-httpclient/poms/commons-httpclient-2.0.2.pom
+commons-httpclient/poms/commons-httpclient-3.0.1.pom
+commons-httpclient/poms/commons-httpclient-3.0.pom
+commons-httpclient/poms/commons-httpclient-3.1-alpha1.pom
+commons-httpclient/poms/commons-httpclient-3.0beta1.pom
+commons-httpclient/poms/commons-httpclient-3.0rc1.pom
+commons-httpclient/poms/commons-httpclient-3.0rc2.pom
+commons-httpclient/poms/commons-httpclient-3.0rc3.pom
+commons-httpclient/poms/commons-httpclient-3.0rc4.pom
+commons-httpclient/poms/commons-httpclient-3.1-beta1.pom
+commons-httpclient/poms/commons-httpclient-3.1-rc1.pom
+commons-httpclient/poms/commons-httpclient-3.1.pom
+commons-i18n/distributions/commons-i18n-0.3-src.tar.gz
+commons-i18n/distributions/commons-i18n-0.3-src.zip
+commons-i18n/distributions/commons-i18n-0.3.tar.gz
+commons-i18n/distributions/commons-i18n-0.3.zip
+commons-i18n/distributions/commons-i18n-0.4-src.tar.gz
+commons-i18n/distributions/commons-i18n-0.4-src.zip
+commons-i18n/distributions/commons-i18n-0.4.tar.gz
+commons-i18n/distributions/commons-i18n-0.4.zip
+commons-i18n/distributions/commons-i18n-0.5-src.tar.gz
+commons-i18n/distributions/commons-i18n-0.5-src.zip
+commons-i18n/distributions/commons-i18n-0.5.tar.gz
+commons-i18n/distributions/commons-i18n-0.5.zip
+commons-i18n/jars/commons-i18n-0.4.jar
+commons-i18n/jars/commons-i18n-0.5.jar
+commons-i18n/poms/commons-i18n-0.3.pom
+commons-i18n/poms/commons-i18n-0.4.pom
+commons-i18n/poms/commons-i18n-0.5.pom
+commons-io/jars/commons-io-0.1.jar
+commons-io/jars/commons-io-0.2-dev.20020614.122300.jar
+commons-io/jars/commons-io-0.2-dev.20020717.100545.jar
+commons-io/jars/commons-io-1.0-javadoc.jar
+commons-io/jars/commons-io-1.0.jar
+commons-io/jars/commons-io-1.3.jar
+commons-io/jars/commons-io-1.1-javadoc.jar
+commons-io/jars/commons-io-1.1.jar
+commons-io/jars/commons-io-1.2-javadoc.jar
+commons-io/jars/commons-io-1.2.jar
+commons-io/jars/commons-io-20030203.000550.jar
+commons-io/jars/commons-io-1.3-javadoc.jar
+commons-io/jars/commons-io-1.3-sources.jar
+commons-io/jars/commons-io-1.3.1-javadoc.jar
+commons-io/jars/commons-io-1.3.1.jar
+commons-io/jars/commons-io-1.3.1-sources.jar
+commons-io/poms/commons-io-1.0.pom
+commons-io/poms/commons-io-1.1.pom
+commons-io/poms/commons-io-1.2.pom
+commons-io/poms/commons-io-1.3.pom
+commons-io/poms/commons-io-1.3.1.pom
+commons-jdbc2pool/jars/commons-jdbc2pool-1.0-dev.jar
+commons-jelly/distributions/KEYS
+commons-jelly/distributions/commons-jelly-1.0-beta-3-src.tar.gz
+commons-jelly/distributions/commons-jelly-1.0-beta-3-src.zip
+commons-jelly/distributions/commons-jelly-1.0-beta-3.tar.gz
+commons-jelly/distributions/commons-jelly-1.0-beta-3.zip
+commons-jelly/distributions/commons-jelly-1.0-beta-4-src.tar.gz
+commons-jelly/distributions/commons-jelly-1.0-beta-4-src.zip
+commons-jelly/distributions/commons-jelly-1.0-beta-4.tar.gz
+commons-jelly/distributions/commons-jelly-1.0-beta-4.zip
+commons-jelly/distributions/commons-jelly-1.0-dev-src.tar.gz
+commons-jelly/distributions/commons-jelly-1.0-dev-src.zip
+commons-jelly/distributions/commons-jelly-1.0-dev.tar.gz
+commons-jelly/distributions/commons-jelly-1.0-dev.zip
+commons-jelly/jars/commons-jelly-1.0-RC1-javadoc.jar
+commons-jelly/jars/commons-jelly-1.0-RC1.jar
+commons-jelly/jars/commons-jelly-1.0-beta-1.jar
+commons-jelly/jars/commons-jelly-1.0-beta-2.jar
+commons-jelly/jars/commons-jelly-1.0-dev.20020714.020704.jar
+commons-jelly/jars/commons-jelly-1.0-beta-3.20020819.043231.jar
+commons-jelly/jars/commons-jelly-1.0-beta-3.20020819.043406.jar
+commons-jelly/jars/commons-jelly-1.0-beta-3.20020820.043616.jar
+commons-jelly/jars/commons-jelly-1.0-beta-3.20020828.023547.jar
+commons-jelly/jars/commons-jelly-1.0-beta-3.20020828.032644.jar
+commons-jelly/jars/commons-jelly-1.0-beta-3.20020904.063114.jar
+commons-jelly/jars/commons-jelly-1.0-beta-3.20020910.061420.jar
+commons-jelly/jars/commons-jelly-1.0-beta-3.20020911.045717.jar
+commons-jelly/jars/commons-jelly-1.0-beta-3.jar
+commons-jelly/jars/commons-jelly-1.0-beta-3.20020913.010946.jar
+commons-jelly/jars/commons-jelly-1.0-beta-3.20020913.120853.jar
+commons-jelly/jars/commons-jelly-1.0-beta-4-javadoc.jar
+commons-jelly/jars/commons-jelly-1.0-beta-4.20020923.123659.jar
+commons-jelly/jars/commons-jelly-1.0-beta-4.20020924.123511.jar
+commons-jelly/jars/commons-jelly-1.0-beta-4.20021002.050543.jar
+commons-jelly/jars/commons-jelly-1.0-beta-4.20021002.113628.jar
+commons-jelly/jars/commons-jelly-1.0-beta-4.20021005.025546.jar
+commons-jelly/jars/commons-jelly-1.0-beta-4.20021005.070650.jar
+commons-jelly/jars/commons-jelly-1.0-beta-4.20021008.094131.jar
+commons-jelly/jars/commons-jelly-1.0-beta-4.20021008.112820.jar
+commons-jelly/jars/commons-jelly-1.0-beta-4.20021012.035615.jar
+commons-jelly/jars/commons-jelly-1.0-beta-4.jar
+commons-jelly/jars/commons-jelly-1.0-beta-4.20021017.053011.jar
+commons-jelly/jars/commons-jelly-1.0-beta-4.20021023.094006.jar
+commons-jelly/jars/commons-jelly-1.0-beta-4.20021023.153932.jar
+commons-jelly/jars/commons-jelly-1.0-beta-4.20021105.013628.jar
+commons-jelly/jars/commons-jelly-1.0-beta-4.20021112.084337.jar
+commons-jelly/jars/commons-jelly-1.0-beta-4.20021113.125954.jar
+commons-jelly/jars/commons-jelly-1.0-beta-4.20021113.192421.jar
+commons-jelly/jars/commons-jelly-1.0-beta-4.20021120.034859.jar
+commons-jelly/jars/commons-jelly-1.0-javadoc.jar
+commons-jelly/jars/commons-jelly-1.0-beta-4.20021210.123241.jar
+commons-jelly/jars/commons-jelly-1.0-beta-4.20021222.042553.jar
+commons-jelly/jars/commons-jelly-1.0-beta-4.20021231.013337.jar
+commons-jelly/jars/commons-jelly-1.0-beta-4.20021231.034645.jar
+commons-jelly/jars/commons-jelly-20030211.141339.jar
+commons-jelly/jars/commons-jelly-1.0-beta-4.20030104.110205.jar
+commons-jelly/jars/commons-jelly-1.0-dev.20020711.024953.jar
+commons-jelly/jars/commons-jelly-1.0-dev.20020713.015328.jar
+commons-jelly/jars/commons-jelly-1.0-dev.20020713.020804.jar
+commons-jelly/jars/commons-jelly-1.0.jar
+commons-jelly/jars/commons-jelly-1.0-dev.20020715.041648.jar
+commons-jelly/jars/commons-jelly-1.0-dev.20020715.044906.jar
+commons-jelly/jars/commons-jelly-1.0-dev.20020715.045302.jar
+commons-jelly/jars/commons-jelly-1.0-dev.20020715.100851.jar
+commons-jelly/jars/commons-jelly-1.0-dev.20020715.112252.jar
+commons-jelly/jars/commons-jelly-1.0-dev.20020716.055015.jar
+commons-jelly/jars/commons-jelly-1.0-dev.20020716.064746.jar
+commons-jelly/jars/commons-jelly-1.0-dev.20020716.065225.jar
+commons-jelly/jars/commons-jelly-1.0-dev.20020719.074608.jar
+commons-jelly/jars/commons-jelly-1.0-dev.20020719.082922.jar
+commons-jelly/jars/commons-jelly-1.0-dev.20020720.080105.jar
+commons-jelly/jars/commons-jelly-1.0-dev.20020731.041103.jar
+commons-jelly/jars/commons-jelly-1.0-dev.20020731.122236.jar
+commons-jelly/jars/commons-jelly-1.0-dev.20020811.014845.jar
+commons-jelly/jars/commons-jelly-1.0-dev.20021021.132700.jar
+commons-jelly/jars/commons-jelly-20030303.054314.jar
+commons-jelly/jars/commons-jelly-20030310.073407.jar
+commons-jelly/jars/commons-jelly-snapshot-version
+commons-jelly/jars/commons-jelly-20030303.180550.jar
+commons-jelly/jars/commons-jelly-20030305.075341.jar
+commons-jelly/jars/commons-jelly-20030307.121112.jar
+commons-jelly/jars/commons-jelly-20030307.135732.jar
+commons-jelly/jars/commons-jelly-20030308.101032.jar
+commons-jelly/jars/commons-jelly-20030320.080622.jar
+commons-jelly/jars/commons-jelly-20030320.080836.jar
+commons-jelly/jars/commons-jelly-20030320.165458.jar
+commons-jelly/jars/commons-jelly-20030522.212428.jar
+commons-jelly/jars/commons-jelly-20030609.133047.jar
+commons-jelly/jars/commons-jelly-20030711.034327.jar
+commons-jelly/jars/commons-jelly-avalon-20030211.143621.jar
+commons-jelly/jars/commons-jelly-20030724.033229.jar
+commons-jelly/jars/commons-jelly-20030902.160215.jar
+commons-jelly/jars/commons-jelly-20040902.064518.jar
+commons-jelly/jars/commons-jelly-20040902.070806.jar
+commons-jelly/jars/commons-jelly-avalon-snapshot-version
+commons-jelly/jars/commons-jelly-tags-ant-1.0.jar
+commons-jelly/jars/commons-jelly-tags-ant-1.1.jar
+commons-jelly/jars/commons-jelly-tags-ant-20030211.142045.jar
+commons-jelly/jars/commons-jelly-tags-ant-20040902.000000.jar
+commons-jelly/jars/commons-jelly-tags-bean-1.0.jar
+commons-jelly/jars/commons-jelly-tags-ant-20030310.080026.jar
+commons-jelly/jars/commons-jelly-tags-ant-20030625.025346.jar
+commons-jelly/jars/commons-jelly-tags-ant-20030625.025706.jar
+commons-jelly/jars/commons-jelly-tags-ant-20030625.032346.jar
+commons-jelly/jars/commons-jelly-tags-dynabean-snapshot-version
+commons-jelly/jars/commons-jelly-tags-ant-20040902.071105.jar
+commons-jelly/jars/commons-jelly-tags-ant-snapshot-version
+commons-jelly/jars/commons-jelly-tags-antlr-1.0.jar
+commons-jelly/jars/commons-jelly-tags-antlr-20030211.143720.jar
+commons-jelly/jars/commons-jelly-tags-antlr-20040902.071159.jar
+commons-jelly/jars/commons-jelly-tags-antlr-snapshot-version
+commons-jelly/jars/commons-jelly-tags-avalon-1.0.jar
+commons-jelly/jars/commons-jelly-tags-avalon-20040902.071300.jar
+commons-jelly/jars/commons-jelly-tags-avalon-snapshot-version
+commons-jelly/jars/commons-jelly-tags-bean-20030211.144357.jar
+commons-jelly/jars/commons-jelly-tags-betwixt-1.0.jar
+commons-jelly/jars/commons-jelly-tags-bean-20030320.165723.jar
+commons-jelly/jars/commons-jelly-tags-bean-20040902.071526.jar
+commons-jelly/jars/commons-jelly-tags-bean-snapshot-version
+commons-jelly/jars/commons-jelly-tags-beanshell-1.0.jar
+commons-jelly/jars/commons-jelly-tags-beanshell-20030211.141835.jar
+commons-jelly/jars/commons-jelly-tags-beanshell-20040902.071629.jar
+commons-jelly/jars/commons-jelly-tags-beanshell-snapshot-version
+commons-jelly/jars/commons-jelly-tags-betwixt-1.0-beta-1.20030104.095958.jar
+commons-jelly/jars/commons-jelly-tags-betwixt-20030211.144504.jar
+commons-jelly/jars/commons-jelly-tags-betwixt-20040902.071752.jar
+commons-jelly/jars/commons-jelly-tags-betwixt-snapshot-version
+commons-jelly/jars/commons-jelly-tags-bsf-1.0.jar
+commons-jelly/jars/commons-jelly-tags-bsf-20030211.142259.jar
+commons-jelly/jars/commons-jelly-tags-bsf-20030305.080050.jar
+commons-jelly/jars/commons-jelly-tags-fmt-1.0.jar
+commons-jelly/jars/commons-jelly-tags-bsf-20040902.071900.jar
+commons-jelly/jars/commons-jelly-tags-bsf-snapshot-version
+commons-jelly/jars/commons-jelly-tags-define-1.0.jar
+commons-jelly/jars/commons-jelly-tags-define-20030211.142932.jar
+commons-jelly/jars/commons-jelly-tags-define-20040902.072141.jar
+commons-jelly/jars/commons-jelly-tags-define-snapshot-version
+commons-jelly/jars/commons-jelly-tags-dynabean-1.0.jar
+commons-jelly/jars/commons-jelly-tags-dynabean-20030211.142601.jar
+commons-jelly/jars/commons-jelly-tags-dynabean-20040902.071946.jar
+commons-jelly/jars/commons-jelly-tags-email-1.0.jar
+commons-jelly/jars/commons-jelly-tags-email-20030211.144034.jar
+commons-jelly/jars/commons-jelly-tags-email-20040902.072224.jar
+commons-jelly/jars/commons-jelly-tags-email-snapshot-version
+commons-jelly/jars/commons-jelly-tags-fmt-20030211.142201.jar
+commons-jelly/jars/commons-jelly-tags-html-1.0.jar
+commons-jelly/jars/commons-jelly-tags-fmt-20040902.072321.jar
+commons-jelly/jars/commons-jelly-tags-fmt-snapshot-version
+commons-jelly/jars/commons-jelly-tags-html-1.0-beta-1.20030104.103227.jar
+commons-jelly/jars/commons-jelly-tags-html-20030211.143308.jar
+commons-jelly/jars/commons-jelly-tags-html-20030317.100924.jar
+commons-jelly/jars/commons-jelly-tags-html-20040902.072530.jar
+commons-jelly/jars/commons-jelly-tags-html-snapshot-version
+commons-jelly/jars/commons-jelly-tags-http-1.0-beta-1.20030104.141847.jar
+commons-jelly/jars/commons-jelly-tags-http-1.0.jar
+commons-jelly/jars/commons-jelly-tags-jaxme-1.0.jar
+commons-jelly/jars/commons-jelly-tags-http-20030211.143043.jar
+commons-jelly/jars/commons-jelly-tags-http-20040902.072620.jar
+commons-jelly/jars/commons-jelly-tags-http-snapshot-version
+commons-jelly/jars/commons-jelly-tags-interaction-1.0.jar
+commons-jelly/jars/commons-jelly-tags-interaction-1.1.jar
+commons-jelly/jars/commons-jelly-tags-jetty-1.0.jar
+commons-jelly/jars/commons-jelly-tags-interaction-20030211.143817.jar
+commons-jelly/jars/commons-jelly-tags-interaction-20040902.072702.jar
+commons-jelly/jars/commons-jelly-tags-interaction-snapshot-version
+commons-jelly/jars/commons-jelly-tags-jaxme-20040902.072852.jar
+commons-jelly/jars/commons-jelly-tags-jms-1.0.jar
+commons-jelly/jars/commons-jelly-tags-jms-20030211.142459.jar
+commons-jelly/jars/commons-jelly-tags-jaxme-snapshot-version
+commons-jelly/jars/commons-jelly-tags-jetty-1.0-beta-1.20030104.151258.jar
+commons-jelly/jars/commons-jelly-tags-jetty-20030211.144139.jar
+commons-jelly/jars/commons-jelly-tags-jetty-20040902.072943.jar
+commons-jelly/jars/commons-jelly-tags-jface-1.0.jar
+commons-jelly/jars/commons-jelly-tags-jetty-snapshot-version
+commons-jelly/jars/commons-jelly-tags-jface-20040902.073130.jar
+commons-jelly/jars/commons-jelly-tags-jface-snapshot-version
+commons-jelly/jars/commons-jelly-tags-jms-20040902.073216.jar
+commons-jelly/jars/commons-jelly-tags-jmx-1.0.jar
+commons-jelly/jars/commons-jelly-tags-jmx-20030320.165705.jar
+commons-jelly/jars/commons-jelly-tags-jms-snapshot-version
+commons-jelly/jars/commons-jelly-tags-jmx-20030320.165904.jar
+commons-jelly/jars/commons-jelly-tags-jmx-20040902.073310.jar
+commons-jelly/jars/commons-jelly-tags-jsl-1.0.jar
+commons-jelly/jars/commons-jelly-tags-jsl-20030211.143151.jar
+commons-jelly/jars/commons-jelly-tags-jmx-snapshot-version
+commons-jelly/jars/commons-jelly-tags-jsl-20040902.072431.jar
+commons-jelly/jars/commons-jelly-tags-jsl-snapshot-version
+commons-jelly/jars/commons-jelly-tags-junit-1.0.jar
+commons-jelly/jars/commons-jelly-tags-junit-snapshot-version
+commons-jelly/jars/commons-jelly-tags-junit-20030211.141731.jar
+commons-jelly/jars/commons-jelly-tags-junit-20040902.064627.jar
+commons-jelly/jars/commons-jelly-tags-junit-20040902.070920.jar
+commons-jelly/jars/commons-jelly-tags-log-1.0.jar
+commons-jelly/jars/commons-jelly-tags-log-20030211.142821.jar
+commons-jelly/jars/commons-jelly-tags-log-20040902.071410.jar
+commons-jelly/jars/commons-jelly-tags-log-snapshot-version
+commons-jelly/jars/commons-jelly-tags-ojb-1.0.jar
+commons-jelly/jars/commons-jelly-tags-ojb-20030211.141630.jar
+commons-jelly/jars/commons-jelly-tags-ojb-20040902.073352.jar
+commons-jelly/jars/commons-jelly-tags-ojb-snapshot-version
+commons-jelly/jars/commons-jelly-tags-quartz-1.0.jar
+commons-jelly/jars/commons-jelly-tags-quartz-20030211.144716.jar
+commons-jelly/jars/commons-jelly-tags-quartz-20040902.073433.jar
+commons-jelly/jars/commons-jelly-tags-quartz-snapshot-version
+commons-jelly/jars/commons-jelly-tags-regexp-1.0.jar
+commons-jelly/jars/commons-jelly-tags-soap-20030211.142401.jar
+commons-jelly/jars/commons-jelly-tags-soap-1.0.jar
+commons-jelly/jars/commons-jelly-tags-soap-20040902.073516.jar
+commons-jelly/jars/commons-jelly-tags-soap-snapshot-version
+commons-jelly/jars/commons-jelly-tags-sql-1.0.jar
+commons-jelly/jars/commons-jelly-tags-sql-20030211.144816.jar
+commons-jelly/jars/commons-jelly-tags-sql-20040902.073600.jar
+commons-jelly/jars/commons-jelly-tags-sql-snapshot-version
+commons-jelly/jars/commons-jelly-tags-swing-1.0-beta-1.20030104.104105.jar
+commons-jelly/jars/commons-jelly-tags-swing-1.0.jar
+commons-jelly/jars/commons-jelly-tags-swing-20030211.143925.jar
+commons-jelly/jars/commons-jelly-tags-swing-20040902.073656.jar
+commons-jelly/jars/commons-jelly-tags-swing-snapshot-version
+commons-jelly/jars/commons-jelly-tags-swt-1.0.jar
+commons-jelly/jars/commons-jelly-tags-swt-20030211.144614.jar
+commons-jelly/jars/commons-jelly-tags-swt-20030226.103913.jar
+commons-jelly/jars/commons-jelly-tags-util-1.0.jar
+commons-jelly/jars/commons-jelly-tags-swt-20030226.122214.jar
+commons-jelly/jars/commons-jelly-tags-swt-20040902.073028.jar
+commons-jelly/jars/commons-jelly-tags-swt-snapshot-version
+commons-jelly/jars/commons-jelly-tags-threads-1.0.jar
+commons-jelly/jars/commons-jelly-tags-threads-20030211.143515.jar
+commons-jelly/jars/commons-jelly-tags-threads-20040902.073749.jar
+commons-jelly/jars/commons-jelly-tags-threads-snapshot-version
+commons-jelly/jars/commons-jelly-tags-util-1.1.1.jar
+commons-jelly/jars/commons-jelly-tags-util-1.1.jar
+commons-jelly/jars/commons-jelly-tags-util-20030211.141939.jar
+commons-jelly/jars/commons-jelly-tags-util-20040902.071012.jar
+commons-jelly/jars/commons-jelly-tags-util-snapshot-version
+commons-jelly/jars/commons-jelly-tags-validate-1.0.jar
+commons-jelly/jars/commons-jelly-tags-validate-20030211.143411.jar
+commons-jelly/jars/commons-jelly-tags-validate-20030420.031608.jar
+commons-jelly/jars/commons-jelly-tags-validate-20030420.041030.jar
+commons-jelly/jars/commons-jelly-tags-validate-20040902.073836.jar
+commons-jelly/jars/commons-jelly-tags-validate-snapshot-version
+commons-jelly/jars/commons-jelly-tags-velocity-1.0.jar
+commons-jelly/jars/commons-jelly-tags-velocity-20030211.144921.jar
+commons-jelly/jars/commons-jelly-tags-velocity-20030303.205659.jar
+commons-jelly/jars/commons-jelly-tags-velocity-20040902.073917.jar
+commons-jelly/jars/commons-jelly-tags-velocity-snapshot-version
+commons-jelly/jars/commons-jelly-tags-xml-1.0.jar
+commons-jelly/jars/commons-jelly-tags-xml-1.1.jar
+commons-jelly/jars/commons-jelly-tags-xml-20030211.142705.jar
+commons-jelly/jars/commons-jelly-tags-xml-20040902.072037.jar
+commons-jelly/jars/commons-jelly-tags-xml-snapshot-version
+commons-jelly/jars/commons-jelly-tags-xmlunit-1.0.jar
+commons-jelly/jars/commons-jelly-tags-xmlunit-20030211.144251.jar
+commons-jelly/jars/commons-jelly-tags-xmlunit-20040902.072757.jar
+commons-jelly/jars/commons-jelly-tags-xmlunit-snapshot-version
+commons-jelly/poms/commons-jelly-1.0-RC1.pom
+commons-jelly/poms/commons-jelly-1.0.pom
+commons-jelly/poms/commons-jelly-20040902.064518.pom
+commons-jelly/poms/commons-jelly-tags-ant-20040902.000000.pom
+commons-jelly/poms/commons-jelly-20040902.070806.pom
+commons-jelly/poms/commons-jelly-snapshot-version
+commons-jelly/poms/commons-jelly-tags-ant-1.1.pom
+commons-jelly/poms/commons-jelly-tags-ant-20040902.071105.pom
+commons-jelly/poms/commons-jelly-tags-ant-snapshot-version
+commons-jelly/poms/commons-jelly-tags-antlr-20040902.071159.pom
+commons-jelly/poms/commons-jelly-tags-avalon-20040902.071300.pom
+commons-jelly/poms/commons-jelly-tags-antlr-snapshot-version
+commons-jelly/poms/commons-jelly-tags-avalon-snapshot-version
+commons-jelly/poms/commons-jelly-tags-bean-20040902.071526.pom
+commons-jelly/poms/commons-jelly-tags-bean-snapshot-version
+commons-jelly/poms/commons-jelly-tags-beanshell-20040902.071629.pom
+commons-jelly/poms/commons-jelly-tags-beanshell-snapshot-version
+commons-jelly/poms/commons-jelly-tags-betwixt-20040902.071752.pom
+commons-jelly/poms/commons-jelly-tags-betwixt-snapshot-version
+commons-jelly/poms/commons-jelly-tags-bsf-20040902.071900.pom
+commons-jelly/poms/commons-jelly-tags-define-20040902.072141.pom
+commons-jelly/poms/commons-jelly-tags-bsf-snapshot-version
+commons-jelly/poms/commons-jelly-tags-define-snapshot-version
+commons-jelly/poms/commons-jelly-tags-dynabean-20040902.071946.pom
+commons-jelly/poms/commons-jelly-tags-dynabean-snapshot-version
+commons-jelly/poms/commons-jelly-tags-email-20040902.072224.pom
+commons-jelly/poms/commons-jelly-tags-email-snapshot-version
+commons-jelly/poms/commons-jelly-tags-fmt-20040902.072321.pom
+commons-jelly/poms/commons-jelly-tags-fmt-snapshot-version
+commons-jelly/poms/commons-jelly-tags-html-20040902.072530.pom
+commons-jelly/poms/commons-jelly-tags-html-snapshot-version
+commons-jelly/poms/commons-jelly-tags-http-20040902.072620.pom
+commons-jelly/poms/commons-jelly-tags-http-snapshot-version
+commons-jelly/poms/commons-jelly-tags-interaction-1.1.pom
+commons-jelly/poms/commons-jelly-tags-interaction-20040902.072702.pom
+commons-jelly/poms/commons-jelly-tags-interaction-snapshot-version
+commons-jelly/poms/commons-jelly-tags-jaxme-20040902.072852.pom
+commons-jelly/poms/commons-jelly-tags-jaxme-snapshot-version
+commons-jelly/poms/commons-jelly-tags-jetty-20040902.072943.pom
+commons-jelly/poms/commons-jelly-tags-jetty-snapshot-version
+commons-jelly/poms/commons-jelly-tags-jface-20040902.073130.pom
+commons-jelly/poms/commons-jelly-tags-jface-snapshot-version
+commons-jelly/poms/commons-jelly-tags-jms-20040902.073216.pom
+commons-jelly/poms/commons-jelly-tags-jms-snapshot-version
+commons-jelly/poms/commons-jelly-tags-jmx-20040902.073310.pom
+commons-jelly/poms/commons-jelly-tags-jmx-snapshot-version
+commons-jelly/poms/commons-jelly-tags-jsl-20040902.072431.pom
+commons-jelly/poms/commons-jelly-tags-xml-1.1.pom
+commons-jelly/poms/commons-jelly-tags-jsl-snapshot-version
+commons-jelly/poms/commons-jelly-tags-junit-20040902.064627.pom
+commons-jelly/poms/commons-jelly-tags-junit-20040902.070920.pom
+commons-jelly/poms/commons-jelly-tags-junit-snapshot-version
+commons-jelly/poms/commons-jelly-tags-log-20040902.071410.pom
+commons-jelly/poms/commons-jelly-tags-log-snapshot-version
+commons-jelly/poms/commons-jelly-tags-ojb-20040902.073352.pom
+commons-jelly/poms/commons-jelly-tags-ojb-snapshot-version
+commons-jelly/poms/commons-jelly-tags-quartz-20040902.073433.pom
+commons-jelly/poms/commons-jelly-tags-quartz-snapshot-version
+commons-jelly/poms/commons-jelly-tags-soap-20040902.073516.pom
+commons-jelly/poms/commons-jelly-tags-soap-snapshot-version
+commons-jelly/poms/commons-jelly-tags-sql-20040902.073600.pom
+commons-jelly/poms/commons-jelly-tags-sql-snapshot-version
+commons-jelly/poms/commons-jelly-tags-swing-20040902.073656.pom
+commons-jelly/poms/commons-jelly-tags-swing-snapshot-version
+commons-jelly/poms/commons-jelly-tags-swt-20040902.073028.pom
+commons-jelly/poms/commons-jelly-tags-swt-snapshot-version
+commons-jelly/poms/commons-jelly-tags-threads-20040902.073749.pom
+commons-jelly/poms/commons-jelly-tags-threads-snapshot-version
+commons-jelly/poms/commons-jelly-tags-util-20040902.064720.pom
+commons-jelly/poms/commons-jelly-tags-util-20040902.071012.pom
+commons-jelly/poms/commons-jelly-tags-util-snapshot-version
+commons-jelly/poms/commons-jelly-tags-validate-20040902.073836.pom
+commons-jelly/poms/commons-jelly-tags-validate-snapshot-version
+commons-jelly/poms/commons-jelly-tags-velocity-20040902.073917.pom
+commons-jelly/poms/commons-jelly-tags-velocity-snapshot-version
+commons-jelly/poms/commons-jelly-tags-xml-20040902.072037.pom
+commons-jelly/poms/commons-jelly-tags-xml-snapshot-version
+commons-jelly/poms/commons-jelly-tags-xmlunit-20040902.072757.pom
+commons-jelly/poms/commons-jelly-tags-xmlunit-snapshot-version
+commons-jexl/distributions/KEYS
+commons-jexl/distributions/commons-jexl-1.0-RC1-src.tar.gz
+commons-jexl/distributions/commons-jexl-1.0-RC1-src.zip
+commons-jexl/distributions/commons-jexl-1.0-RC1.tar.gz
+commons-jexl/distributions/commons-jexl-1.0-RC1.zip
+commons-jexl/distributions/commons-jexl-1.0-src.tar.gz
+commons-jexl/distributions/commons-jexl-1.0-src.zip
+commons-jexl/distributions/commons-jexl-1.0.tar.gz
+commons-jexl/distributions/commons-jexl-1.0.zip
+commons-jexl/jars/commons-jexl-1.0-RC1.jar
+commons-jexl/jars/commons-jexl-1.0-beta-1.jar
+commons-jexl/jars/commons-jexl-1.0-beta-2.jar
+commons-jexl/jars/commons-jexl-1.0-dev.20020731.122830.jar
+commons-jexl/jars/commons-jexl-1.0-dev.jar
+commons-jexl/jars/commons-jexl-1.0-javadoc.jar
+commons-jexl/jars/commons-jexl-1.0.jar
+commons-jexl/jars/commons-jexl-20030307.151331.jar
+commons-jexl/jars/commons-jexl-20040901.055348.jar
+commons-jexl/jars/commons-jexl-snapshot-version
+commons-jexl/poms/commons-jexl-1.0-RC1.pom
+commons-jexl/poms/commons-jexl-20040901.055348.pom
+commons-jexl/poms/commons-jexl-snapshot-version
+commons-jux/jars/commons-jux-20030306.065700.jar
+commons-jux/jars/commons-jux-snapshot-version
+commons-jxpath/jars/commons-jxpath-0.1-dev.jar
+commons-jxpath/jars/commons-jxpath-1.0-javadoc.jar
+commons-jxpath/jars/commons-jxpath-1.0.jar
+commons-jxpath/jars/commons-jxpath-1.1-javadoc.jar
+commons-jxpath/jars/commons-jxpath-1.1.jar
+commons-jxpath/jars/commons-jxpath-1.2.jar
+commons-jxpath/poms/commons-jxpath-1.0.pom
+commons-jxpath/poms/commons-jxpath-1.1.pom
+commons-jxpath/poms/commons-jxpath-1.2.pom
+commons-lang/distributions/commons-lang-2.0.zip
+commons-lang/jars/commons-lang-0.1-dev.jar
+commons-lang/jars/commons-lang-1.0-b1.1.jar
+commons-lang/jars/commons-lang-1.0-b1.jar
+commons-lang/jars/commons-lang-2.3-javadoc.jar
+commons-lang/jars/commons-lang-1.0-dev.20020910.034641.jar
+commons-lang/jars/commons-lang-1.0-dev.jar
+commons-lang/jars/commons-lang-1.0-javadoc.jar
+commons-lang/jars/commons-lang-1.0.1-javadoc.jar
+commons-lang/jars/commons-lang-1.0.1.jar
+commons-lang/jars/commons-lang-1.0.jar
+commons-lang/jars/commons-lang-1.1-dev.20021217.062015.jar
+commons-lang/jars/commons-lang-2.0-dev.20030203.000129.jar
+commons-lang/jars/commons-lang-2.0-javadoc.jar
+commons-lang/jars/commons-lang-2.0.jar
+commons-lang/jars/commons-lang-2.1-javadoc.jar
+commons-lang/jars/commons-lang-2.1.jar
+commons-lang/jars/commons-lang-snapshot-version
+commons-lang/jars/commons-lang-2.3.jar
+commons-lang/jars/commons-lang-2.3-sources.jar
+commons-lang/poms/commons-lang-1.0.1.pom
+commons-lang/poms/commons-lang-1.0.pom
+commons-lang/poms/commons-lang-2.0.pom
+commons-lang/poms/commons-lang-2.1.pom
+commons-lang/poms/commons-lang-2.3.pom
+commons-latka/jars/commons-latka-1.0-alpha1-javadoc.jar
+commons-latka/jars/commons-latka-1.0-dev.20021208.082252.jar
+commons-latka/jars/commons-latka-1.0-dev.20021208.125541.jar
+commons-latka/jars/commons-latka-1.0-dev.20021208.130300.jar
+commons-latka/jars/commons-latka-1.0-dev.20021217.141322.jar
+commons-latka/jars/commons-latka-1.0-dev.20030107.163533.jar
+commons-launcher/jars/commons-launcher-0.9-javadoc.jar
+commons-launcher/jars/commons-launcher-1.1-javadoc.jar
+commons-logging/jars/commons-logging-1.0-javadoc.jar
+commons-logging/jars/commons-logging-1.0.1-javadoc.jar
+commons-logging/jars/commons-logging-1.0.1.jar
+commons-logging/jars/commons-logging-1.0.2-javadoc.jar
+commons-logging/jars/commons-logging-1.0.2.jar
+commons-logging/jars/commons-logging-1.0.3-javadoc.jar
+commons-logging/jars/commons-logging-1.0.3.jar
+commons-logging/jars/commons-logging-1.0.4-javadoc.jar
+commons-logging/jars/commons-logging-1.0.4.jar
+commons-logging/jars/commons-logging-1.0.jar
+commons-logging/jars/commons-logging-1.1-dev.jar
+commons-logging/jars/commons-logging-1.1.jar
+commons-logging/jars/commons-logging-adapters-1.1.jar
+commons-logging/jars/commons-logging-api-1.0.3.jar
+commons-logging/jars/commons-logging-api-1.0.4.jar
+commons-logging/jars/commons-logging-api-1.1.jar
+commons-logging/jars/commons-logging-api-snapshot-version
+commons-logging/jars/commons-logging-snapshot-version
+commons-logging/poms/commons-logging-1.0.1.pom
+commons-logging/poms/commons-logging-1.0.2.pom
+commons-logging/poms/commons-logging-1.0.3.pom
+commons-logging/poms/commons-logging-1.0.4.pom
+commons-logging/poms/commons-logging-1.1.pom
+commons-logging/poms/commons-logging-api-1.1.pom
+commons-math/distributions/commons-math-20040118.003950-src.tar.gz
+commons-math/distributions/commons-math-20040118.003950-src.zip
+commons-math/distributions/commons-math-20040118.003950.tar.gz
+commons-math/distributions/commons-math-20040118.003950.zip
+commons-math/jars/commons-math-1.0-javadoc.jar
+commons-math/jars/commons-math-1.0.jar
+commons-math/jars/commons-math-1.1.jar
+commons-math/jars/commons-math-20040118.003354.jar
+commons-math/jars/commons-math-20040218.045431.jar
+commons-math/jars/commons-math-snapshot-version
+commons-math/poms/commons-math-1.0.pom
+commons-math/poms/commons-math-1.1.pom
+commons-messenger/jars/commons-messenger-1.0-dev-10.jar
+commons-messenger/jars/commons-messenger-1.0-dev-11.jar
+commons-messenger/jars/commons-messenger-1.0-dev-12.jar
+commons-messenger/jars/commons-messenger-1.0-dev-13.jar
+commons-messenger/jars/commons-messenger-1.0-dev-14.jar
+commons-messenger/jars/commons-messenger-1.0-dev-2.jar
+commons-messenger/jars/commons-messenger-1.0-dev-4.jar
+commons-messenger/jars/commons-messenger-1.0-dev-5.jar
+commons-messenger/jars/commons-messenger-1.0-dev-6.jar
+commons-messenger/jars/commons-messenger-1.0-dev-8.jar
+commons-messenger/jars/commons-messenger-1.0-dev.20020708.025623.jar
+commons-messenger/jars/commons-messenger-1.0-dev.20020708.042042.jar
+commons-messenger/jars/commons-messenger-1.0-dev.20020906.115547.jar
+commons-messenger/jars/commons-messenger-1.0-dev.jar
+commons-modeler/jars/commons-modeler-1.0-javadoc.jar
+commons-modeler/jars/commons-modeler-1.1-dev.jar
+commons-modeler/jars/commons-modeler-1.1-javadoc.jar
+commons-modeler/jars/commons-modeler-1.1.jar
+commons-modeler/jars/commons-modeler-2.0.1.jar
+commons-modeler/jars/commons-modeler-1.1M1.jar
+commons-modeler/jars/commons-modeler-2.0.jar
+commons-modeler/jars/commons-modeler-2.0.1-javadoc.jar
+commons-modeler/jars/commons-modeler-2.0.1-sources.jar
+commons-modeler/poms/commons-modeler-1.1.pom
+commons-modeler/poms/commons-modeler-2.0.pom
+commons-modeler/poms/commons-modeler-2.0.1.pom
+commons-naming/jars/commons-naming-core-20031116.223527.jar
+commons-naming/jars/commons-naming-factory-20031116.223742.jar
+commons-naming/jars/commons-naming-core-snapshot-version
+commons-naming/jars/commons-naming-factory-20031201.015542.jar
+commons-naming/jars/commons-naming-factory-snapshot-version
+commons-net/jars/commons-net-1.0.0-javadoc.jar
+commons-net/jars/commons-net-1.0.0.jar
+commons-net/jars/commons-net-1.1.0-javadoc.jar
+commons-net/jars/commons-net-1.1.0.jar
+commons-net/jars/commons-net-1.2.0-javadoc.jar
+commons-net/jars/commons-net-1.2.1-javadoc.jar
+commons-net/jars/commons-net-1.2.1.jar
+commons-net/jars/commons-net-1.2.2-javadoc.jar
+commons-net/jars/commons-net-1.3.0-javadoc.jar
+commons-net/jars/commons-net-1.3.0.jar
+commons-net/jars/commons-net-1.4.0-javadoc.jar
+commons-net/jars/commons-net-1.4.0.jar
+commons-net/jars/commons-net-1.4.1-javadoc.jar
+commons-net/jars/commons-net-1.4.1.jar
+commons-net/jars/commons-net-20030211.160026.jar
+commons-net/jars/commons-net-20030623.125255.jar
+commons-net/jars/commons-net-20030805.205232.jar
+commons-net/jars/commons-net-snapshot-version
+commons-net/poms/commons-net-1.0.0.pom
+commons-net/poms/commons-net-1.1.0.pom
+commons-net/poms/commons-net-1.2.1.pom
+commons-net/poms/commons-net-1.3.0.pom
+commons-net/poms/commons-net-1.4.0.pom
+commons-net/poms/commons-net-1.4.1.pom
+commons-pool/jars/commons-pool-1.0-javadoc.jar
+commons-pool/jars/commons-pool-1.0.1-javadoc.jar
+commons-pool/jars/commons-pool-1.0.1.jar
+commons-pool/jars/commons-pool-1.0.jar
+commons-pool/jars/commons-pool-1.1-RC1.jar
+commons-pool/jars/commons-pool-1.1-RC2.jar
+commons-pool/jars/commons-pool-1.1-dev.jar
+commons-pool/jars/commons-pool-1.1-javadoc.jar
+commons-pool/jars/commons-pool-1.1.jar
+commons-pool/jars/commons-pool-1.2-javadoc.jar
+commons-pool/jars/commons-pool-1.2.jar
+commons-pool/jars/commons-pool-1.3.jar
+commons-pool/jars/commons-pool-20020501.jar
+commons-pool/jars/commons-pool-20030623.172700.jar
+commons-pool/jars/commons-pool-20030818.195203.jar
+commons-pool/jars/commons-pool-20030821.192746.jar
+commons-pool/jars/commons-pool-20030825.183949.jar
+commons-pool/jars/commons-pool-snapshot-version
+commons-pool/poms/commons-pool-1.0.1.pom
+commons-pool/poms/commons-pool-1.1.pom
+commons-pool/poms/commons-pool-1.2.pom
+commons-pool/poms/commons-pool-1.3.pom
+commons-primitives/jars/commons-primitives-1.0-javadoc.jar
+commons-primitives/poms/commons-primitives.xml
+commons-scxml/distributions/commons-scxml-0.5-src.tar.gz
+commons-scxml/distributions/commons-scxml-0.5-src.zip
+commons-scxml/distributions/commons-scxml-0.5.tar.gz
+commons-scxml/distributions/commons-scxml-0.5.zip
+commons-scxml/distributions/commons-scxml-0.6-src.zip
+commons-scxml/distributions/commons-scxml-0.6-src.tar.gz
+commons-scxml/distributions/commons-scxml-0.6.tar.gz
+commons-scxml/distributions/commons-scxml-0.6.zip
+commons-scxml/jars/commons-scxml-0.5.jar
+commons-scxml/jars/commons-scxml-0.6.jar
+commons-scxml/poms/commons-scxml-0.5.pom
+commons-scxml/poms/commons-scxml-0.6.pom
+commons-sql/jars/commons-sql-1.0-dev.jar
+commons-sql/jars/commons-sql-20040118.000852.jar
+commons-sql/jars/commons-sql-snapshot-version
+commons-threadpool/jars/commons-threadpool-1.0-dev.20021010.081157.jar
+commons-threadpool/jars/commons-threadpool-20030513.073905.jar
+commons-threadpool/jars/commons-threadpool-snapshot-version
+commons-transaction/jars/commons-transaction-1.0-javadoc.jar
+commons-transaction/jars/commons-transaction-1.0.1-javadoc.jar
+commons-transaction/jars/commons-transaction-1.1-javadoc.jar
+commons-transaction/jars/commons-transaction-1.1.jar
+commons-transaction/jars/commons-transaction-1.2.jar
+commons-transaction/poms/commons-transaction-1.1.pom
+commons-transaction/poms/commons-transaction-1.2.pom
+commons-util/jars/commons-util-1.0-rc2-dev.20020814.103359.jar
+commons-util/jars/commons-util-1.0-rc2-dev.20021217.063141.jar
+commons-util/jars/commons-util-1.0-rc2-dev.jar
+commons-util/jars/commons-utils-snapshot-version
+commons-validator/distributions/commons-validator-1.1.3-src.tar.gz.MD5
+commons-validator/distributions/commons-validator-1.1.3-src.tar.gz
+commons-validator/distributions/commons-validator-1.1.3-src.zip.MD5
+commons-validator/distributions/commons-validator-1.1.3-src.zip
+commons-validator/distributions/commons-validator-1.1.3.tar.gz.MD5
+commons-validator/distributions/commons-validator-1.1.3.tar.gz
+commons-validator/distributions/commons-validator-1.1.3.zip.MD5
+commons-validator/distributions/commons-validator-1.1.3.zip
+commons-validator/jars/commons-validator-1.0-javadoc.jar
+commons-validator/jars/commons-validator-1.0.1-javadoc.jar
+commons-validator/jars/commons-validator-1.0.1.jar
+commons-validator/jars/commons-validator-1.0.2-javadoc.jar
+commons-validator/jars/commons-validator-1.3.1.jar
+commons-validator/jars/commons-validator-1.0.2.jar
+commons-validator/jars/commons-validator-1.0.jar
+commons-validator/jars/commons-validator-1.1.3-javadoc.jar
+commons-validator/jars/commons-validator-1.1.3-src.tar.gz
+commons-validator/jars/commons-validator-1.1.3-src.tar.gz.MD5
+commons-validator/jars/commons-validator-1.1.3-src.zip
+commons-validator/jars/commons-validator-1.1.3-src.zip.MD5
+commons-validator/jars/commons-validator-1.1.3.jar
+commons-validator/jars/commons-validator-1.1.3.tar.gz
+commons-validator/jars/commons-validator-1.1.3.tar.gz.MD5
+commons-validator/jars/commons-validator-1.1.3.zip
+commons-validator/jars/commons-validator-1.1.3.zip.MD5
+commons-validator/jars/commons-validator-1.1.4-javadoc.jar
+commons-validator/jars/commons-validator-1.1.4.jar
+commons-validator/jars/commons-validator-1.2.0-javadoc.jar
+commons-validator/jars/commons-validator-1.2.0.jar
+commons-validator/jars/commons-validator-1.3.0.jar
+commons-validator/jars/struts-help.html
+commons-validator/jars/commons-validator-1.3.1-sources.jar
+commons-validator/poms/commons-validator-1.0.1.pom
+commons-validator/poms/commons-validator-1.0.2.pom
+commons-validator/poms/commons-validator-1.0.pom
+commons-validator/poms/commons-validator-1.2.0.pom
+commons-validator/poms/commons-validator-1.3.1.pom
+commons-validator/poms/commons-validator-1.3.0.pom
+commons-vfs/jars/commons-vfs-1.0.jar
+commons-vfs/poms/commons-vfs-1.0.pom
+commons-xo/jars/commons-xo-0.8.jar
+commons-xo/jars/commons-xo-1.0-20020507.jar
+cornerstone-connection/jars/cornerstone-connection-api-1.0.jar
+cornerstone-connection/jars/cornerstone-connection-api-2.1.jar
+cornerstone-connection/jars/cornerstone-connection-impl-1.0.jar
+cornerstone-connection/jars/cornerstone-connection-impl-2.1.jar
+cornerstone-connection/poms/cornerstone-connection-api-2.1.pom
+cornerstone-connection/poms/cornerstone-connection-impl-2.1.pom
+cornerstone-datasources/jars/cornerstone-datasources-api-1.0.jar
+cornerstone-datasources/jars/cornerstone-datasources-api-2.1.jar
+cornerstone-datasources/jars/cornerstone-datasources-impl-1.0.jar
+cornerstone-datasources/jars/cornerstone-datasources-impl-2.1.jar
+cornerstone-datasources/poms/cornerstone-datasources-api-2.1.pom
+cornerstone-datasources/poms/cornerstone-datasources-impl-2.1.pom
+cornerstone-scheduler/jars/cornerstone-scheduler-api-1.0.jar
+cornerstone-scheduler/jars/cornerstone-scheduler-api-2.1.jar
+cornerstone-scheduler/jars/cornerstone-scheduler-impl-1.0.jar
+cornerstone-scheduler/jars/cornerstone-scheduler-impl-2.1.jar
+cornerstone-scheduler/poms/cornerstone-scheduler-api-2.1.pom
+cornerstone-scheduler/poms/cornerstone-scheduler-impl-2.1.pom
+cornerstone-sockets/jars/cornerstone-sockets-api-1.0.jar
+cornerstone-sockets/jars/cornerstone-sockets-api-2.1.jar
+cornerstone-sockets/jars/cornerstone-sockets-impl-1.0.jar
+cornerstone-sockets/jars/cornerstone-sockets-impl-2.1.jar
+cornerstone-sockets/poms/cornerstone-sockets-api-2.1.pom
+cornerstone-sockets/poms/cornerstone-sockets-impl-2.1.pom
+cornerstone-store/jars/cornerstone-store-api-1.0.jar
+cornerstone-store/jars/cornerstone-store-api-2.1.jar
+cornerstone-store/jars/cornerstone-store-impl-1.0.jar
+cornerstone-store/jars/cornerstone-store-impl-1.1.jar
+cornerstone-store/jars/cornerstone-store-impl-2.1.jar
+cornerstone-store/poms/cornerstone-store-api-2.1.pom
+cornerstone-store/poms/cornerstone-store-impl-2.1.pom
+cornerstone-threads/jars/cornerstone-threads-api-1.0.jar
+cornerstone-threads/jars/cornerstone-threads-api-2.1.jar
+cornerstone-threads/jars/cornerstone-threads-impl-1.0.jar
+cornerstone-threads/jars/cornerstone-threads-impl-2.1.jar
+cornerstone-threads/jars/cornerstone-threads-tutorial-1.0.jar
+cornerstone-threads/jars/cornerstone-threads-tutorial-2.1.jar
+cornerstone-threads/poms/cornerstone-threads-api-2.1.pom
+cornerstone-threads/poms/cornerstone-threads-impl-2.1.pom
+cornerstone-threads/poms/cornerstone-threads-tutorial-2.1.pom
+crimson/jars/crimson-1.1.3.jar
+directory/distributions/apacheds-0.9-src.tar.gz
+directory/distributions/apacheds-0.9-src.zip
+directory/distributions/apacheds-0.9.2-src.tar.gz
+directory/distributions/apacheds-0.9.2-src.zip
+directory/distributions/apacheds-0.9.tar.gz
+directory/distributions/apacheds-0.9.zip
+directory/jars/apacheds-core-0.9.1.jar
+directory/jars/apacheds-core-0.9.2.jar
+directory/jars/apacheds-core-0.9.3.jar
+directory/jars/apacheds-core-0.9.jar
+directory/jars/apacheds-main-0.9.1.jar
+directory/jars/apacheds-main-0.9.2.jar
+directory/jars/apacheds-main-0.9.3.jar
+directory/jars/apacheds-main-0.9.jar
+directory/jars/apacheds-shared-0.9.1.jar
+directory/jars/apacheds-shared-0.9.2.jar
+directory/jars/apacheds-shared-0.9.3.jar
+directory/jars/apacheds-shared-0.9.jar
+directory/jars/ldap-common-20031205.013436.jar
+directory/plugins/maven-directory-plugin-0.9.1.jar
+directory/plugins/maven-directory-plugin-0.9.2.jar
+directory/plugins/maven-directory-plugin-0.9.3.jar
+directory/plugins/maven-directory-plugin-0.9.jar
+directory/poms/apacheds-0.9.pom
+directory/poms/apacheds-core-0.9.2.pom
+directory/poms/apacheds-core-0.9.3.pom
+directory/poms/apacheds-core-0.9.pom
+directory/poms/apacheds-main-0.9.2.pom
+directory/poms/apacheds-main-0.9.3.pom
+directory/poms/apacheds-main-0.9.pom
+directory/poms/apacheds-shared-0.9.2.pom
+directory/poms/apacheds-shared-0.9.3.pom
+directory/poms/maven-directory-plugin-0.9.2.pom
+directory/poms/apacheds-shared-0.9.pom
+directory/poms/maven-directory-plugin-0.9.3.pom
+directory/poms/maven-directory-plugin-0.9.pom
+directory-asn1/jars/asn1-ber-0.3.2.jar
+directory-asn1/jars/asn1-ber-0.3.3.jar
+directory-asn1/jars/asn1-ber-0.3.jar
+directory-asn1/jars/asn1-codec-0.3.2.jar
+directory-asn1/jars/asn1-codec-0.3.3.jar
+directory-asn1/jars/asn1-codec-0.3.jar
+directory-asn1/jars/asn1-der-0.3.2.jar
+directory-asn1/jars/asn1-der-0.3.3.jar
+directory-asn1/jars/asn1-der-0.3.jar
+directory-asn1/jars/asn1-new-ber-0.3.3.jar
+directory-asn1/jars/stub-compiler-0.3.2.jar
+directory-asn1/jars/stub-compiler-0.3.jar
+directory-asn1/poms/asn1-0.3.3.pom
+directory-asn1/poms/asn1-ber-0.3.2.pom
+directory-asn1/poms/asn1-ber-0.3.3.pom
+directory-asn1/poms/asn1-ber-0.3.pom
+directory-asn1/poms/asn1-codec-0.3.2.pom
+directory-asn1/poms/asn1-codec-0.3.3.pom
+directory-asn1/poms/asn1-codec-0.3.pom
+directory-asn1/poms/asn1-der-0.3.2.pom
+directory-asn1/poms/asn1-der-0.3.3.pom
+directory-asn1/poms/asn1-der-0.3.pom
+directory-asn1/poms/asn1-new-ber-0.3.3.pom
+directory-asn1/poms/stub-compiler-0.3.2.pom
+directory-asn1/poms/stub-compiler-0.3.pom
+directory-clients/jars/ldap-clients-0.9.jar
+directory-clients/poms/ldap-clients-0.9-SNAPSHOT.pom
+directory-clients/poms/ldap-clients-0.9.1-SNAPSHOT.pom
+directory-clients/poms/ldap-clients-0.9.pom
+directory-naming/jars/naming-config-0.8.jar
+directory-naming/jars/naming-core-0.8.jar
+directory-naming/jars/naming-factory-0.8.jar
+directory-naming/jars/naming-java-0.8.jar
+directory-naming/jars/naming-management-0.8.jar
+directory-naming/jars/naming-resources-0.8.jar
+directory-naming/poms/naming-config-0.8.pom
+directory-naming/poms/naming-core-0.8.pom
+directory-naming/poms/naming-core-0.9-dev.pom
+directory-naming/poms/naming-factory-0.8.pom
+directory-naming/poms/naming-java-0.8.pom
+directory-naming/poms/naming-management-0.8.pom
+directory-naming/poms/naming-resources-0.8.pom
+directory-network/jars/mina-0.7.1.jar
+directory-network/jars/mina-0.7.2.jar
+directory-network/jars/mina-0.7.3.jar
+directory-network/jars/mina-0.7.4.jar
+directory-network/jars/mina-0.7.jar
+directory-network/jars/mina-0.8.0.jar
+directory-network/jars/mina-0.8.1.jar
+directory-network/jars/mina-0.8.2.jar
+directory-network/jars/mina-0.9.0.jar
+directory-network/poms/mina-0.7.1.pom
+directory-network/poms/mina-0.7.2.pom
+directory-network/poms/mina-0.7.3.pom
+directory-network/poms/mina-0.7.4.pom
+directory-network/poms/mina-0.7.pom
+directory-network/poms/mina-0.8.0.pom
+directory-network/poms/mina-0.8.1.pom
+directory-network/poms/mina-0.8.2.pom
+directory-network/poms/mina-0.9.0.pom
+directory-network/KEYS
+directory-protocols/jars/kerberos-protocol-0.4.jar
+directory-protocols/jars/ldap-protocol-0.9.jar
+directory-protocols/poms/kerberos-protocol-0.4.pom
+directory-protocols/poms/ldap-protocol-0.9.pom
+directory-shared/jars/apache-ldapber-provider-0.9.2.jar
+directory-shared/jars/apache-ldapber-provider-0.9.3.jar
+directory-shared/jars/apache-ldapber-provider-0.9.jar
+directory-shared/jars/apache-new-ldapber-provider-0.9.3.jar
+directory-shared/jars/kerberos-common-0.4.jar
+directory-shared/jars/kerberos-common-0.5.jar
+directory-shared/jars/ldap-common-0.9.2.jar
+directory-shared/jars/ldap-common-0.9.3.jar
+directory-shared/jars/ldap-common-0.9.jar
+directory-shared/jars/ldap-snacc-provider-0.9.2.jar
+directory-shared/jars/ldap-snacc-provider-0.9.3.jar
+directory-shared/jars/ldap-snacc-provider-0.9.jar
+directory-shared/poms/apache-ldapber-provider-0.9.2.pom
+directory-shared/poms/apache-ldapber-provider-0.9.3.pom
+directory-shared/poms/apache-ldapber-provider-0.9.pom
+directory-shared/poms/apache-new-ldapber-provider-0.9.3.pom
+directory-shared/poms/kerberos-common-0.4.pom
+directory-shared/poms/kerberos-common-0.5.pom
+directory-shared/poms/ldap-common-0.9.2.pom
+directory-shared/poms/ldap-common-0.9.3.pom
+directory-shared/poms/ldap-common-0.9.pom
+directory-shared/poms/ldap-snacc-provider-0.9.2.pom
+directory-shared/poms/ldap-snacc-provider-0.9.3.pom
+directory-shared/poms/ldap-snacc-provider-0.9.pom
+excalibur/jars/excalibur-collections-1.0.jar
+excalibur/jars/excalibur-configuration-1.0.jar
+excalibur/jars/excalibur-event-2.0.jar
+excalibur/jars/excalibur-extension-1.0.jar
+excalibur/jars/excalibur-i18n-1.0.jar
+excalibur/jars/excalibur-instrument-0.3.jar
+excalibur/jars/excalibur-testcase-1.0.jar
+excalibur/jars/excalibur-thread-1.1.jar
+excalibur/jars/excalibur-threadcontext-1.0.jar
+excalibur/jars/excalibur-util-concurrent-1.3.1.jar
+excalibur-altrmi/jars/excalibur-altrmi-client-impl-0.7.jar
+excalibur-altrmi/jars/excalibur-altrmi-client-interfaces-0.7.jar
+excalibur-altrmi/jars/excalibur-altrmi-common-0.7.jar
+excalibur-altrmi/jars/excalibur-altrmi-generator-0.7.jar
+excalibur-altrmi/jars/excalibur-altrmi-server-impl-0.7.jar
+excalibur-altrmi/jars/excalibur-altrmi-server-interfaces-0.7.jar
+excalibur-cli/jars/excalibur-cli-1.0.jar
+excalibur-collections/jars/excalibur-collections-1.0.jar
+excalibur-collections/jars/excalibur-collections-20020820.jar
+excalibur-component/jars/excalibur-component-1.0.jar
+excalibur-component/jars/excalibur-component-1.1.jar
+excalibur-component/jars/excalibur-component-1.2.jar
+excalibur-component/jars/excalibur-component-2.1.jar
+excalibur-component/jars/excalibur-component-20020916.jar
+excalibur-component/jars/excalibur-testcase-2.1.jar
+excalibur-component/poms/excalibur-component-2.1.pom
+excalibur-component/poms/excalibur-testcase-2.1.pom
+excalibur-component-examples/jars/excalibur-component-examples-2.1.jar
+excalibur-component-examples/poms/excalibur-component-examples-2.1.pom
+excalibur-component-tests/jars/excalibur-component-tests-2.1.jar
+excalibur-component-tests/poms/excalibur-component-tests-2.1.pom
+excalibur-concurrent/jars/excalibur-concurrent-1.0.jar
+excalibur-concurrent/jars/excalibur-concurrent-20020820.jar
+excalibur-configuration/distributions/excalibur-configuration-1.1-RC1-src.tar.gz
+excalibur-configuration/distributions/excalibur-configuration-1.1-RC1-src.zip
+excalibur-configuration/distributions/excalibur-configuration-1.1-RC1.tar.gz
+excalibur-configuration/distributions/excalibur-configuration-1.1-RC1.zip
+excalibur-configuration/distributions/excalibur-configuration-1.1-src.tar.gz
+excalibur-configuration/distributions/excalibur-configuration-1.1-src.zip
+excalibur-configuration/distributions/excalibur-configuration-1.1.tar.gz
+excalibur-configuration/distributions/excalibur-configuration-1.1.zip
+excalibur-configuration/jars/excalibur-configuration-1.0.jar
+excalibur-configuration/jars/excalibur-configuration-1.1-RC1.jar
+excalibur-configuration/jars/excalibur-configuration-1.1-dev.jar
+excalibur-configuration/jars/excalibur-configuration-1.1.jar
+excalibur-configuration/jars/excalibur-configuration-1.2.jar
+excalibur-containerkit/jars/excalibur-containerkit-1.0.jar
+excalibur-datasource/jars/excalibur-datasource-1.1.1.jar
+excalibur-datasource/jars/excalibur-datasource-1.2.0.jar
+excalibur-datasource/jars/excalibur-datasource-cluster-1.1.1a.jar
+excalibur-datasource/jars/excalibur-datasource-2.1.jar
+excalibur-datasource/jars/excalibur-datasource-ids-1.1.1a.jar
+excalibur-datasource/jars/excalibur-datasource-vm14-20021121.jar
+excalibur-datasource/poms/excalibur-datasource-2.1.pom
+fop/jars/fop-0.20.3.jar
+fop/jars/fop-0.20.4.jar
+fop/jars/fop-0.20.5-rc3-alpha.jar
+fop/jars/fop-0.20.5.jar
+fop/jars/fop-0.20.5rc2.jar
+fop/jars/fop-0.93-jdk15.jar
+fop/jars/fop-0.93-jdk14.jar
+excalibur-event/distributions/excalibur-event-1.0.3.zip
+excalibur-event/jars/excalibur-event-1.0.3.jar
+excalibur-event/jars/excalibur-event-1.0a.jar
+excalibur-event/jars/excalibur-event-20030217.000000.jar
+excalibur-event/jars/excalibur-event-api-1.0.4-dev.jar
+excalibur-event/jars/excalibur-event-api-2.1.jar
+excalibur-event/jars/excalibur-event-impl-1.0.4-dev.jar
+excalibur-event/jars/excalibur-event-impl-2.1.jar
+excalibur-event/jars/excalibur-event-snapshot-version
+excalibur-event/poms/excalibur-event-api-2.1.pom
+excalibur-event/poms/excalibur-event-impl-2.1.pom
+excalibur-extension/jars/excalibur-extension-1.0.jar
+excalibur-fortress/jars/excalibur-fortress-1.0.jar
+excalibur-fortress/jars/excalibur-fortress-bean-1.2.jar
+excalibur-fortress/jars/excalibur-fortress-cli-1.2.jar
+excalibur-fortress/jars/excalibur-fortress-complete-1.0.jar
+excalibur-fortress/jars/excalibur-fortress-container-api-1.2.jar
+excalibur-fortress/jars/excalibur-fortress-container-impl-1.2.jar
+excalibur-fortress/jars/excalibur-fortress-container-test-1.2.jar
+excalibur-fortress/jars/excalibur-fortress-examples-1.2.jar
+excalibur-fortress/jars/excalibur-fortress-meta-1.2.jar
+excalibur-fortress/jars/excalibur-fortress-migration-1.2.jar
+excalibur-fortress/jars/excalibur-fortress-servlet-1.2.jar
+excalibur-fortress/jars/excalibur-fortress-testcase-1.2.jar
+excalibur-fortress/jars/excalibur-fortress-tools-1.0.jar
+excalibur-fortress/poms/excalibur-fortress-bean-1.2.pom
+excalibur-fortress/poms/excalibur-fortress-cli-1.2.pom
+excalibur-fortress/poms/excalibur-fortress-container-api-1.2.pom
+excalibur-fortress/poms/excalibur-fortress-container-impl-1.2.pom
+excalibur-fortress/poms/excalibur-fortress-meta-1.2.pom
+excalibur-fortress/poms/excalibur-fortress-container-test-1.2.pom
+excalibur-fortress/poms/excalibur-fortress-examples-1.2.pom
+excalibur-fortress/poms/excalibur-fortress-migration-1.2.pom
+excalibur-fortress/poms/excalibur-fortress-platform-1.2.pom
+excalibur-fortress/poms/excalibur-fortress-servlet-1.2.pom
+excalibur-fortress/poms/excalibur-fortress-testcase-1.2.pom
+excalibur-i18n/distributions/excalibur-i18n-1.1-RC1-src.tar.gz
+excalibur-i18n/distributions/excalibur-i18n-1.1-RC1-src.zip
+excalibur-i18n/distributions/excalibur-i18n-1.1-RC1.tar.gz
+excalibur-i18n/distributions/excalibur-i18n-1.1-RC1.zip
+excalibur-i18n/distributions/excalibur-i18n-1.1-src.tar.gz
+excalibur-i18n/distributions/excalibur-i18n-1.1-src.zip
+excalibur-i18n/distributions/excalibur-i18n-1.1-tar.gz
+excalibur-i18n/distributions/excalibur-i18n-1.1.zip
+excalibur-i18n/jars/excalibur-i18n-1.0.jar
+excalibur-i18n/jars/excalibur-i18n-1.1-RC1.jar
+excalibur-i18n/jars/excalibur-i18n-1.1.jar
+excalibur-instrument/jars/excalibur-instrument-0.1.jar
+excalibur-instrument/jars/excalibur-instrument-1.0.jar
+excalibur-instrument/jars/excalibur-instrument-20021108.jar
+excalibur-instrument/jars/excalibur-instrument-api-2.1.jar
+excalibur-instrument/jars/excalibur-instrument-client-2.1.jar
+excalibur-instrument/jars/excalibur-instrument-mgr-api-2.1.jar
+excalibur-instrument/jars/excalibur-instrument-mgr-http-2.1.jar
+excalibur-instrument/jars/excalibur-instrument-mgr-impl-2.1.jar
+excalibur-instrument/poms/excalibur-instrument-api-2.1.pom
+excalibur-instrument/poms/excalibur-instrument-client-2.1.pom
+excalibur-instrument/poms/excalibur-instrument-mgr-api-2.1.pom
+excalibur-instrument/poms/excalibur-instrument-mgr-http-2.1.pom
+excalibur-instrument/poms/excalibur-instrument-mgr-impl-2.1.pom
+excalibur-instrument-manager/jars/excalibur-instrument-manager-0.1.jar
+excalibur-instrument-manager/jars/excalibur-instrument-manager-1.0.jar
+excalibur-instrument-manager/jars/excalibur-instrument-manager-20021108.jar
+excalibur-instrument-manager-interfaces/jars/excalibur-instrument-manager-interfaces-0.1.jar
+excalibur-instrument-manager-interfaces/jars/excalibur-instrument-manager-interfaces-1.0.jar
+excalibur-instrument-manager-interfaces/jars/excalibur-instrument-manager-interfaces-20021108.jar
+excalibur-io/jars/excalibur-io-1.1.jar
+excalibur-lifecycle/jars/excalibur-lifecycle-1.0.jar
+excalibur-lifecycle/jars/excalibur-lifecycle-api-1.0.jar
+excalibur-lifecycle/jars/excalibur-lifecycle-api-1.1.0.jar
+excalibur-lifecycle/jars/excalibur-lifecycle-api-1.1.jar
+excalibur-lifecycle/jars/excalibur-lifecycle-api-2.1.jar
+excalibur-lifecycle/jars/excalibur-lifecycle-impl-1.0.jar
+excalibur-lifecycle/jars/excalibur-lifecycle-impl-1.1.0.jar
+excalibur-lifecycle/jars/excalibur-lifecycle-impl-1.1.jar
+excalibur-lifecycle/jars/excalibur-lifecycle-impl-2.1.jar
+excalibur-lifecycle/poms/excalibur-lifecycle-api-2.1.pom
+excalibur-lifecycle/poms/excalibur-lifecycle-impl-2.1.pom
+excalibur-logger/jars/excalibur-logger-1.0.1.jar
+excalibur-logger/jars/excalibur-logger-1.0.jar
+excalibur-logger/jars/excalibur-logger-1.1.jar
+excalibur-logger/jars/excalibur-logger-2.1.jar
+excalibur-logger/jars/excalibur-logger-20020820.jar
+excalibur-logger/poms/excalibur-logger-2.1.pom
+excalibur-monitor/jars/excalibur-monitor-1.0.jar
+excalibur-monitor/jars/excalibur-monitor-2.1.jar
+excalibur-monitor/jars/excalibur-monitor-20020820.jar
+excalibur-monitor/poms/excalibur-monitor-2.1.pom
+excalibur-mpool/jars/excalibur-mpool-1.0.jar
+excalibur-naming/jars/excalibur-naming-1.0.jar
+excalibur-pool/jars/excalibur-pool-1.0.jar
+excalibur-pool/jars/excalibur-pool-1.2.jar
+excalibur-pool/jars/excalibur-pool-20020820.jar
+excalibur-pool/jars/excalibur-pool-api-2.0.0.jar
+excalibur-pool/jars/excalibur-pool-instrumented-2.0.0.jar
+excalibur-pool/jars/excalibur-pool-api-2.0.jar
+excalibur-pool/jars/excalibur-pool-api-2.1.jar
+excalibur-pool/jars/excalibur-pool-impl-2.0.0.jar
+excalibur-pool/jars/excalibur-pool-impl-2.0.jar
+excalibur-pool/jars/excalibur-pool-impl-2.1.jar
+excalibur-pool/jars/excalibur-pool-instrumented-2.0.jar
+excalibur-pool/jars/excalibur-pool-instrumented-2.1.jar
+excalibur-pool/poms/excalibur-pool-api-2.1.pom
+excalibur-pool/poms/excalibur-pool-impl-2.1.pom
+excalibur-pool/poms/excalibur-pool-instrumented-2.1.pom
+excalibur-sourceresolve/jars/excalibur-sourceresolve-1.0.1.jar
+excalibur-sourceresolve/jars/excalibur-sourceresolve-1.0.jar
+excalibur-sourceresolve/jars/excalibur-sourceresolve-1.1.jar
+excalibur-sourceresolve/jars/excalibur-sourceresolve-2.0.jar
+excalibur-sourceresolve/jars/excalibur-sourceresolve-2.1.jar
+excalibur-sourceresolve/jars/excalibur-sourceresolve-20020820.jar
+excalibur-sourceresolve/poms/excalibur-sourceresolve-2.1.pom
+excalibur-store/jars/excalibur-store-1.0.jar
+excalibur-store/jars/excalibur-store-2.1.jar
+excalibur-store/jars/excalibur-store-20020820.jar
+excalibur-store/poms/excalibur-store-2.1.pom
+excalibur-thread/distributions/excalibur-thread-1.1.1.zip
+excalibur-thread/jars/excalibur-thread-1.0.jar
+excalibur-thread/jars/excalibur-thread-1.1.1.jar
+excalibur-thread/jars/excalibur-thread-api-2.0.0.jar
+excalibur-thread/jars/excalibur-thread-instrumented-2.0.0.jar
+excalibur-thread/jars/excalibur-thread-api-2.0.jar
+excalibur-thread/jars/excalibur-thread-api-2.1.jar
+excalibur-thread/jars/excalibur-thread-impl-2.0.0.jar
+excalibur-thread/jars/excalibur-thread-impl-2.0.jar
+excalibur-thread/jars/excalibur-thread-impl-2.1.jar
+excalibur-thread/jars/excalibur-thread-instrumented-2.0.jar
+excalibur-thread/jars/excalibur-thread-instrumented-2.1.jar
+excalibur-thread/poms/excalibur-thread-api-2.1.pom
+excalibur-thread/poms/excalibur-thread-impl-2.1.pom
+excalibur-thread/poms/excalibur-thread-instrumented-2.1.pom
+fulcrum/jars/fulcrum-1.0.jar
+fulcrum/jars/fulcrum-3.0-b1.jar
+fulcrum/jars/fulcrum-3.0-b2-dev.jar
+fulcrum/jars/fulcrum-crypto-1.0.5.jar
+fulcrum/jars/fulcrum-bsf-1.0.2.jar
+fulcrum/jars/fulcrum-cache-1.0.5.jar
+fulcrum/jars/fulcrum-factory-1.0.3.jar
+fulcrum/jars/fulcrum-dvsl-1.0.5.jar
+fulcrum/jars/fulcrum-osworkflow-1.0.1.jar
+fulcrum/jars/fulcrum-localization-1.0.5.jar
+fulcrum/jars/fulcrum-mimetype-1.0.4.jar
+fulcrum/jars/fulcrum-naming-1.0.2.jar
+fulcrum/jars/fulcrum-security-api-1.0.7.jar
+fulcrum/jars/fulcrum-pool-1.0.3.jar
+fulcrum/jars/fulcrum-quartz-1.0.jar
+fulcrum/jars/fulcrum-security-adapter-opensymphony-1.0.7.jar
+fulcrum/jars/fulcrum-security-adapter-turbine-1.0.7.jar
+fulcrum/jars/fulcrum-security-hibernate-1.0.7.jar
+fulcrum/jars/fulcrum-security-memory-1.0.7.jar
+fulcrum/jars/fulcrum-security-nt-1.0.7.jar
+fulcrum/jars/fulcrum-testcontainer-1.0.4.jar
+fulcrum/jars/fulcrum-upload-1.0.3.jar
+fulcrum/jars/fulcrum-xmlrpc-1.0.5.jar
+fulcrum/jars/fulcrum-xslt-1.0.3.jar
+fulcrum/jars/fulcrum-yaafi-1.0.3.jar
+excalibur-util/jars/excalibur-util-1.0.jar
+excalibur-xmlutil/jars/excalibur-xmlutil-1.0.jar
+excalibur-xmlutil/jars/excalibur-xmlutil-2.1.jar
+excalibur-xmlutil/jars/excalibur-xmlutil-20020820.jar
+excalibur-xmlutil/poms/excalibur-xmlutil-2.1.pom
+geronimo/cars/activemq-1.0.car
+geronimo/cars/activemq-broker-1.0.car
+geronimo/cars/client-1.0.car
+geronimo/cars/client-corba-1.0.car
+geronimo/cars/client-security-1.0.car
+geronimo/cars/javamail-1.0.car
+geronimo/cars/client-system-1.0.car
+geronimo/cars/daytrader-derby-jetty-1.0.car
+geronimo/cars/daytrader-derby-tomcat-1.0.car
+geronimo/cars/daytrader-derby-jetty-streamer-client-1.0.car
+geronimo/cars/directory-1.0.car
+geronimo/cars/daytrader-derby-tomcat-streamer-client-1.0.car
+geronimo/cars/geronimo-gbean-deployer-1.0.car
+geronimo/cars/hot-deployer-1.0.car
+geronimo/cars/j2ee-system-experimental-1.0.car
+geronimo/cars/j2ee-corba-1.0.car
+geronimo/cars/j2ee-deployer-1.0.car
+geronimo/cars/j2ee-security-1.0.car
+geronimo/cars/j2ee-server-1.0.car
+geronimo/cars/j2ee-system-1.0.car
+geronimo/cars/jetty-1.0.car
+geronimo/cars/jetty-deployer-1.0.car
+geronimo/cars/jmxdebug-jetty-1.0.car
+geronimo/cars/jmxdebug-tomcat-1.0.car
+geronimo/cars/jsp-examples-jetty-1.0.car
+geronimo/cars/tomcat-1.0.car
+geronimo/cars/tomcat-deployer-1.0.car
+geronimo/cars/jsp-examples-tomcat-1.0.car
+geronimo/cars/ldap-demo-jetty-1.0.car
+geronimo/cars/ldap-demo-tomcat-1.0.car
+geronimo/cars/ldap-realm-1.0.car
+geronimo/cars/rmi-naming-1.0.car
+geronimo/cars/online-deployer-1.0.car
+geronimo/cars/remote-deploy-jetty-1.0.car
+geronimo/cars/remote-deploy-tomcat-1.0.car
+geronimo/cars/servlets-examples-jetty-1.0.car
+geronimo/cars/servlets-examples-tomcat-1.0.car
+geronimo/cars/shutdown-1.0.car
+geronimo/cars/system-database-1.0.car
+geronimo/cars/uddi-jetty-1.0.car
+geronimo/cars/uddi-tomcat-1.0.car
+geronimo/cars/webconsole-jetty-1.0.car
+geronimo/cars/webconsole-tomcat-1.0.car
+geronimo/cars/welcome-jetty-1.0.car
+geronimo/cars/welcome-tomcat-1.0.car
+geronimo/distributions/geronimo-installer-1.0.jar.MD5
+geronimo/distributions/geronimo-installer-1.0.jar
+geronimo/distributions/geronimo-installer-1.0.jar.SHA
+geronimo/distributions/geronimo-jetty-j2ee-1.0.tar.gz
+geronimo/distributions/geronimo-jetty-j2ee-1.0.zip
+geronimo/distributions/geronimo-tomcat-j2ee-1.0.tar.gz
+geronimo/distributions/geronimo-tomcat-j2ee-1.0.zip
+geronimo/ears/daytrader-ear-1.0.ear
+geronimo/ears/daytrader-ear-1.1.ear
+geronimo/ears/geronimo-console-1.0.ear
+geronimo/ejbs/daytrader-ejb-1.0.jar
+geronimo/jars/daytrader-core-1.0.jar
+geronimo/jars/daytrader-streamer-1.0.jar
+geronimo/jars/daytrader-wsappclient-1.0.jar
+geronimo/jars/geronimo-activation-1.0-M4.jar
+geronimo/jars/geronimo-1.0-M5.jar
+geronimo/jars/geronimo-activation-1.0-M5.jar
+geronimo/jars/geronimo-activation-1.0.jar
+geronimo/jars/geronimo-activation-1.1.jar
+geronimo/jars/geronimo-assembly-1.0-M3.jar
+geronimo/jars/geronimo-assembly-1.0-M4.jar
+geronimo/jars/geronimo-assembly-plugin-1.0-M4.jar
+geronimo/jars/geronimo-assembly-plugin-1.0-M5.jar
+geronimo/jars/geronimo-axis-1.0-M2.jar
+geronimo/jars/geronimo-axis-1.0-M3.jar
+geronimo/jars/geronimo-axis-1.0-M4.jar
+geronimo/jars/geronimo-axis-1.0-M5.jar
+geronimo/jars/geronimo-axis-1.0.jar
+geronimo/jars/geronimo-axis-1.1.jar
+geronimo/jars/geronimo-axis-builder-1.0-M4.jar
+geronimo/jars/geronimo-axis-builder-1.0-M5.jar
+geronimo/jars/geronimo-axis-builder-1.0.jar
+geronimo/jars/geronimo-axis-builder-1.1.jar
+geronimo/jars/geronimo-client-1.0-M3.jar
+geronimo/jars/geronimo-client-1.0-M4.jar
+geronimo/jars/geronimo-client-1.0-M5.jar
+geronimo/jars/geronimo-client-1.0.jar
+geronimo/jars/geronimo-client-1.1.jar
+geronimo/jars/geronimo-client-builder-1.0-M3.jar
+geronimo/jars/geronimo-client-builder-1.0-M4.jar
+geronimo/jars/geronimo-client-builder-1.0-M5.jar
+geronimo/jars/geronimo-client-builder-1.0.jar
+geronimo/jars/geronimo-client-builder-1.1.jar
+geronimo/jars/geronimo-clustering-1.0-M1.jar
+geronimo/jars/geronimo-clustering-1.0-M2.jar
+geronimo/jars/geronimo-clustering-1.0-M3.jar
+geronimo/jars/geronimo-clustering-1.0-M4.jar
+geronimo/jars/geronimo-clustering-1.0-M5.jar
+geronimo/jars/geronimo-common-1.0-M1.jar
+geronimo/jars/geronimo-common-1.0-M2.jar
+geronimo/jars/geronimo-common-1.0-M3.jar
+geronimo/jars/geronimo-common-1.0-M4.jar
+geronimo/jars/geronimo-common-1.0-M5.jar
+geronimo/jars/geronimo-common-1.0.jar
+geronimo/jars/geronimo-common-1.1.jar
+geronimo/jars/geronimo-connector-1.0-M1.jar
+geronimo/jars/geronimo-connector-1.0-M2.jar
+geronimo/jars/geronimo-connector-1.0-M3.jar
+geronimo/jars/geronimo-connector-1.0-M4.jar
+geronimo/jars/geronimo-connector-1.0-M5.jar
+geronimo/jars/geronimo-connector-1.0.jar
+geronimo/jars/geronimo-connector-1.1.jar
+geronimo/jars/geronimo-connector-builder-1.0-M3.jar
+geronimo/jars/geronimo-connector-builder-1.0-M4.jar
+geronimo/jars/geronimo-connector-builder-1.0-M5.jar
+geronimo/jars/geronimo-connector-builder-1.0.jar
+geronimo/jars/geronimo-connector-builder-1.1.jar
+geronimo/jars/geronimo-console-1.0-M5.jar
+geronimo/jars/geronimo-console-core-1.0-M5.jar
+geronimo/jars/geronimo-console-core-1.0.jar
+geronimo/jars/geronimo-console-core-1.1.jar
+geronimo/jars/geronimo-converter-1.0.jar
+geronimo/jars/geronimo-console-framework-1.0-M5.jar
+geronimo/jars/geronimo-console-standard-1.0-M5.jar
+geronimo/jars/geronimo-console-web-1.0-M2.jar
+geronimo/jars/geronimo-console-web-1.0-M3.jar
+geronimo/jars/geronimo-console-web-1.0-M4.jar
+geronimo/jars/geronimo-console-web-1.0-M5.jar
+geronimo/jars/geronimo-core-1.0-M1.jar
+geronimo/jars/geronimo-console-web-1.0.jar
+geronimo/jars/geronimo-console-web-1.1.jar
+geronimo/jars/geronimo-converter-1.1.jar
+geronimo/jars/geronimo-core-1.0-M2.jar
+geronimo/jars/geronimo-core-1.0-M3.jar
+geronimo/jars/geronimo-core-1.0-M4.jar
+geronimo/jars/geronimo-core-1.0-M5.jar
+geronimo/jars/geronimo-core-1.0.jar
+geronimo/jars/geronimo-core-1.1.jar
+geronimo/jars/geronimo-daytrader-derby-db-1.0.jar
+geronimo/jars/geronimo-derby-1.0.jar
+geronimo/jars/geronimo-daytrader-derby-db-1.1.jar
+geronimo/jars/geronimo-demo-1.0-M2.jar
+geronimo/jars/geronimo-deploy-config-1.0-M4.jar
+geronimo/jars/geronimo-deploy-config-1.0-M5.jar
+geronimo/jars/geronimo-deploy-config-1.0.jar
+geronimo/jars/geronimo-installer-support-1.1.jar
+geronimo/jars/geronimo-deploy-config-1.1.jar
+geronimo/jars/geronimo-deploy-jsr88-1.0-M4.jar
+geronimo/jars/geronimo-deploy-jsr88-1.0-M5.jar
+geronimo/jars/geronimo-deploy-jsr88-1.0.jar
+geronimo/jars/geronimo-deploy-jsr88-1.1.jar
+geronimo/jars/geronimo-derby-1.1.jar
+geronimo/jars/geronimo-deploy-tool-1.0-M4.jar
+geronimo/jars/geronimo-deploy-tool-1.0-M5.jar
+geronimo/jars/geronimo-deploy-tool-1.0.jar
+geronimo/jars/geronimo-deploy-tool-1.1.jar
+geronimo/jars/geronimo-deployment-1.0-M1.jar
+geronimo/jars/geronimo-deployment-1.0-M2.jar
+geronimo/jars/geronimo-deployment-1.0-M3.jar
+geronimo/jars/geronimo-deployment-1.0-M4.jar
+geronimo/jars/geronimo-deployment-1.0-M5.jar
+geronimo/jars/geronimo-deployment-1.0.jar
+geronimo/jars/geronimo-deployment-1.1.jar
+geronimo/jars/geronimo-derby-1.0-M3.jar
+geronimo/jars/geronimo-j2ee-1.0.jar
+geronimo/jars/geronimo-derby-1.0-M4.jar
+geronimo/jars/geronimo-derby-1.0-M5.jar
+geronimo/jars/geronimo-derby-connector-1.0-M3.jar
+geronimo/jars/geronimo-derby-connector-1.0-M4.jar
+geronimo/jars/geronimo-directory-1.0-M5.jar
+geronimo/jars/geronimo-directory-1.0.jar
+geronimo/jars/geronimo-directory-1.1.jar
+geronimo/jars/geronimo-hot-deploy-1.0.jar
+geronimo/jars/geronimo-hot-deploy-1.1.jar
+geronimo/jars/geronimo-installer-processing-1.1.jar
+geronimo/jars/geronimo-interop-1.0-M4.jar
+geronimo/jars/geronimo-interop-1.0-M5.jar
+geronimo/jars/geronimo-j2ee-1.0-M1.jar
+geronimo/jars/geronimo-j2ee-1.0-M2.jar
+geronimo/jars/geronimo-j2ee-1.0-M3.jar
+geronimo/jars/geronimo-j2ee-1.0-M4.jar
+geronimo/jars/geronimo-j2ee-1.0-M5.jar
+geronimo/jars/geronimo-j2ee-builder-1.0-M3.jar
+geronimo/jars/geronimo-j2ee-1.1.jar
+geronimo/jars/geronimo-j2ee-builder-1.0-M4.jar
+geronimo/jars/geronimo-j2ee-builder-1.0-M5.jar
+geronimo/jars/geronimo-j2ee-builder-1.0.jar
+geronimo/jars/geronimo-j2ee-schema-1.1.jar
+geronimo/jars/geronimo-j2ee-builder-1.1.jar
+geronimo/jars/geronimo-j2ee-schema-1.0-M2.jar
+geronimo/jars/geronimo-j2ee-schema-1.0-M3.jar
+geronimo/jars/geronimo-j2ee-schema-1.0-M4.jar
+geronimo/jars/geronimo-j2ee-schema-1.0-M5.jar
+geronimo/jars/geronimo-j2ee-schema-1.0.jar
+geronimo/jars/geronimo-javamail-transport-1.0.jar
+geronimo/jars/geronimo-javamail-transport-1.1.jar
+geronimo/jars/geronimo-jetty-1.0-M1.jar
+geronimo/jars/geronimo-jetty-1.0-M2.jar
+geronimo/jars/geronimo-jetty-1.0-M3.jar
+geronimo/jars/geronimo-jetty-1.0-M4.jar
+geronimo/jars/geronimo-jetty-1.0-M5.jar
+geronimo/jars/geronimo-jetty-1.0.jar
+geronimo/jars/geronimo-jetty-1.1.jar
+geronimo/jars/geronimo-jetty-builder-1.0-M3.jar
+geronimo/jars/geronimo-jetty-builder-1.0-M4.jar
+geronimo/jars/geronimo-jetty-builder-1.0-M5.jar
+geronimo/jars/geronimo-kernel-1.0.jar
+geronimo/jars/geronimo-jetty-builder-1.0.jar
+geronimo/jars/geronimo-jetty-builder-1.1.jar
+geronimo/jars/geronimo-jmxdebug-1.0-M2.jar
+geronimo/jars/geronimo-jmxremoting-1.0-M2.jar
+geronimo/jars/geronimo-jmxremoting-1.0-M3.jar
+geronimo/jars/geronimo-jmxremoting-1.0-M4.jar
+geronimo/jars/geronimo-jmxremoting-1.0-M5.jar
+geronimo/jars/geronimo-jmxremoting-1.0.jar
+geronimo/jars/geronimo-jmxremoting-1.1.jar
+geronimo/jars/geronimo-kernel-1.0-M1.jar
+geronimo/jars/geronimo-kernel-1.0-M2.jar
+geronimo/jars/geronimo-kernel-1.0-M3.jar
+geronimo/jars/geronimo-kernel-1.0-M4.jar
+geronimo/jars/geronimo-kernel-1.0-M5.jar
+geronimo/jars/geronimo-kernel-1.1.jar
+geronimo/jars/geronimo-mail-1.0-M3.jar
+geronimo/jars/geronimo-mail-1.0-M4.jar
+geronimo/jars/geronimo-mail-1.0-M5.jar
+geronimo/jars/geronimo-mail-1.0.jar
+geronimo/jars/geronimo-mail-1.1.jar
+geronimo/jars/geronimo-management-1.0-M5.jar
+geronimo/jars/geronimo-management-1.0.jar
+geronimo/jars/geronimo-management-1.1.jar
+geronimo/jars/geronimo-naming-1.0-M1.jar
+geronimo/jars/geronimo-naming-1.0-M2.jar
+geronimo/jars/geronimo-naming-1.0-M3.jar
+geronimo/jars/geronimo-naming-1.0-M4.jar
+geronimo/jars/geronimo-naming-1.0-M5.jar
+geronimo/jars/geronimo-naming-1.0.jar
+geronimo/jars/geronimo-naming-1.1.jar
+geronimo/jars/geronimo-naming-builder-1.0-M3.jar
+geronimo/jars/geronimo-naming-builder-1.0-M4.jar
+geronimo/jars/geronimo-naming-builder-1.0-M5.jar
+geronimo/jars/geronimo-network-1.0-M1.jar
+geronimo/jars/geronimo-naming-builder-1.0.jar
+geronimo/jars/geronimo-naming-builder-1.1.jar
+geronimo/jars/geronimo-network-1.0-M2.jar
+geronimo/jars/geronimo-network-1.0-M3.jar
+geronimo/jars/geronimo-packaging-plugin-1.0-M5.jar
+geronimo/jars/geronimo-scripts-1.0.jar
+geronimo/jars/geronimo-remote-deploy-lib-1.0.jar
+geronimo/jars/geronimo-remote-deploy-lib-1.1.jar
+geronimo/jars/geronimo-remoting-1.0-M1.jar
+geronimo/jars/geronimo-remoting-1.0-M2.jar
+geronimo/jars/geronimo-remoting-1.0-M3.jar
+geronimo/jars/geronimo-spring-1.0-M3.jar
+geronimo/jars/geronimo-scripts-1.1.jar
+geronimo/jars/geronimo-security-1.0-M1.jar
+geronimo/jars/geronimo-security-1.0-M2.jar
+geronimo/jars/geronimo-security-1.0-M3.jar
+geronimo/jars/geronimo-security-1.0-M4.jar
+geronimo/jars/geronimo-security-1.0-M5.jar
+geronimo/jars/geronimo-security-1.0.jar
+geronimo/jars/geronimo-security-1.1.jar
+geronimo/jars/geronimo-security-builder-1.0-M3.jar
+geronimo/jars/geronimo-security-builder-1.0-M4.jar
+geronimo/jars/geronimo-security-builder-1.0-M5.jar
+geronimo/jars/geronimo-security-builder-1.0.jar
+geronimo/jars/geronimo-security-builder-1.1.jar
+geronimo/jars/geronimo-service-builder-1.0-M4.jar
+geronimo/jars/geronimo-service-builder-1.0-M5.jar
+geronimo/jars/geronimo-service-builder-1.0.jar
+geronimo/jars/geronimo-service-builder-1.1.jar
+geronimo/jars/geronimo-servicemix-1.0-M4.jar
+geronimo/jars/geronimo-servicemix-1.0-M5.jar
+geronimo/jars/geronimo-servicemix-builder-1.0-M4.jar
+geronimo/jars/geronimo-servicemix-builder-1.0-M5.jar
+geronimo/jars/geronimo-spring-1.0-M2.jar
+geronimo/jars/geronimo-spring-1.0-M4.jar
+geronimo/jars/geronimo-spring-1.0-M5.jar
+geronimo/jars/geronimo-spring-builder-1.0-M4.jar
+geronimo/jars/geronimo-spring-builder-1.0-M5.jar
+geronimo/jars/geronimo-system-1.0-M1.jar
+geronimo/jars/geronimo-system-1.0-M2.jar
+geronimo/jars/geronimo-system-1.0-M3.jar
+geronimo/jars/geronimo-system-1.0-M4.jar
+geronimo/jars/geronimo-system-1.0-M5.jar
+geronimo/jars/geronimo-system-1.0.jar
+geronimo/jars/geronimo-system-1.1.jar
+geronimo/jars/geronimo-test-ddbean-1.0-M4.jar
+geronimo/jars/geronimo-test-ddbean-1.0-M5.jar
+geronimo/jars/geronimo-test-ddbean-1.0.jar
+geronimo/jars/geronimo-test-ddbean-1.1.jar
+geronimo/jars/geronimo-timer-1.0-M2.jar
+geronimo/jars/geronimo-timer-1.0-M3.jar
+geronimo/jars/geronimo-timer-1.0-M4.jar
+geronimo/jars/geronimo-timer-1.0-M5.jar
+geronimo/jars/geronimo-timer-1.0.jar
+geronimo/jars/geronimo-timer-1.1.jar
+geronimo/jars/geronimo-tomcat-1.0-M3.jar
+geronimo/jars/geronimo-tomcat-1.0-M4.jar
+geronimo/jars/geronimo-tomcat-1.0-M5.jar
+geronimo/jars/geronimo-tomcat-1.0.jar
+geronimo/jars/geronimo-tomcat-1.1.jar
+geronimo/jars/geronimo-transaction-1.0-M2.jar
+geronimo/jars/geronimo-tomcat-builder-1.0-M4.jar
+geronimo/jars/geronimo-tomcat-builder-1.0-M5.jar
+geronimo/jars/geronimo-tomcat-builder-1.0.jar
+geronimo/jars/geronimo-tomcat-builder-1.1.jar
+geronimo/jars/geronimo-transaction-1.0-M1.jar
+geronimo/jars/geronimo-util-1.0.jar
+geronimo/jars/geronimo-transaction-1.0-M3.jar
+geronimo/jars/geronimo-transaction-1.0-M4.jar
+geronimo/jars/geronimo-transaction-1.0-M5.jar
+geronimo/jars/geronimo-transaction-1.0.jar
+geronimo/jars/geronimo-transaction-1.1.jar
+geronimo/jars/geronimo-uddi-db-1.0.jar
+geronimo/jars/geronimo-uddi-db-1.1.jar
+geronimo/jars/geronimo-uddi-server-1.0-M4.jar
+geronimo/jars/geronimo-uddi-server-1.0-M5.jar
+geronimo/jars/geronimo-upgrade-1.1.jar
+geronimo/jars/geronimo-util-1.0-M5.jar
+geronimo/jars/geronimo-web-builder-1.0-M4.jar
+geronimo/jars/geronimo-util-1.1.jar
+geronimo/jars/geronimo-web-builder-1.0-M5.jar
+geronimo/jars/geronimo-web-builder-1.0.jar
+geronimo/jars/geronimo-web-builder-1.1.jar
+geronimo/jars/geronimo-webservices-1.0-M4.jar
+geronimo/jars/geronimo-webservices-1.0-M5.jar
+geronimo/jars/geronimo-webservices-1.0.jar
+geronimo/jars/geronimo-webservices-1.1.jar
+geronimo/jars/geronimo-welcome-1.0-M5.jar
+geronimo/jars/geronimo-xmlbeans-plugin-1.0-M2.jar
+geronimo/plugins/geronimo-assembly-plugin-1.0.2.jar
+geronimo/plugins/geronimo-dependency-plugin-1.0.0.jar
+geronimo/plugins/geronimo-deployment-plugin-1.0-M1.jar
+geronimo/plugins/geronimo-deployment-plugin-1.0-M3.jar
+geronimo/plugins/geronimo-deployment-plugin-1.0-M4.jar
+geronimo/plugins/geronimo-deployment-plugin-1.0-M5.jar
+geronimo/plugins/geronimo-deployment-plugin-1.0.0.jar
+geronimo/plugins/geronimo-izpack-plugin-1.0.jar
+geronimo/plugins/geronimo-packaging-plugin-1.0.1.jar
+geronimo/plugins/geronimo-xmlbeans-plugin-1.0-M1.jar
+geronimo/plugins/geronimo-xmlbeans-plugin-1.0-M3.jar
+geronimo/plugins/geronimo-xmlbeans-plugin-1.0-M4.jar
+geronimo/plugins/geronimo-xpom-plugin-1.0-M3.jar
+geronimo/plugins/geronimo-xpom-plugin-1.0-M4.jar
+geronimo/plugins/xmlbeans-maven-plugin-2.0.0-beta1.jar
+geronimo/poms/activemq-1.0.pom
+geronimo/poms/activemq-broker-1.0.pom
+geronimo/poms/client-1.0.pom
+geronimo/poms/client-corba-1.0.pom
+geronimo/poms/client-security-1.0.pom
+geronimo/poms/client-system-1.0.pom
+geronimo/poms/client-system-1.1.pom
+geronimo/poms/daytrader-core-1.0.pom
+geronimo/poms/daytrader-derby-jetty-1.0.pom
+geronimo/poms/daytrader-derby-tomcat-1.0.pom
+geronimo/poms/daytrader-ear-1.0.pom
+geronimo/poms/daytrader-ear-1.1.pom
+geronimo/poms/daytrader-ejb-1.0.pom
+geronimo/poms/directory-1.0.pom
+geronimo/poms/daytrader-streamer-1.0.pom
+geronimo/poms/daytrader-web-1.0.pom
+geronimo/poms/daytrader-wsappclient-1.0.pom
+geronimo/poms/ge-activemq-rar-1.1.pom
+geronimo/poms/geronimo-1.0-M5.pom
+geronimo/poms/geronimo-activation-1.0-M4.pom
+geronimo/poms/geronimo-activation-1.0-M5.pom
+geronimo/poms/geronimo-activation-1.0.pom
+geronimo/poms/geronimo-activation-1.1.pom
+geronimo/poms/geronimo-axis-1.0.pom
+geronimo/poms/geronimo-axis-builder-1.0-M4.pom
+geronimo/poms/geronimo-assembly-1.0-M3.pom
+geronimo/poms/geronimo-assembly-1.0-M4.pom
+geronimo/poms/geronimo-assembly-plugin-1.0-M4.pom
+geronimo/poms/geronimo-assembly-plugin-1.0-M5.pom
+geronimo/poms/geronimo-assembly-plugin-1.0.2.pom
+geronimo/poms/j2ee-corba-1.0.pom
+geronimo/poms/geronimo-assembly-plugin-1.1.0-12.pom
+geronimo/poms/geronimo-axis-1.0-M2.pom
+geronimo/poms/geronimo-axis-1.0-M3.pom
+geronimo/poms/geronimo-axis-1.0-M4.pom
+geronimo/poms/geronimo-axis-1.0-M5.pom
+geronimo/poms/geronimo-axis-1.1.pom
+geronimo/poms/geronimo-axis-builder-1.0-M5.pom
+geronimo/poms/geronimo-axis-builder-1.0.pom
+geronimo/poms/geronimo-client-1.1.pom
+geronimo/poms/geronimo-axis-builder-1.1.pom
+geronimo/poms/geronimo-client-1.0-M3.pom
+geronimo/poms/geronimo-client-1.0-M4.pom
+geronimo/poms/geronimo-client-1.0-M5.pom
+geronimo/poms/geronimo-client-1.0.pom
+geronimo/poms/geronimo-client-builder-1.0-M3.pom
+geronimo/poms/geronimo-client-builder-1.0-M4.pom
+geronimo/poms/geronimo-client-builder-1.0-M5.pom
+geronimo/poms/geronimo-client-builder-1.0.pom
+geronimo/poms/geronimo-client-builder-1.1.pom
+geronimo/poms/geronimo-common-1.0-M4.pom
+geronimo/poms/geronimo-common-1.0-M5.pom
+geronimo/poms/geronimo-clustering-1.0-M2.pom
+geronimo/poms/geronimo-clustering-1.0-M3.pom
+geronimo/poms/geronimo-clustering-1.0-M4.pom
+geronimo/poms/geronimo-clustering-1.0-M5.pom
+geronimo/poms/geronimo-common-1.0-M2.pom
+geronimo/poms/geronimo-common-1.0-M3.pom
+geronimo/poms/geronimo-common-1.0.pom
+geronimo/poms/geronimo-common-1.1.pom
+geronimo/poms/geronimo-connector-1.0-M2.pom
+geronimo/poms/geronimo-connector-1.0-M3.pom
+geronimo/poms/geronimo-connector-1.0-M4.pom
+geronimo/poms/geronimo-connector-1.0-M5.pom
+geronimo/poms/geronimo-connector-1.0.pom
+geronimo/poms/geronimo-connector-1.1.pom
+geronimo/poms/geronimo-connector-builder-1.0-M3.pom
+geronimo/poms/geronimo-connector-builder-1.0-M4.pom
+geronimo/poms/geronimo-connector-builder-1.0-M5.pom
+geronimo/poms/geronimo-connector-builder-1.0.pom
+geronimo/poms/geronimo-connector-builder-1.1.pom
+geronimo/poms/geronimo-console-1.0-M5.pom
+geronimo/poms/geronimo-console-1.0.pom
+geronimo/poms/geronimo-console-1.1.pom
+geronimo/poms/geronimo-console-core-1.0-M5.pom
+geronimo/poms/geronimo-console-core-1.0.pom
+geronimo/poms/geronimo-console-core-1.1.pom
+geronimo/poms/geronimo-console-framework-1.0-M5.pom
+geronimo/poms/geronimo-console-framework-1.0.pom
+geronimo/poms/geronimo-deployment-1.1.pom
+geronimo/poms/jetty-1.0.pom
+geronimo/poms/geronimo-console-framework-1.1.pom
+geronimo/poms/geronimo-console-standard-1.0-M5.pom
+geronimo/poms/geronimo-console-standard-1.0.pom
+geronimo/poms/geronimo-core-1.0.pom
+geronimo/poms/geronimo-console-standard-1.1.pom
+geronimo/poms/geronimo-console-web-1.0-M2.pom
+geronimo/poms/geronimo-console-web-1.0-M3.pom
+geronimo/poms/geronimo-console-web-1.0-M4.pom
+geronimo/poms/geronimo-console-web-1.0-M5.pom
+geronimo/poms/tomcat-1.0.pom
+geronimo/poms/geronimo-console-web-1.0.pom
+geronimo/poms/geronimo-console-web-1.1.pom
+geronimo/poms/geronimo-converter-1.0.pom
+geronimo/poms/geronimo-converter-1.1.pom
+geronimo/poms/geronimo-core-1.0-M2.pom
+geronimo/poms/geronimo-core-1.0-M3.pom
+geronimo/poms/geronimo-core-1.0-M4.pom
+geronimo/poms/geronimo-core-1.0-M5.pom
+geronimo/poms/geronimo-core-1.1.pom
+geronimo/poms/geronimo-demo-1.0.pom
+geronimo/poms/geronimo-daytrader-derby-db-1.0.pom
+geronimo/poms/geronimo-daytrader-derby-db-1.1.pom
+geronimo/poms/geronimo-demo-1.0-M2.pom
+geronimo/poms/geronimo-demo-1.0-M3.pom
+geronimo/poms/geronimo-demo-1.0-M4.pom
+geronimo/poms/geronimo-demo-1.1.pom
+geronimo/poms/geronimo-demo-1.0-M5.pom
+geronimo/poms/geronimo-dependency-plugin-1.0.0.pom
+geronimo/poms/geronimo-dependency-plugin-1.1.0-3.pom
+geronimo/poms/geronimo-deploy-config-1.0-M4.pom
+geronimo/poms/geronimo-deploy-config-1.0-M5.pom
+geronimo/poms/geronimo-deploy-config-1.0.pom
+geronimo/poms/geronimo-deploy-config-1.1.pom
+geronimo/poms/geronimo-deploy-jsr88-1.0-M4.pom
+geronimo/poms/geronimo-deploy-jsr88-1.0-M5.pom
+geronimo/poms/geronimo-deploy-jsr88-1.0.pom
+geronimo/poms/geronimo-deploy-jsr88-1.1.pom
+geronimo/poms/j2ee-server-1.0.pom
+geronimo/poms/geronimo-deploy-tool-1.0-M4.pom
+geronimo/poms/geronimo-deploy-tool-1.0-M5.pom
+geronimo/poms/geronimo-deploy-tool-1.0.pom
+geronimo/poms/geronimo-deploy-tool-1.1.pom
+geronimo/poms/geronimo-deployment-1.0-M2.pom
+geronimo/poms/geronimo-deployment-1.0-M3.pom
+geronimo/poms/geronimo-deployment-1.0-M4.pom
+geronimo/poms/geronimo-deployment-1.0-M5.pom
+geronimo/poms/geronimo-deployment-1.0.pom
+geronimo/poms/geronimo-deployment-plugin-1.0-M2.pom
+geronimo/poms/geronimo-deployment-plugin-1.0-M4.pom
+geronimo/poms/geronimo-deployment-plugin-1.0-M5.pom
+geronimo/poms/geronimo-deployment-plugin-1.0.0.pom
+geronimo/poms/geronimo-derby-1.0-M3.pom
+geronimo/poms/geronimo-deployment-plugin-1.1.0-3.pom
+geronimo/poms/geronimo-derby-1.0-M4.pom
+geronimo/poms/geronimo-derby-1.0-M5.pom
+geronimo/poms/geronimo-derby-1.0.pom
+geronimo/poms/geronimo-derby-1.1.pom
+geronimo/poms/geronimo-derby-connector-1.0-M3.pom
+geronimo/poms/geronimo-derby-connector-1.0-M4.pom
+geronimo/poms/geronimo-directory-1.0-M5.pom
+geronimo/poms/geronimo-directory-1.0.pom
+geronimo/poms/geronimo-directory-1.1.pom
+geronimo/poms/geronimo-gbean-deployer-1.0.pom
+geronimo/poms/geronimo-gbean-deployer-1.1.pom
+geronimo/poms/geronimo-hot-deploy-1.0.pom
+geronimo/poms/geronimo-hot-deploy-1.1.pom
+geronimo/poms/geronimo-installer-processing-1.1.pom
+geronimo/poms/geronimo-installer-support-1.1.pom
+geronimo/poms/geronimo-jetty-1.0-M3.pom
+geronimo/poms/j2ee-system-1.0.pom
+geronimo/poms/geronimo-interop-1.0-M4.pom
+geronimo/poms/geronimo-interop-1.0-M5.pom
+geronimo/poms/geronimo-izpack-plugin-1.0.pom
+geronimo/poms/geronimo-izpack-plugin-1.1.pom
+geronimo/poms/geronimo-j2ee-1.0-M2.pom
+geronimo/poms/geronimo-j2ee-1.0-M3.pom
+geronimo/poms/geronimo-j2ee-1.0-M4.pom
+geronimo/poms/geronimo-j2ee-1.0-M5.pom
+geronimo/poms/geronimo-j2ee-1.0.pom
+geronimo/poms/geronimo-j2ee-1.1.pom
+geronimo/poms/geronimo-j2ee-builder-1.0-M3.pom
+geronimo/poms/geronimo-j2ee-builder-1.0-M4.pom
+geronimo/poms/geronimo-j2ee-builder-1.0-M5.pom
+geronimo/poms/geronimo-j2ee-builder-1.0.pom
+geronimo/poms/geronimo-j2ee-builder-1.1.pom
+geronimo/poms/j2ee-system-1.1.pom
+geronimo/poms/geronimo-j2ee-schema-1.0-M2.pom
+geronimo/poms/geronimo-j2ee-schema-1.0-M3.pom
+geronimo/poms/geronimo-j2ee-schema-1.0-M4.pom
+geronimo/poms/geronimo-j2ee-schema-1.0-M5.pom
+geronimo/poms/geronimo-j2ee-schema-1.0.pom
+geronimo/poms/geronimo-j2ee-schema-1.1.pom
+geronimo/poms/geronimo-javamail-transport-1.0.pom
+geronimo/poms/geronimo-javamail-transport-1.1.pom
+geronimo/poms/geronimo-jetty-1.0-M2.pom
+geronimo/poms/geronimo-jetty-1.0-M4.pom
+geronimo/poms/geronimo-jetty-1.0-M5.pom
+geronimo/poms/geronimo-jetty-1.0.pom
+geronimo/poms/geronimo-jetty-1.1.pom
+geronimo/poms/geronimo-jetty-builder-1.0-M3.pom
+geronimo/poms/geronimo-jetty-builder-1.0-M4.pom
+geronimo/poms/javamail-1.0.pom
+geronimo/poms/geronimo-jetty-builder-1.0-M5.pom
+geronimo/poms/geronimo-jetty-builder-1.0.pom
+geronimo/poms/geronimo-jetty-builder-1.1.pom
+geronimo/poms/geronimo-jmxdebug-1.0-M2.pom
+geronimo/poms/geronimo-jmxdebug-1.0.pom
+geronimo/poms/geronimo-jmxdebug-1.0-M3.pom
+geronimo/poms/geronimo-jmxdebug-1.0-M4.pom
+geronimo/poms/geronimo-jmxdebug-1.0-M5.pom
+geronimo/poms/geronimo-jmxremoting-1.0-M2.pom
+geronimo/poms/geronimo-jmxremoting-1.0-M3.pom
+geronimo/poms/geronimo-jmxremoting-1.0-M4.pom
+geronimo/poms/geronimo-jmxremoting-1.0-M5.pom
+geronimo/poms/geronimo-kernel-1.0-M5.pom
+geronimo/poms/geronimo-jmxremoting-1.0.pom
+geronimo/poms/geronimo-jmxremoting-1.1.pom
+geronimo/poms/geronimo-kernel-1.0-M2.pom
+geronimo/poms/geronimo-kernel-1.0-M3.pom
+geronimo/poms/geronimo-kernel-1.0-M4.pom
+geronimo/poms/geronimo-kernel-1.0.pom
+geronimo/poms/geronimo-kernel-1.1.pom
+geronimo/poms/geronimo-ldap-demo-1.0.pom
+geronimo/poms/geronimo-ldap-demo-1.1.pom
+geronimo/poms/geronimo-mail-1.0-M3.pom
+geronimo/poms/geronimo-mail-1.0-M4.pom
+geronimo/poms/geronimo-mail-1.0-M5.pom
+geronimo/poms/geronimo-mail-1.0.pom
+geronimo/poms/geronimo-mail-1.1.pom
+geronimo/poms/geronimo-naming-1.0.pom
+geronimo/poms/geronimo-management-1.0-M5.pom
+geronimo/poms/geronimo-management-1.0.pom
+geronimo/poms/geronimo-management-1.1.pom
+geronimo/poms/geronimo-naming-1.1.pom
+geronimo/poms/geronimo-naming-1.0-M2.pom
+geronimo/poms/geronimo-naming-1.0-M3.pom
+geronimo/poms/geronimo-naming-1.0-M4.pom
+geronimo/poms/geronimo-naming-1.0-M5.pom
+geronimo/poms/geronimo-naming-builder-1.0-M3.pom
+geronimo/poms/geronimo-naming-builder-1.0-M4.pom
+geronimo/poms/geronimo-naming-builder-1.0-M5.pom
+geronimo/poms/geronimo-naming-builder-1.0.pom
+geronimo/poms/geronimo-naming-builder-1.1.pom
+geronimo/poms/geronimo-network-1.0-M2.pom
+geronimo/poms/geronimo-network-1.0-M3.pom
+geronimo/poms/geronimo-packaging-plugin-0.1.1.pom
+geronimo/poms/geronimo-packaging-plugin-0.1.pom
+geronimo/poms/geronimo-packaging-plugin-1.0-M5.pom
+geronimo/poms/geronimo-packaging-plugin-1.0.1.pom
+geronimo/poms/geronimo-packaging-plugin-1.1.0-10.pom
+geronimo/poms/geronimo-remote-deploy-1.0.pom
+geronimo/poms/geronimo-remote-deploy-1.1.pom
+geronimo/poms/geronimo-remote-deploy-lib-1.0.pom
+geronimo/poms/geronimo-remote-deploy-lib-1.1.pom
+geronimo/poms/geronimo-remoting-1.0-M2.pom
+geronimo/poms/geronimo-remoting-1.0-M3.pom
+geronimo/poms/geronimo-scripts-1.0.pom
+geronimo/poms/geronimo-scripts-1.1.pom
+geronimo/poms/geronimo-security-1.0-M2.pom
+geronimo/poms/geronimo-security-1.0-M3.pom
+geronimo/poms/geronimo-security-1.0-M4.pom
+geronimo/poms/geronimo-security-1.0-M5.pom
+geronimo/poms/geronimo-security-1.0.pom
+geronimo/poms/geronimo-security-1.1.pom
+geronimo/poms/geronimo-system-1.0.pom
+geronimo/poms/geronimo-security-builder-1.0-M3.pom
+geronimo/poms/geronimo-security-builder-1.0-M4.pom
+geronimo/poms/geronimo-security-builder-1.0-M5.pom
+geronimo/poms/geronimo-security-builder-1.0.pom
+geronimo/poms/geronimo-security-builder-1.1.pom
+geronimo/poms/geronimo-service-builder-1.0-M4.pom
+geronimo/poms/geronimo-service-builder-1.0-M5.pom
+geronimo/poms/geronimo-service-builder-1.0.pom
+geronimo/poms/geronimo-service-builder-1.1.pom
+geronimo/poms/geronimo-servicemix-1.0-M4.pom
+geronimo/poms/geronimo-servicemix-1.0-M5.pom
+geronimo/poms/geronimo-servicemix-builder-1.0-M4.pom
+geronimo/poms/geronimo-servicemix-builder-1.0-M5.pom
+geronimo/poms/geronimo-spring-1.0-M2.pom
+geronimo/poms/geronimo-test-ddbean-1.0-M5.pom
+geronimo/poms/ldap-realm-1.0.pom
+geronimo/poms/geronimo-spring-1.0-M3.pom
+geronimo/poms/geronimo-spring-1.0-M4.pom
+geronimo/poms/geronimo-spring-1.0-M5.pom
+geronimo/poms/geronimo-spring-builder-1.0-M4.pom
+geronimo/poms/geronimo-spring-builder-1.0-M5.pom
+geronimo/poms/geronimo-system-1.0-M2.pom
+geronimo/poms/geronimo-system-1.0-M3.pom
+geronimo/poms/geronimo-system-1.0-M4.pom
+geronimo/poms/geronimo-system-1.0-M5.pom
+geronimo/poms/geronimo-system-1.1.pom
+geronimo/poms/geronimo-test-ddbean-1.0-M4.pom
+geronimo/poms/geronimo-timer-1.0-M4.pom
+geronimo/poms/magicGball-1.0.pom
+geronimo/poms/geronimo-test-ddbean-1.0.pom
+geronimo/poms/geronimo-test-ddbean-1.1.pom
+geronimo/poms/geronimo-timer-1.0-M2.pom
+geronimo/poms/geronimo-timer-1.0-M3.pom
+geronimo/poms/geronimo-tomcat-builder-1.0-M4.pom
+geronimo/poms/geronimo-timer-1.0-M5.pom
+geronimo/poms/geronimo-timer-1.0.pom
+geronimo/poms/geronimo-timer-1.1.pom
+geronimo/poms/geronimo-tomcat-1.0-M3.pom
+geronimo/poms/geronimo-tomcat-1.0-M4.pom
+geronimo/poms/geronimo-tomcat-1.0-M5.pom
+geronimo/poms/geronimo-tomcat-1.0.pom
+geronimo/poms/geronimo-tomcat-1.1.pom
+geronimo/poms/geronimo-tomcat-builder-1.0-M5.pom
+geronimo/poms/geronimo-uddi-db-1.0.pom
+geronimo/poms/geronimo-tomcat-builder-1.0.pom
+geronimo/poms/geronimo-tomcat-builder-1.1.pom
+geronimo/poms/geronimo-transaction-1.0-M2.pom
+geronimo/poms/geronimo-transaction-1.0-M3.pom
+geronimo/poms/geronimo-transaction-1.0-M4.pom
+geronimo/poms/geronimo-transaction-1.0-M5.pom
+geronimo/poms/geronimo-transaction-1.0.pom
+geronimo/poms/geronimo-transaction-1.1.pom
+geronimo/poms/geronimo-uddi-db-1.1.pom
+geronimo/poms/geronimo-uddi-server-1.0-M4.pom
+geronimo/poms/geronimo-uddi-server-1.0-M5.pom
+geronimo/poms/geronimo-uddi-server-1.0.pom
+geronimo/poms/geronimo-uddi-server-1.1.pom
+geronimo/poms/geronimo-upgrade-1.1.pom
+geronimo/poms/geronimo-util-1.0-M5.pom
+geronimo/poms/geronimo-util-1.0.pom
+geronimo/poms/geronimo-util-1.1.pom
+geronimo/poms/geronimo-web-builder-1.0-M4.pom
+geronimo/poms/geronimo-web-builder-1.0-M5.pom
+geronimo/poms/geronimo-web-builder-1.0.pom
+geronimo/poms/geronimo-web-builder-1.1.pom
+geronimo/poms/rmi-naming-1.0.pom
+geronimo/poms/geronimo-webservices-1.0-M4.pom
+geronimo/poms/geronimo-webservices-1.0-M5.pom
+geronimo/poms/geronimo-webservices-1.0.pom
+geronimo/poms/geronimo-webservices-1.1.pom
+geronimo/poms/geronimo-welcome-1.0-M5.pom
+geronimo/poms/geronimo-welcome-1.0.pom
+geronimo/poms/geronimo-welcome-1.1.pom
+geronimo/poms/geronimo-xmlbeans-plugin-1.0-20040908.pom
+geronimo/poms/geronimo-xmlbeans-plugin-1.0-46009.pom
+geronimo/poms/geronimo-xmlbeans-plugin-1.0-M2.pom
+geronimo/poms/geronimo-xmlbeans-plugin-1.0-M3.pom
+geronimo/poms/geronimo-xmlbeans-plugin-1.0-M4.pom
+geronimo/poms/geronimo-xpom-plugin-1.0-M4.pom
+geronimo/poms/hot-deployer-1.0.pom
+geronimo/poms/j2ee-deployer-1.0.pom
+geronimo/poms/j2ee-security-1.0.pom
+geronimo/poms/j2ee-system-experimental-1.0.pom
+geronimo/poms/jetty-deployer-1.0.pom
+geronimo/poms/jmxdebug-jetty-1.0.pom
+geronimo/poms/jmxdebug-tomcat-1.0.pom
+geronimo/poms/jsp-examples-jetty-1.0.pom
+geronimo/poms/jsp-examples-tomcat-1.0.pom
+geronimo/poms/ldap-demo-jetty-1.0.pom
+geronimo/poms/ldap-demo-tomcat-1.0.pom
+geronimo/poms/magicGball-1.1.pom
+geronimo/poms/maven-metadata-mavenOneRepository.xml
+geronimo/poms/online-deployer-1.0.pom
+geronimo/poms/online-deployer-1.1.pom
+geronimo/poms/remote-deploy-jetty-1.0.pom
+geronimo/poms/servlets-examples-jetty-1.0.pom
+geronimo/poms/remote-deploy-tomcat-1.0.pom
+geronimo/poms/servlets-examples-tomcat-1.0.pom
+geronimo/poms/shutdown-1.0.pom
+geronimo/poms/shutdown-1.1.pom
+geronimo/poms/system-database-1.0.pom
+geronimo/poms/tomcat-deployer-1.0.pom
+geronimo/poms/uddi-jetty-1.0.pom
+geronimo/poms/uddi-tomcat-1.0.pom
+geronimo/poms/upgrade-cli-1.1.pom
+geronimo/poms/webconsole-jetty-1.0.pom
+geronimo/poms/webconsole-tomcat-1.0.pom
+geronimo/poms/welcome-jetty-1.0.pom
+geronimo/poms/welcome-tomcat-1.0.pom
+geronimo/poms/xmlbeans-maven-plugin-2.0.0-beta1.pom
+geronimo/rars/geronimo-derby-connector-1.0-M3.rar
+geronimo/rars/geronimo-derby-connector-1.0-M4.rar
+geronimo/wars/daytrader-web-1.0.war
+geronimo/wars/geronimo-console-framework-1.0.war
+geronimo/wars/geronimo-servlet-examples-tomcat-5.5.12.war
+geronimo/wars/geronimo-console-standard-1.0.war
+geronimo/wars/geronimo-console-web-1.0-M1.war
+geronimo/wars/geronimo-demo-1.0-M3.war
+geronimo/wars/geronimo-demo-1.0-M4.war
+geronimo/wars/geronimo-demo-1.0-M5.war
+geronimo/wars/geronimo-demo-1.0.war
+geronimo/wars/geronimo-jmxdebug-1.0-M1.war
+geronimo/wars/geronimo-jmxdebug-1.0-M3.war
+geronimo/wars/geronimo-jmxdebug-1.0-M4.war
+geronimo/wars/geronimo-jmxdebug-1.0-M5.war
+geronimo/wars/geronimo-jmxdebug-1.0.war
+geronimo/wars/geronimo-jsp-examples-tomcat-5.5.12.war
+geronimo/wars/geronimo-ldap-demo-1.0.war
+geronimo/wars/geronimo-remote-deploy-1.0.war
+geronimo/wars/geronimo-uddi-server-1.0.war
+geronimo/wars/geronimo-welcome-1.0.war
+geronimo/wars/magicGball-1.0.war
+geronimo/KEYS
+geronimo-spec/jars/geronimo-spec-activation-1.0.2-rc1.jar
+geronimo-spec/jars/geronimo-spec-activation-1.0.2-rc2.jar
+geronimo-spec/jars/geronimo-spec-activation-1.0.2-rc3.jar
+geronimo-spec/jars/geronimo-spec-activation-1.0.2-rc4.jar
+geronimo-spec/jars/geronimo-spec-corba-2.3-rc4.jar
+geronimo-spec/jars/geronimo-spec-ejb-1.0-M1.jar
+geronimo-spec/jars/geronimo-spec-ejb-2.1-rc1.jar
+geronimo-spec/jars/geronimo-spec-ejb-2.1-rc2.jar
+geronimo-spec/jars/geronimo-spec-ejb-2.1-rc3.jar
+geronimo-spec/jars/geronimo-spec-ejb-2.1-rc4.jar
+geronimo-spec/jars/geronimo-spec-ejb-DEV.jar
+geronimo-spec/jars/geronimo-spec-j2ee-1.0-M1.jar
+geronimo-spec/jars/geronimo-spec-j2ee-connector-1.0-M1.jar
+geronimo-spec/jars/geronimo-spec-j2ee-1.4-rc1.jar
+geronimo-spec/jars/geronimo-spec-j2ee-1.4-rc2.jar
+geronimo-spec/jars/geronimo-spec-j2ee-1.4-rc3.jar
+geronimo-spec/jars/geronimo-spec-j2ee-1.4-rc4.jar
+geronimo-spec/jars/geronimo-spec-jaxr-1.0-rc1.jar
+geronimo-spec/jars/geronimo-spec-j2ee-connector-1.5-rc1.jar
+geronimo-spec/jars/geronimo-spec-j2ee-connector-1.5-rc2.jar
+geronimo-spec/jars/geronimo-spec-j2ee-connector-1.5-rc3.jar
+geronimo-spec/jars/geronimo-spec-j2ee-connector-1.5-rc4.jar
+geronimo-spec/jars/geronimo-spec-j2ee-deployment-1.0-M1.jar
+geronimo-spec/jars/geronimo-spec-j2ee-deployment-1.1-rc1.jar
+geronimo-spec/jars/geronimo-spec-j2ee-deployment-1.1-rc2.jar
+geronimo-spec/jars/geronimo-spec-j2ee-deployment-1.1-rc3.jar
+geronimo-spec/jars/geronimo-spec-jaxr-1.0-rc2.jar
+geronimo-spec/jars/geronimo-spec-j2ee-deployment-1.1-rc4.jar
+geronimo-spec/jars/geronimo-spec-j2ee-jacc-1.0-M1.jar
+geronimo-spec/jars/geronimo-spec-j2ee-jacc-1.0-rc1.jar
+geronimo-spec/jars/geronimo-spec-j2ee-jacc-1.0-rc2.jar
+geronimo-spec/jars/geronimo-spec-j2ee-jacc-1.0-rc3.jar
+geronimo-spec/jars/geronimo-spec-j2ee-jacc-1.0-rc4.jar
+geronimo-spec/jars/geronimo-spec-j2ee-management-1.0-M1.jar
+geronimo-spec/jars/geronimo-spec-javamail-1.3.1-rc5.jar
+geronimo-spec/jars/geronimo-spec-j2ee-management-1.0-rc1.jar
+geronimo-spec/jars/geronimo-spec-jaxr-1.0-rc3.jar
+geronimo-spec/jars/geronimo-spec-j2ee-management-1.0-rc2.jar
+geronimo-spec/jars/geronimo-spec-j2ee-management-1.0-rc3.jar
+geronimo-spec/jars/geronimo-spec-j2ee-management-1.0-rc4.jar
+geronimo-spec/jars/geronimo-spec-j2eeschema-1.0-M1.jar
+geronimo-spec/jars/geronimo-spec-javamail-1.3.1-rc1.jar
+geronimo-spec/jars/geronimo-spec-javamail-1.3.1-rc2.jar
+geronimo-spec/jars/geronimo-spec-javamail-1.3.1-rc3.jar
+geronimo-spec/jars/geronimo-spec-javamail-1.3.1-rc4.jar
+geronimo-spec/jars/geronimo-spec-jaxr-1.0-rc4.jar
+geronimo-spec/jars/geronimo-spec-jaxrpc-1.1-rc4.jar
+geronimo-spec/jars/geronimo-spec-jms-1.0-M1.jar
+geronimo-spec/jars/geronimo-spec-jms-1.1-rc1.jar
+geronimo-spec/jars/geronimo-spec-jms-1.1-rc2.jar
+geronimo-spec/jars/geronimo-spec-jms-1.1-rc3.jar
+geronimo-spec/jars/geronimo-spec-jms-1.1-rc4.jar
+geronimo-spec/jars/geronimo-spec-jms-DEV.jar
+geronimo-spec/jars/geronimo-spec-jsp-1.0-M1.jar
+geronimo-spec/jars/geronimo-spec-jsp-2.0-rc1.jar
+geronimo-spec/jars/geronimo-spec-jsp-2.0-rc2.jar
+geronimo-spec/jars/geronimo-spec-jsp-2.0-rc3.jar
+geronimo-spec/jars/geronimo-spec-jsp-2.0-rc4.jar
+geronimo-spec/jars/geronimo-spec-jta-1.0-M1.jar
+geronimo-spec/jars/geronimo-spec-jta-1.0.1B-rc1.jar
+geronimo-spec/jars/geronimo-spec-jta-1.0.1B-rc2.jar
+geronimo-spec/jars/geronimo-spec-jta-1.0.1B-rc3.jar
+geronimo-spec/jars/geronimo-spec-jta-1.0.1B-rc4.jar
+geronimo-spec/jars/geronimo-spec-jta-DEV.jar
+geronimo-spec/jars/geronimo-spec-qname-1.1-rc4.jar
+geronimo-spec/jars/geronimo-spec-saaj-1.1-rc4.jar
+geronimo-spec/jars/geronimo-spec-servlet-1.0-M1.jar
+geronimo-spec/jars/geronimo-spec-servlet-2.4-rc1.jar
+geronimo-spec/jars/geronimo-spec-servlet-2.4-rc2.jar
+geronimo-spec/jars/geronimo-spec-servlet-2.4-rc3.jar
+geronimo-spec/jars/geronimo-spec-servlet-2.4-rc4.jar
+geronimo-spec/poms/geronimo-spec-j2ee-connector-1.5-rc1.pom
+geronimo-spec/poms/geronimo-spec-activation-1.0.2-rc1.pom
+geronimo-spec/poms/geronimo-spec-activation-1.0.2-rc2.pom
+geronimo-spec/poms/geronimo-spec-activation-1.0.2-rc3.pom
+geronimo-spec/poms/geronimo-spec-activation-1.0.2-rc4.pom
+geronimo-spec/poms/geronimo-spec-corba-2.3-rc4.pom
+geronimo-spec/poms/geronimo-spec-ejb-2.1-rc1.pom
+geronimo-spec/poms/geronimo-spec-ejb-2.1-rc2.pom
+geronimo-spec/poms/geronimo-spec-ejb-2.1-rc3.pom
+geronimo-spec/poms/geronimo-spec-ejb-2.1-rc4.pom
+geronimo-spec/poms/geronimo-spec-j2ee-1.4-rc1.pom
+geronimo-spec/poms/geronimo-spec-j2ee-1.4-rc2.pom
+geronimo-spec/poms/geronimo-spec-j2ee-1.4-rc3.pom
+geronimo-spec/poms/geronimo-spec-j2ee-1.4-rc4.pom
+geronimo-spec/poms/geronimo-spec-saaj-1.1-rc4.pom
+geronimo-spec/poms/geronimo-spec-j2ee-connector-1.5-rc2.pom
+geronimo-spec/poms/geronimo-spec-j2ee-connector-1.5-rc3.pom
+geronimo-spec/poms/geronimo-spec-j2ee-connector-1.5-rc4.pom
+geronimo-spec/poms/geronimo-spec-j2ee-deployment-1.1-rc1.pom
+geronimo-spec/poms/geronimo-spec-j2ee-deployment-1.1-rc2.pom
+geronimo-spec/poms/geronimo-spec-j2ee-deployment-1.1-rc3.pom
+geronimo-spec/poms/geronimo-spec-j2ee-deployment-1.1-rc4.pom
+geronimo-spec/poms/geronimo-spec-j2ee-jacc-1.0-rc1.pom
+geronimo-spec/poms/geronimo-spec-j2ee-jacc-1.0-rc2.pom
+geronimo-spec/poms/geronimo-spec-j2ee-jacc-1.0-rc3.pom
+geronimo-spec/poms/geronimo-spec-j2ee-jacc-1.0-rc4.pom
+geronimo-spec/poms/geronimo-spec-j2ee-management-1.0-rc1.pom
+geronimo-spec/poms/geronimo-spec-j2ee-management-1.0-rc2.pom
+geronimo-spec/poms/geronimo-spec-j2ee-management-1.0-rc3.pom
+geronimo-spec/poms/geronimo-spec-j2ee-management-1.0-rc4.pom
+geronimo-spec/poms/geronimo-spec-javamail-1.3.1-rc1.pom
+geronimo-spec/poms/geronimo-spec-javamail-1.3.1-rc2.pom
+geronimo-spec/poms/geronimo-spec-javamail-1.3.1-rc3.pom
+geronimo-spec/poms/geronimo-spec-javamail-1.3.1-rc4.pom
+geronimo-spec/poms/geronimo-spec-javamail-1.3.1-rc5.pom
+geronimo-spec/poms/geronimo-spec-jaxr-1.0-rc1.pom
+geronimo-spec/poms/geronimo-spec-jaxr-1.0-rc2.pom
+geronimo-spec/poms/geronimo-spec-jaxr-1.0-rc3.pom
+geronimo-spec/poms/geronimo-spec-jaxr-1.0-rc4.pom
+geronimo-spec/poms/geronimo-spec-jaxrpc-1.1-rc4.pom
+geronimo-spec/poms/geronimo-spec-jms-1.1-rc1.pom
+geronimo-spec/poms/geronimo-spec-jms-1.1-rc2.pom
+geronimo-spec/poms/geronimo-spec-jms-1.1-rc3.pom
+geronimo-spec/poms/geronimo-spec-jms-1.1-rc4.pom
+geronimo-spec/poms/geronimo-spec-jsp-2.0-rc1.pom
+geronimo-spec/poms/geronimo-spec-jsp-2.0-rc2.pom
+geronimo-spec/poms/geronimo-spec-jsp-2.0-rc3.pom
+geronimo-spec/poms/geronimo-spec-jsp-2.0-rc4.pom
+geronimo-spec/poms/geronimo-spec-jta-1.0.1B-rc1.pom
+geronimo-spec/poms/geronimo-spec-jta-1.0.1B-rc2.pom
+geronimo-spec/poms/geronimo-spec-jta-1.0.1B-rc3.pom
+geronimo-spec/poms/geronimo-spec-jta-1.0.1B-rc4.pom
+geronimo-spec/poms/geronimo-spec-qname-1.1-rc4.pom
+geronimo-spec/poms/geronimo-spec-servlet-2.4-rc1.pom
+geronimo-spec/poms/geronimo-spec-servlet-2.4-rc2.pom
+geronimo-spec/poms/geronimo-spec-servlet-2.4-rc3.pom
+geronimo-spec/poms/geronimo-spec-servlet-2.4-rc4.pom
+hivemind/jars/hivemind-1.0-beta-1.jar
+hivemind/jars/hivemind-1.0-beta-2.jar
+hivemind/jars/hivemind-1.0-beta-3-snapshot.jar
+hivemind/jars/hivemind-1.0-rc-1.jar
+hivemind/jars/hivemind-1.0-rc-2.jar
+hivemind/jars/hivemind-1.0.jar
+hivemind/jars/hivemind-1.1.1.jar
+hivemind/jars/hivemind-1.1-alpha-1.jar
+hivemind/jars/hivemind-1.1-alpha-2.jar
+hivemind/jars/hivemind-1.1-alpha-3.jar
+hivemind/jars/hivemind-1.1-beta-1.jar
+hivemind/jars/hivemind-1.1-beta-2.jar
+hivemind/jars/hivemind-1.1-beta-3.jar
+hivemind/jars/hivemind-1.1-rc-1.jar
+hivemind/jars/hivemind-1.1.jar
+hivemind/jars/hivemind-jmx-1.1-beta-1.jar
+hivemind/jars/hivemind-jmx-1.1-beta-2.jar
+hivemind/jars/hivemind-jmx-1.1-beta-3.jar
+hivemind/jars/hivemind-jmx-1.1-rc-1.jar
+hivemind/jars/hivemind-jmx-1.1.1.jar
+hivemind/jars/hivemind-jmx-1.1.jar
+hivemind/jars/hivemind-lib-1.0-beta-3-snapshot.jar
+hivemind/jars/hivemind-lib-1.0-beta-1.jar
+hivemind/jars/hivemind-lib-1.0-beta-2.jar
+hivemind/jars/hivemind-lib-1.0-rc-1.jar
+hivemind/jars/hivemind-lib-1.0-rc-2.jar
+hivemind/jars/hivemind-lib-1.0.jar
+hivemind/jars/hivemind-lib-1.1-alpha-1.jar
+hivemind/jars/hivemind-lib-1.1-alpha-2.jar
+hivemind/jars/hivemind-lib-1.1-alpha-3.jar
+hivemind/jars/hivemind-lib-1.1-beta-1.jar
+hivemind/jars/hivemind-lib-1.1-beta-2.jar
+hivemind/jars/hivemind-lib-1.1-beta-3.jar
+hivemind/jars/hivemind-lib-1.1.1.jar
+hivemind/jars/hivemind-lib-1.1-rc-1.jar
+hivemind/jars/hivemind-lib-1.1.jar
+httpcomponents-httpcore/jars/jakarta-httpcore-4.0-alpha3.jar
+httpcomponents-httpcore/jars/jakarta-httpcore-4.0-alpha2.jar
+httpcomponents-httpcore/jars/jakarta-httpcore-nio-4.0-alpha3.jar
+httpcomponents-httpcore/jars/jakarta-httpcore-4.0-alpha4.jar
+httpcomponents-httpcore/jars/jakarta-httpcore-niossl-4.0-alpha4.jar
+httpcomponents-httpcore/jars/jakarta-httpcore-nio-4.0-alpha4.jar
+httpcomponents-httpcore/jars/httpcore-4.0-alpha5.jar
+httpcomponents-httpcore/jars/httpcore-nio-4.0-alpha5.jar
+httpcomponents-httpcore/jars/httpcore-niossl-4.0-alpha5.jar
+jakarta-regexp/jars/jakarta-regexp-1.4.jar
+james/bars/james-server-3.0a.bar
+james/blocks/james-server-3.0a.block
+james/configs/james-server-3.0a.config
+james/jars/james-3.0a1.jar
+james/jars/mailet-1.0.jar
+james/jars/mailet-3.0.jar
+james/jars/mailet-api-1.0.jar
+james/jars/mailet-api-3.0.jar
+james/xmls/block.xml
+james/xmls/config.xml
+javax.jdo/jars/jdo2-api-2.0-beta.jar
+javax.jdo/jars/jdo2-api-2.0-rc1.jar
+javax.jdo/jars/jdo2-api-2.0.jar
+javax.jdo/poms/jdo2-api-2.0-beta.pom
+javax.jdo/poms/jdo2-api-2.0-rc1.pom
+javax.jdo/poms/jdo2-api-2.0.pom
+jaxme/jars/jaxme-0.2.jar
+jaxme/jars/jaxme-0.3.1.jar
+jaxme/jars/jaxme-0.3.jar
+jaxme/jars/jaxme-api-0.2.jar
+jaxme/jars/jaxme-api-0.3.1.jar
+jaxme/jars/jaxme-api-0.3.jar
+jaxme/jars/jaxme2-0.4beta.jar
+jaxme/jars/jaxme-js-0.2.jar
+jaxme/jars/jaxme-js-0.3.1.jar
+jaxme/jars/jaxme-js-0.3.jar
+jaxme/jars/jaxme-pm-0.2.jar
+jaxme/jars/jaxme-pm-0.3.1.jar
+jaxme/jars/jaxme-pm-0.3.jar
+jaxme/jars/jaxme-rt-0.2.jar
+jaxme/jars/jaxme-rt-0.3.1.jar
+jaxme/jars/jaxme-rt-0.3.jar
+jaxme/jars/jaxme-xs-0.2.jar
+jaxme/jars/jaxme-xs-0.3.1.jar
+jaxme/jars/jaxme-xs-0.3.jar
+jaxme/jars/jaxme2-0.4-src.zip
+jaxme/jars/jaxme2-0.4.jar
+jaxme/jars/jaxme2-0.4beta-src.zip
+jaxme/jars/jaxme2-0.5.1-sources.jar
+jaxme/jars/jaxme2-0.5.1.jar
+jaxme/jars/jaxme2-0.5.jar
+jaxme/jars/jaxme2-0.5beta.jar
+jaxme/jars/jaxme2-src.zip
+jaxme/jars/jaxme2-rt-0.4.jar
+jaxme/jars/jaxme2-rt-0.4beta.jar
+jaxme/jars/jaxme2-rt-0.5.1-sources.jar
+jaxme/jars/jaxme2-rt-0.5.1.jar
+jaxme/jars/jaxme2-rt-0.5.jar
+jaxme/jars/jaxme2-rt-0.5beta.jar
+jaxme/jars/jaxme2-src-0.5.zip
+jaxme/jars/jaxme2-src-0.5beta.zip
+jaxme/jars/jaxmeapi-0.4-src.zip
+jaxme/jars/jaxmeapi-0.5.1.jar
+jaxme/jars/jaxmejs-0.4.jar
+jaxme/jars/jaxmeapi-0.4.jar
+jaxme/jars/jaxmeapi-0.4beta-src.zip
+jaxme/jars/jaxmeapi-0.4beta.jar
+jaxme/jars/jaxmeapi-0.5.1-sources.jar
+jaxme/jars/jaxmeapi-0.5.jar
+jaxme/jars/jaxmeapi-0.5beta.jar
+jaxme/jars/jaxmeapi-src-0.5.zip
+jaxme/jars/jaxmeapi-src-0.5beta.zip
+jaxme/jars/jaxmejs-0.4-src.zip
+jaxme/jars/jaxmejs-0.4beta-src.zip
+jaxme/jars/jaxmejs-0.4beta.jar
+jaxme/jars/jaxmejs-0.5.1-sources.jar
+jaxme/jars/jaxmejs-0.5.1.jar
+jaxme/jars/jaxmejs-0.5.jar
+jaxme/jars/jaxmejs-0.5beta.jar
+jaxme/jars/jaxmejs-src-0.5.zip
+jaxme/jars/jaxmejs-src-0.5beta.zip
+jaxme/jars/jaxmepm-0.4-src.zip
+jaxme/jars/jaxmepm-0.4.jar
+jaxme/jars/jaxmepm-0.4beta-src.zip
+jaxme/jars/jaxmepm-0.4beta.jar
+jaxme/jars/jaxmepm-0.5.1-sources.jar
+jaxme/jars/jaxmepm-0.5.1.jar
+jaxme/jars/jaxmepm-0.5.jar
+jaxme/jars/jaxmepm-0.5beta.jar
+jaxme/jars/jaxmepm-src-0.5.zip
+jaxme/jars/jaxmepm-src-0.5beta.zip
+jaxme/jars/jaxmexs-0.4-src.zip
+jaxme/jars/jaxmexs-0.4.jar
+jaxme/jars/jaxmexs-0.5.jar
+jaxme/jars/jaxmexs-0.4beta-src.zip
+jaxme/jars/jaxmexs-0.4beta.jar
+jaxme/jars/jaxmexs-0.5.1-sources.jar
+jaxme/jars/jaxmexs-0.5.1.jar
+jaxme/jars/jaxmexs-0.5beta.jar
+jaxme/jars/jaxmexs-src-0.5.zip
+jaxme/jars/jaxmexs-src-0.5beta.zip
+jcs/jars/jcs-1.0-dev.20020801.123921.jar
+jcs/jars/jcs-1.0-dev.20020801.125151.jar
+jcs/jars/jcs-1.0-dev.jar
+jcs/jars/jcs-20030822.182132.jar
+jcs/jars/jcs-snapshot-version
+jcs/jars/jcs-1.3.jar
+jcs/poms/jcs-1.3.pom
+jcs-javagroups/jars/jcs-javagroups-alpha-0.20020813.013703.jar
+jspapi/jars/jsp-api-2.0-20040521.jar
+jstl/jars/jstl-1.0.1.jar
+jstl/jars/jstl-1.0.2.jar
+jstl/jars/jstl-1.0.3.jar
+jstl/jars/jstl-1.0.4.jar
+jstl/jars/jstl-1.0.5.jar
+jstl/jars/jstl-1.0.6.jar
+jstl/jars/jstl-1.0.jar
+jstl/jars/jstl-1.1.0.jar
+jstl/jars/jstl-1.1.1.jar
+jstl/jars/jstl-1.1.2.jar
+jstl/README
+log4j/jars/log4j-1.1.3.jar
+log4j/jars/log4j-1.2.11.jar
+log4j/jars/log4j-1.2.14.jar
+log4j/jars/log4j-1.2.12.jar
+log4j/jars/log4j-1.2.13.jar
+log4j/jars/log4j-1.2.4.jar
+log4j/jars/log4j-1.2.5.jar
+log4j/jars/log4j-1.2.6.jar
+log4j/jars/log4j-1.2.7.jar
+log4j/jars/log4j-1.2.8.jar
+log4j/jars/log4j-1.2.9.jar
+log4j/jars/log4j-1.2.15.jar
+log4j/java-sources/log4j-1.2.13-sources.jar
+log4j/java-sources/log4j-1.2.14-sources.jar
+log4j/java-sources/log4j-1.2.15-sources.jar
+log4j/poms/log4j-1.2.12.pom
+log4j/poms/log4j-1.2.13.pom
+log4j/poms/log4j-1.2.14.pom
+log4j/poms/log4j-1.2.15.pom
+logkit/distributions/LogKit-1.2-bin.zip
+logkit/jars/logkit-1.0.1.jar
+logkit/jars/logkit-1.2.2.jar.asc.txt
+logkit/jars/logkit-1.2.2.jar
+logkit/jars/logkit-1.2.jar
+logkit/jars/logkit-20020529.jar
+lucene/jars/lucene-1.2.jar
+lucene/jars/lucene-1.3-rc1.jar
+lucene/jars/lucene-1.4.1.jar
+lucene/jars/lucene-1.4.2.jar
+lucene/jars/lucene-1.4.3.jar
+magicGball/jars/magicGball-0.01234-alpha0.jar
+magicGball/poms/magicGball-0.01234-alpha0.pom
+maven/jars/commons-jelly-1.0.1-20060717.jar
+maven/jars/maven-1.0.1.jar
+maven/jars/maven-1.0-rc3.jar
+maven/jars/maven-1.0-rc4.jar
+maven/jars/maven-1.1-beta-1.jar
+maven/jars/maven-1.0.2.jar
+maven/jars/maven-1.0.jar
+maven/jars/maven-1.1-beta-2.jar
+maven/jars/maven-1.1-beta-3.jar
+maven/jars/maven-1.1-RC1.jar
+maven/jars/maven-jar-plugin-1.5.jar
+maven/jars/maven-java-plugin-1.5.jar
+maven/jars/maven-jelly-tags-1.0.1.jar
+maven/jars/velocity-1.5-20060721.044818.jar
+maven/jars/maven-jelly-tags-1.0.jar
+maven/jars/maven-model-3.0.0.jar
+maven/jars/maven-1.1.jar
+maven/jars/maven-model-3.0.1.jar
+maven/jars/maven-model-3.0.2.jar
+maven/jars/wagon-file-1.0-alpha-3.jar
+maven/jars/wagon-http-1.0-alpha-3.jar
+maven/jars/wagon-provider-api-1.0-alpha-3.jar
+maven/java-sources/maven-1.1-beta-3-sources.jar
+maven/java-sources/maven-ant-plugin-1.10-sources.jar
+maven/java-sources/maven-ear-plugin-1.9-sources.jar
+maven/java-sources/maven-linkcheck-plugin-1.4-sources.jar
+maven/java-sources/maven-modello-plugin-1.0-sources.jar
+maven/java-sources/maven-pdf-plugin-2.5-sources.jar
+maven/java-sources/maven-pmd-plugin-1.9-sources.jar
+maven/java-sources/maven-site-plugin-1.7.2-sources.jar
+maven/java-sources/maven-announcement-plugin-1.4.1-sources.jar
+maven/java-sources/maven-developer-activity-plugin-1.6.1-sources.jar
+maven/java-sources/maven-file-activity-plugin-1.6.1-sources.jar
+maven/java-sources/maven-model-3.0.2-sources.jar
+maven/java-sources/maven-plugin-plugin-1.7.1-sources.jar
+maven/java-sources/maven-1.1-RC1-sources.jar
+maven/java-sources/maven-idea-plugin-1.7-sources.jar
+maven/java-sources/maven-jalopy-plugin-1.5.1-sources.jar
+maven/java-sources/maven-jar-plugin-1.8.1-sources.jar
+maven/java-sources/maven-javadoc-plugin-1.9-sources.jar
+maven/java-sources/maven-multichanges-plugin-1.3-sources.jar
+maven/java-sources/maven-1.1-sources.jar
+maven/javadoc.jars/maven-1.1-beta-3.javadoc.jar
+maven/javadoc.jars/maven-modello-plugin-1.0.javadoc.jar
+maven/javadoc.jars/maven-announcement-plugin-1.4.1.javadoc.jar
+maven/javadoc.jars/maven-model-3.0.2.javadoc.jar
+maven/javadoc.jars/maven-plugin-plugin-1.7.1.javadoc.jar
+maven/javadoc.jars/maven-jalopy-plugin-1.5.1.javadoc.jar
+maven/javadoc.jars/maven-jar-plugin-1.8.1.javadoc.jar
+maven/javadoc.jars/maven-javadoc-plugin-1.9.javadoc.jar
+maven/javadoc.jars/maven-multichanges-plugin-1.3.javadoc.jar
+maven/javadoc.jars/maven-1.1-RC1.javadoc.jar
+maven/javadoc.jars/maven-1.1.javadoc.jar
+maven/plugins/maven-abbot-plugin-1.0.jar
+maven/plugins/maven-abbot-plugin-1.1.jar
+maven/plugins/maven-announcement-plugin-1.1.jar
+maven/plugins/maven-announcement-plugin-1.2.jar
+maven/plugins/maven-announcement-plugin-1.3.jar
+maven/plugins/maven-changelog-plugin-1.9.1.jar
+maven/plugins/maven-announcement-plugin-1.4.jar
+maven/plugins/maven-ant-plugin-1.10.jar
+maven/plugins/maven-ant-plugin-1.7.jar
+maven/plugins/maven-ant-plugin-1.8.1.jar
+maven/plugins/maven-ant-plugin-1.8.jar
+maven/plugins/maven-ant-plugin-1.9.jar
+maven/plugins/maven-antlr-plugin-1.2.1.jar
+maven/plugins/maven-antlr-plugin-1.2.2.jar
+maven/plugins/maven-antlr-plugin-1.2.jar
+maven/plugins/maven-appserver-plugin-2.0.jar
+maven/plugins/maven-artifact-plugin-1.2.jar
+maven/plugins/maven-artifact-plugin-1.3.jar
+maven/plugins/maven-artifact-plugin-1.4.1.jar
+maven/plugins/maven-artifact-plugin-1.4.jar
+maven/plugins/maven-artifact-plugin-1.5.1.jar
+maven/plugins/maven-artifact-plugin-1.5.2.jar
+maven/plugins/maven-caller-plugin-1.1.jar
+maven/plugins/maven-artifact-plugin-1.5.jar
+maven/plugins/maven-artifact-plugin-1.6.jar
+maven/plugins/maven-artifact-plugin-1.7.jar
+maven/plugins/maven-castor-plugin-1.2.jar
+maven/plugins/maven-artifact-plugin-1.8.jar
+maven/plugins/maven-ashkelon-plugin-1.2.jar
+maven/plugins/maven-aspectj-plugin-3.0.jar
+maven/plugins/maven-aspectj-plugin-3.1.1.jar
+maven/plugins/maven-aspectj-plugin-3.1.jar
+maven/plugins/maven-aspectj-plugin-3.2.jar
+maven/plugins/maven-aspectj-plugin-4.0.jar
+maven/plugins/maven-aspectwerkz-plugin-1.2.jar
+maven/plugins/maven-clean-plugin-1.2.jar
+maven/plugins/maven-changelog-plugin-1.5.jar
+maven/plugins/maven-changelog-plugin-1.6.jar
+maven/plugins/maven-changelog-plugin-1.7.1.jar
+maven/plugins/maven-changelog-plugin-1.7.2.jar
+maven/plugins/maven-changelog-plugin-1.7.jar
+maven/plugins/maven-changelog-plugin-1.8.1.jar
+maven/plugins/maven-changelog-plugin-1.8.2.jar
+maven/plugins/maven-changelog-plugin-1.8.jar
+maven/plugins/maven-changelog-plugin-1.9.jar
+maven/plugins/maven-changes-plugin-1.4.jar
+maven/plugins/maven-changes-plugin-1.5.1.jar
+maven/plugins/maven-changes-plugin-1.5.jar
+maven/plugins/maven-clean-plugin-1.3.jar
+maven/plugins/maven-changes-plugin-1.6.jar
+maven/plugins/maven-checkstyle-plugin-2.4.1.jar
+maven/plugins/maven-checkstyle-plugin-2.4.jar
+maven/plugins/maven-checkstyle-plugin-2.5.jar
+maven/plugins/maven-checkstyle-plugin-3.0.1.jar
+maven/plugins/maven-checkstyle-plugin-3.0.jar
+maven/plugins/maven-clean-plugin-1.4.jar
+maven/plugins/maven-clover-plugin-1.10.jar
+maven/plugins/maven-clover-plugin-1.11.jar
+maven/plugins/maven-clover-plugin-1.5.jar
+maven/plugins/maven-clover-plugin-1.6.jar
+maven/plugins/maven-clover-plugin-1.7.jar
+maven/plugins/maven-clover-plugin-1.8.jar
+maven/plugins/maven-clover-plugin-1.9.1.jar
+maven/plugins/maven-clover-plugin-1.9.jar
+maven/plugins/maven-console-plugin-1.1.jar
+maven/plugins/maven-console-plugin-1.2.jar
+maven/plugins/maven-cruisecontrol-plugin-1.2.jar
+maven/plugins/maven-cruisecontrol-plugin-1.3.jar
+maven/plugins/maven-cruisecontrol-plugin-1.4.jar
+maven/plugins/maven-cruisecontrol-plugin-1.5.jar
+maven/plugins/maven-cruisecontrol-plugin-1.6.jar
+maven/plugins/maven-cruisecontrol-plugin-1.7.jar
+maven/plugins/maven-cruisecontrol-plugin-1.8.jar
+maven/plugins/maven-dashboard-plugin-1.3.jar
+maven/plugins/maven-developer-activity-plugin-1.5.1.jar
+maven/plugins/maven-dashboard-plugin-1.4.jar
+maven/plugins/maven-dashboard-plugin-1.5.jar
+maven/plugins/maven-dashboard-plugin-1.6.jar
+maven/plugins/maven-dashboard-plugin-1.7.jar
+maven/plugins/maven-dashboard-plugin-1.8.jar
+maven/plugins/maven-dashboard-plugin-1.9.jar
+maven/plugins/maven-deploy-plugin-1.3.jar
+maven/plugins/maven-developer-activity-plugin-1.5.2.jar
+maven/plugins/maven-dist-plugin-1.5.jar
+maven/plugins/maven-developer-activity-plugin-1.5.jar
+maven/plugins/maven-developer-activity-plugin-1.6.jar
+maven/plugins/maven-dist-plugin-1.6.1.jar
+maven/plugins/maven-dist-plugin-1.6.jar
+maven/plugins/maven-dist-plugin-1.7.jar
+maven/plugins/maven-docbook-plugin-1.2.jar
+maven/plugins/maven-ear-plugin-1.5.jar
+maven/plugins/maven-ear-plugin-1.6.1.jar
+maven/plugins/maven-ear-plugin-1.6.jar
+maven/plugins/maven-ear-plugin-1.7.jar
+maven/plugins/maven-ear-plugin-1.8.jar
+maven/plugins/maven-ear-plugin-1.9.jar
+maven/plugins/maven-eclipse-plugin-1.10.jar
+maven/plugins/maven-eclipse-plugin-1.11.jar
+maven/plugins/maven-eclipse-plugin-1.7.jar
+maven/plugins/maven-eclipse-plugin-1.8.jar
+maven/plugins/maven-eclipse-plugin-1.9.jar
+maven/plugins/maven-ejb-plugin-1.4.jar
+maven/plugins/maven-ejb-plugin-1.5.jar
+maven/plugins/maven-ejb-plugin-1.6.jar
+maven/plugins/maven-ejb-plugin-1.7.1.jar
+maven/plugins/maven-ejb-plugin-1.7.2.jar
+maven/plugins/maven-ejb-plugin-1.7.jar
+maven/plugins/maven-faq-plugin-1.3.jar
+maven/plugins/maven-faq-plugin-1.4.jar
+maven/plugins/maven-faq-plugin-1.5.jar
+maven/plugins/maven-faq-plugin-1.6.1.jar
+maven/plugins/maven-file-activity-plugin-1.5.1.jar
+maven/plugins/maven-faq-plugin-1.6.jar
+maven/plugins/maven-file-activity-plugin-1.5.2.jar
+maven/plugins/maven-genapp-plugin-2.3.jar
+maven/plugins/maven-gump-plugin-1.3.jar
+maven/plugins/maven-file-activity-plugin-1.5.jar
+maven/plugins/maven-file-activity-plugin-1.6.jar
+maven/plugins/maven-genapp-plugin-2.2.jar
+maven/plugins/maven-gump-plugin-1.4.jar
+maven/plugins/maven-gump-plugin-2.0.1.jar
+maven/plugins/maven-gump-plugin-2.0.jar
+maven/plugins/maven-hibernate-plugin-1.1.jar
+maven/plugins/maven-hibernate-plugin-1.2.jar
+maven/plugins/maven-hibernate-plugin-1.3.jar
+maven/plugins/maven-html2xdoc-plugin-1.3.1.jar
+maven/plugins/maven-idea-plugin-1.4.jar
+maven/plugins/maven-html2xdoc-plugin-1.3.jar
+maven/plugins/maven-html2xdoc-plugin-1.4.jar
+maven/plugins/maven-idea-plugin-1.5.jar
+maven/plugins/maven-idea-plugin-1.6.jar
+maven/plugins/maven-jar-plugin-1.7.jar
+maven/plugins/maven-j2ee-plugin-1.5.1.jar
+maven/plugins/maven-j2ee-plugin-1.5.jar
+maven/plugins/maven-jalopy-plugin-1.2.jar
+maven/plugins/maven-jalopy-plugin-1.3.1.jar
+maven/plugins/maven-jalopy-plugin-1.3.jar
+maven/plugins/maven-jalopy-plugin-1.4.jar
+maven/plugins/maven-jalopy-plugin-1.5.jar
+maven/plugins/maven-jar-plugin-1.5.jar
+maven/plugins/maven-jar-plugin-1.6.1.jar
+maven/plugins/maven-jar-plugin-1.6.jar
+maven/plugins/maven-jar-plugin-1.8.jar
+maven/plugins/maven-java-plugin-1.4.jar
+maven/plugins/maven-java-plugin-1.5.jar
+maven/plugins/maven-java-plugin-1.6.jar
+maven/plugins/maven-javacc-plugin-1.1.jar
+maven/plugins/maven-jbuilder-plugin-1.5.jar
+maven/plugins/maven-javacc-plugin-1.2.jar
+maven/plugins/maven-javadoc-plugin-1.5.jar
+maven/plugins/maven-javadoc-plugin-1.6.1.jar
+maven/plugins/maven-javadoc-plugin-1.6.jar
+maven/plugins/maven-javadoc-plugin-1.7.jar
+maven/plugins/maven-javadoc-plugin-1.8.jar
+maven/plugins/maven-jboss-plugin-1.5.jar
+maven/plugins/maven-jcoverage-plugin-1.0.4.jar
+maven/plugins/maven-jcoverage-plugin-1.0.5.jar
+maven/plugins/maven-jcoverage-plugin-1.0.6.jar
+maven/plugins/maven-jcoverage-plugin-1.0.7.jar
+maven/plugins/maven-jcoverage-plugin-1.0.8.jar
+maven/plugins/maven-jcoverage-plugin-1.0.9.jar
+maven/plugins/maven-jdee-plugin-1.1.jar
+maven/plugins/maven-jdepend-plugin-1.5.1.jar
+maven/plugins/maven-jdepend-plugin-1.5.jar
+maven/plugins/maven-jdepend-plugin-1.6.1.jar
+maven/plugins/maven-jdepend-plugin-1.6.jar
+maven/plugins/maven-jdeveloper-plugin-1.4.jar
+maven/plugins/maven-jdiff-plugin-1.3.jar
+maven/plugins/maven-jdiff-plugin-1.4.jar
+maven/plugins/maven-jdiff-plugin-1.5.jar
+maven/plugins/maven-jellydoc-plugin-1.3.1.jar
+maven/plugins/maven-jellydoc-plugin-1.3.jar
+maven/plugins/maven-jetty-plugin-1.1.jar
+maven/plugins/maven-jira-plugin-1.1.1.jar
+maven/plugins/maven-jira-plugin-1.1.2.jar
+maven/plugins/maven-jira-plugin-1.1.jar
+maven/plugins/maven-jira-plugin-1.2.jar
+maven/plugins/maven-jira-plugin-1.3.jar
+maven/plugins/maven-jnlp-plugin-1.3.jar
+maven/plugins/maven-jnlp-plugin-1.4.1.jar
+maven/plugins/maven-jnlp-plugin-1.4.jar
+maven/plugins/maven-junit-doclet-plugin-1.2.jar
+maven/plugins/maven-junit-report-plugin-1.5.1.jar
+maven/plugins/maven-junit-report-plugin-1.5.jar
+maven/plugins/maven-jxr-plugin-1.4.1.jar
+maven/plugins/maven-jxr-plugin-1.4.2.jar
+maven/plugins/maven-jxr-plugin-1.4.3.jar
+maven/plugins/maven-jxr-plugin-1.4.jar
+maven/plugins/maven-jxr-plugin-1.5.jar
+maven/plugins/maven-latex-plugin-1.2.jar
+maven/plugins/maven-latka-plugin-1.4.jar
+maven/plugins/maven-latex-plugin-1.4.1.jar
+maven/plugins/maven-latka-plugin-1.4.1.jar
+maven/plugins/maven-license-plugin-1.2.jar
+maven/plugins/maven-linkcheck-plugin-1.3.1.jar
+maven/plugins/maven-linkcheck-plugin-1.4.jar
+maven/plugins/maven-linkcheck-plugin-1.3.2.jar
+maven/plugins/maven-linkcheck-plugin-1.3.3.jar
+maven/plugins/maven-linkcheck-plugin-1.3.4.jar
+maven/plugins/maven-linkcheck-plugin-1.3.jar
+maven/plugins/maven-multichanges-plugin-1.1.jar
+maven/plugins/maven-multichanges-plugin-1.2.jar
+maven/plugins/maven-multiproject-plugin-1.3.1.jar
+maven/plugins/maven-multiproject-plugin-1.3.jar
+maven/plugins/maven-multiproject-plugin-1.4.1.jar
+maven/plugins/maven-multiproject-plugin-1.4.jar
+maven/plugins/maven-multiproject-plugin-1.5.jar
+maven/plugins/maven-native-plugin-1.1.jar
+maven/plugins/maven-native-plugin-1.2.jar
+maven/plugins/maven-nsis-plugin-1.1.jar
+maven/plugins/maven-nsis-plugin-2.0.jar
+maven/plugins/maven-pdf-plugin-2.1.jar
+maven/plugins/maven-pdf-plugin-2.2.1.jar
+maven/plugins/maven-pdf-plugin-2.2.jar
+maven/plugins/maven-pdf-plugin-2.3.jar
+maven/plugins/maven-pdf-plugin-2.4.jar
+maven/plugins/maven-pdf-plugin-2.5.jar
+maven/plugins/maven-plugin-plugin-1.4.jar
+maven/plugins/maven-plugin-plugin-1.5.1.jar
+maven/plugins/maven-plugin-plugin-1.5.2.jar
+maven/plugins/maven-plugin-plugin-1.5.jar
+maven/plugins/maven-plugin-plugin-1.6.jar
+maven/plugins/maven-plugin-plugin-1.7.jar
+maven/plugins/maven-pmd-plugin-1.4.jar
+maven/plugins/maven-pmd-plugin-1.5.jar
+maven/plugins/maven-pmd-plugin-1.6.jar
+maven/plugins/maven-pmd-plugin-1.7.jar
+maven/plugins/maven-pmd-plugin-1.8.jar
+maven/plugins/maven-pmd-plugin-1.9.jar
+maven/plugins/maven-pom-plugin-1.4.1.jar
+maven/plugins/maven-pom-plugin-1.4.jar
+maven/plugins/maven-pom-plugin-1.5.jar
+maven/plugins/maven-rar-plugin-1.0.jar
+maven/plugins/maven-rar-plugin-1.1.jar
+maven/plugins/maven-release-plugin-1.3.jar
+maven/plugins/maven-release-plugin-1.4.1.jar
+maven/plugins/maven-release-plugin-1.4.jar
+maven/plugins/maven-repository-plugin-1.2.jar
+maven/plugins/maven-scm-plugin-1.3.jar
+maven/plugins/maven-scm-plugin-1.4.1.jar
+maven/plugins/maven-scm-plugin-1.4.jar
+maven/plugins/maven-scm-plugin-1.5-beta-2.jar
+maven/plugins/maven-site-plugin-1.6.jar
+maven/plugins/maven-site-plugin-1.7.jar
+maven/plugins/maven-scm-plugin-1.5-beta-3.jar
+maven/plugins/maven-scm-plugin-1.5.jar
+maven/plugins/maven-scm-plugin-1.6.jar
+maven/plugins/maven-shell-plugin-1.1.jar
+maven/plugins/maven-simian-plugin-1.4.jar
+maven/plugins/maven-simian-plugin-1.5.jar
+maven/plugins/maven-simian-plugin-1.6.jar
+maven/plugins/maven-site-plugin-1.5.1.jar
+maven/plugins/maven-site-plugin-1.5.2.jar
+maven/plugins/maven-site-plugin-1.5.jar
+maven/plugins/maven-site-plugin-1.6.1.jar
+maven/plugins/maven-source-plugin-1.0.jar
+maven/plugins/maven-struts-plugin-1.3.jar
+maven/plugins/maven-tasklist-plugin-2.3.jar
+maven/plugins/maven-tasklist-plugin-2.4.jar
+maven/plugins/maven-xdoc-plugin-1.9.2.jar
+maven/plugins/maven-test-plugin-1.6.1.jar
+maven/plugins/maven-test-plugin-1.6.2.jar
+maven/plugins/maven-test-plugin-1.6.jar
+maven/plugins/maven-test-plugin-1.7.jar
+maven/plugins/maven-test-plugin-1.8.jar
+maven/plugins/maven-tjdo-plugin-1.0.0.jar
+maven/plugins/maven-uberjar-plugin-1.2.jar
+maven/plugins/maven-vdoclet-plugin-1.2.jar
+maven/plugins/maven-war-plugin-1.6.1.jar
+maven/plugins/maven-war-plugin-1.6.2.jar
+maven/plugins/maven-war-plugin-1.6.jar
+maven/plugins/maven-webserver-plugin-2.0.jar
+maven/plugins/maven-wizard-plugin-1.1.jar
+maven/plugins/maven-xdoc-plugin-1.10.jar
+maven/plugins/maven-xdoc-plugin-1.7.1.jar
+maven/plugins/maven-xdoc-plugin-1.7.2.jar
+maven/plugins/maven-xdoc-plugin-1.7.jar
+maven/plugins/maven-xdoc-plugin-1.8.jar
+maven/plugins/maven-xdoc-plugin-1.9.1.jar
+maven/plugins/maven-changes-plugin-1.7.jar
+maven/plugins/maven-xdoc-plugin-1.9.jar
+maven/plugins/maven-genapp-plugin-2.3.1.jar
+maven/plugins/maven-pom-plugin-1.5.1.jar
+maven/plugins/maven-clover-plugin-1.11.1.jar
+maven/plugins/maven-java-plugin-1.6.1.jar
+maven/plugins/maven-jira-plugin-1.3.1.jar
+maven/plugins/maven-simian-plugin-1.6.1.jar
+maven/plugins/maven-clover-plugin-1.11.2.jar
+maven/plugins/maven-jdiff-plugin-1.5.1.jar
+maven/plugins/maven-pdf-plugin-2.5.1.jar
+maven/plugins/maven-pmd-plugin-1.10.jar
+maven/plugins/maven-scm-plugin-1.6.1.jar
+maven/plugins/maven-site-plugin-1.7.1.jar
+maven/plugins/maven-modello-plugin-1.0.jar
+maven/plugins/maven-site-plugin-1.7.2.jar
+maven/plugins/maven-announcement-plugin-1.4.1.jar
+maven/plugins/maven-developer-activity-plugin-1.6.1.jar
+maven/plugins/maven-file-activity-plugin-1.6.1.jar
+maven/plugins/maven-plugin-plugin-1.7.1.jar
+maven/plugins/maven-idea-plugin-1.7.jar
+maven/plugins/maven-jalopy-plugin-1.5.1.jar
+maven/plugins/maven-jar-plugin-1.8.1.jar
+maven/plugins/maven-javadoc-plugin-1.9.jar
+maven/plugins/maven-multichanges-plugin-1.3.jar
+maven/plugins/maven-artifact-plugin-1.9.jar
+maven/plugins/maven-changelog-plugin-1.9.2.jar
+maven/plugins/maven-dist-plugin-1.7.1.jar
+maven/plugins/maven-eclipse-plugin-1.12.jar
+maven/plugins/maven-ejb-plugin-1.7.3.jar
+maven/plugins/maven-linkcheck-plugin-1.4.1.jar
+maven/plugins/maven-multiproject-plugin-1.5.1.jar
+maven/plugins/maven-test-plugin-1.8.1.jar
+maven/plugins/maven-war-plugin-1.6.3.jar
+maven/plugins/maven-xdoc-plugin-1.10.1.jar
+maven/plugins/maven-nsis-plugin-2.1.jar
+maven/plugins/maven-artifact-plugin-1.9.1.jar
+maven/plugins/maven-test-plugin-1.8.2.jar
+maven/poms/commons-jelly-1.0.1-20060717.pom
+maven/poms/maven-1.0.1.pom
+maven/poms/maven-1.0-rc4.pom
+maven/poms/maven-1.0.2.pom
+maven/poms/maven-1.0.pom
+maven/poms/maven-1.1-beta-3.pom
+maven/poms/maven-abbot-plugin-1.0.pom
+maven/poms/maven-abbot-plugin-1.1.pom
+maven/poms/maven-announcement-plugin-1.2.pom
+maven/poms/maven-announcement-plugin-1.3.pom
+maven/poms/maven-1.1-RC1.pom
+maven/poms/maven-announcement-plugin-1.4.pom
+maven/poms/maven-ant-plugin-1.10.pom
+maven/poms/maven-ant-plugin-1.8.1.pom
+maven/poms/maven-ant-plugin-1.8.pom
+maven/poms/maven-ant-plugin-1.9.pom
+maven/poms/maven-antlr-plugin-1.2.1.pom
+maven/poms/maven-model-3.0.0.pom
+maven/poms/maven-antlr-plugin-1.2.2.pom
+maven/poms/maven-artifact-plugin-1.3.pom
+maven/poms/maven-artifact-plugin-1.4.1.pom
+maven/poms/maven-artifact-plugin-1.4.pom
+maven/poms/maven-artifact-plugin-1.5.1.pom
+maven/poms/maven-artifact-plugin-1.5.2.pom
+maven/poms/maven-artifact-plugin-1.5.pom
+maven/poms/maven-artifact-plugin-1.6.pom
+maven/poms/maven-model-3.0.1.pom
+maven/poms/maven-artifact-plugin-1.7.pom
+maven/poms/maven-artifact-plugin-1.8.pom
+maven/poms/maven-aspectj-plugin-3.1.1.pom
+maven/poms/maven-aspectj-plugin-3.2.pom
+maven/poms/maven-aspectj-plugin-4.0.pom
+maven/poms/maven-changelog-plugin-1.6.pom
+maven/poms/maven-changelog-plugin-1.7.1.pom
+maven/poms/maven-clean-plugin-1.4.pom
+maven/poms/maven-changelog-plugin-1.7.2.pom
+maven/poms/maven-changelog-plugin-1.7.pom
+maven/poms/maven-changelog-plugin-1.8.1.pom
+maven/poms/maven-changelog-plugin-1.9.pom
+maven/poms/maven-changelog-plugin-1.8.2.pom
+maven/poms/maven-changelog-plugin-1.8.pom
+maven/poms/maven-changelog-plugin-1.9.1.pom
+maven/poms/maven-changes-plugin-1.5.1.pom
+maven/poms/maven-changes-plugin-1.5.pom
+maven/poms/maven-changes-plugin-1.6.pom
+maven/poms/maven-checkstyle-plugin-2.5.pom
+maven/poms/maven-checkstyle-plugin-3.0.1.pom
+maven/poms/maven-checkstyle-plugin-3.0.pom
+maven/poms/maven-dashboard-plugin-1.5.pom
+maven/poms/maven-clover-plugin-1.10.pom
+maven/poms/maven-clover-plugin-1.11.pom
+maven/poms/maven-clover-plugin-1.6.pom
+maven/poms/maven-clover-plugin-1.7.pom
+maven/poms/maven-clover-plugin-1.8.pom
+maven/poms/maven-clover-plugin-1.9.1.pom
+maven/poms/maven-clover-plugin-1.9.pom
+maven/poms/maven-dist-plugin-1.6.1.pom
+maven/poms/maven-console-plugin-1.2.pom
+maven/poms/maven-cruisecontrol-plugin-1.4.pom
+maven/poms/maven-cruisecontrol-plugin-1.5.pom
+maven/poms/maven-cruisecontrol-plugin-1.6.pom
+maven/poms/maven-cruisecontrol-plugin-1.7.pom
+maven/poms/maven-cruisecontrol-plugin-1.8.pom
+maven/poms/maven-dashboard-plugin-1.4.pom
+maven/poms/maven-developer-activity-plugin-1.5.1.pom
+maven/poms/maven-dashboard-plugin-1.6.pom
+maven/poms/maven-dashboard-plugin-1.7.pom
+maven/poms/maven-dashboard-plugin-1.8.pom
+maven/poms/maven-dashboard-plugin-1.9.pom
+maven/poms/maven-developer-activity-plugin-1.5.2.pom
+maven/poms/maven-developer-activity-plugin-1.6.pom
+maven/poms/maven-dist-plugin-1.6.pom
+maven/poms/maven-dist-plugin-1.7.pom
+maven/poms/maven-ear-plugin-1.6.1.pom
+maven/poms/maven-ear-plugin-1.6.pom
+maven/poms/maven-ear-plugin-1.7.pom
+maven/poms/maven-ear-plugin-1.8.pom
+maven/poms/maven-ear-plugin-1.9.pom
+maven/poms/maven-ejb-plugin-1.5.pom
+maven/poms/maven-eclipse-plugin-1.10.pom
+maven/poms/maven-eclipse-plugin-1.11.pom
+maven/poms/maven-eclipse-plugin-1.8.pom
+maven/poms/maven-eclipse-plugin-1.9.pom
+maven/poms/maven-ejb-plugin-1.6.pom
+maven/poms/maven-ejb-plugin-1.7.1.pom
+maven/poms/maven-ejb-plugin-1.7.2.pom
+maven/poms/maven-ejb-plugin-1.7.pom
+maven/poms/maven-faq-plugin-1.4.pom
+maven/poms/maven-faq-plugin-1.5.pom
+maven/poms/maven-faq-plugin-1.6.1.pom
+maven/poms/maven-file-activity-plugin-1.5.1.pom
+maven/poms/maven-faq-plugin-1.6.pom
+maven/poms/maven-file-activity-plugin-1.5.2.pom
+maven/poms/maven-file-activity-plugin-1.6.pom
+maven/poms/maven-genapp-plugin-2.3.pom
+maven/poms/maven-gump-plugin-1.4.pom
+maven/poms/maven-gump-plugin-2.0.1.pom
+maven/poms/maven-gump-plugin-2.0.pom
+maven/poms/maven-hibernate-plugin-1.2.pom
+maven/poms/maven-hibernate-plugin-1.3.pom
+maven/poms/maven-html2xdoc-plugin-1.3.1.pom
+maven/poms/maven-html2xdoc-plugin-1.4.pom
+maven/poms/maven-idea-plugin-1.5.pom
+maven/poms/maven-idea-plugin-1.6.pom
+maven/poms/maven-j2ee-plugin-1.5.1.pom
+maven/poms/maven-jalopy-plugin-1.3.1.pom
+maven/poms/maven-jalopy-plugin-1.3.pom
+maven/poms/maven-jalopy-plugin-1.4.pom
+maven/poms/maven-jalopy-plugin-1.5.pom
+maven/poms/maven-jar-plugin-1.6.1.pom
+maven/poms/maven-jar-plugin-1.6.pom
+maven/poms/maven-jar-plugin-1.7.pom
+maven/poms/maven-jar-plugin-1.8.pom
+maven/poms/maven-java-plugin-1.5.pom
+maven/poms/maven-java-plugin-1.6.pom
+maven/poms/maven-javacc-plugin-1.2.pom
+maven/poms/maven-model-3.0.2.pom
+maven/poms/maven-javadoc-plugin-1.6.1.pom
+maven/poms/maven-javadoc-plugin-1.6.pom
+maven/poms/maven-javadoc-plugin-1.7.pom
+maven/poms/maven-javadoc-plugin-1.8.pom
+maven/poms/maven-jcoverage-plugin-1.0.5.pom
+maven/poms/maven-jcoverage-plugin-1.0.6.pom
+maven/poms/maven-jcoverage-plugin-1.0.7.pom
+maven/poms/maven-jelly-tags-1.0.1.pom
+maven/poms/maven-jcoverage-plugin-1.0.8.pom
+maven/poms/maven-jcoverage-plugin-1.0.9.pom
+maven/poms/maven-jdepend-plugin-1.5.1.pom
+maven/poms/maven-jdepend-plugin-1.6.1.pom
+maven/poms/maven-jdepend-plugin-1.6.pom
+maven/poms/maven-jdiff-plugin-1.5.pom
+maven/poms/maven-jira-plugin-1.2-20051203.221911.pom
+maven/poms/maven-jellydoc-plugin-1.3.1.pom
+maven/poms/maven-jira-plugin-1.1.1.pom
+maven/poms/maven-jira-plugin-1.1.2.pom
+maven/poms/maven-jira-plugin-1.2.pom
+maven/poms/maven-jira-plugin-1.3.pom
+maven/poms/maven-jira-plugin-snapshot-version
+maven/poms/maven-jnlp-plugin-1.4.1.pom
+maven/poms/maven-jnlp-plugin-1.4.pom
+maven/poms/maven-junit-report-plugin-1.5.1.pom
+maven/poms/maven-jxr-plugin-1.4.1.pom
+maven/poms/maven-jxr-plugin-1.4.2.pom
+maven/poms/maven-jxr-plugin-1.4.3.pom
+maven/poms/maven-jxr-plugin-1.5.pom
+maven/poms/maven-latex-plugin-1.4.1.pom
+maven/poms/maven-latka-plugin-1.4.1.pom
+maven/poms/maven-linkcheck-plugin-1.3.2.pom
+maven/poms/maven-linkcheck-plugin-1.3.3.pom
+maven/poms/maven-native-plugin-1.2.pom
+maven/poms/maven-linkcheck-plugin-1.3.4.pom
+maven/poms/maven-linkcheck-plugin-1.4.pom
+maven/poms/maven-multichanges-plugin-1.2.pom
+maven/poms/maven-multiproject-plugin-1.3.1.pom
+maven/poms/maven-multiproject-plugin-1.4.1.pom
+maven/poms/maven-multiproject-plugin-1.4.pom
+maven/poms/maven-multiproject-plugin-1.5.pom
+maven/poms/maven-nsis-plugin-2.0.pom
+maven/poms/maven-pdf-plugin-2.2.1.pom
+maven/poms/maven-pdf-plugin-2.5.pom
+maven/poms/maven-pdf-plugin-2.2.pom
+maven/poms/maven-pdf-plugin-2.3.pom
+maven/poms/maven-pdf-plugin-2.4.pom
+maven/poms/maven-plugin-plugin-1.5.1.pom
+maven/poms/maven-plugin-plugin-1.5.2.pom
+maven/poms/maven-plugin-plugin-1.5.pom
+maven/poms/maven-plugin-plugin-1.6.pom
+maven/poms/maven-plugin-plugin-1.7.pom
+maven/poms/maven-pmd-plugin-1.5.pom
+maven/poms/maven-pmd-plugin-1.6.pom
+maven/poms/maven-pmd-plugin-1.7.pom
+maven/poms/maven-pmd-plugin-1.8.pom
+maven/poms/maven-pmd-plugin-1.9.pom
+maven/poms/maven-pom-plugin-1.5.pom
+maven/poms/maven-rar-plugin-1.1.pom
+maven/poms/maven-release-plugin-1.4.1.pom
+maven/poms/maven-scm-plugin-1.4.1.pom
+maven/poms/maven-scm-plugin-1.5-beta-2.pom
+maven/poms/maven-scm-plugin-1.5-beta-3.pom
+maven/poms/maven-scm-plugin-1.5.pom
+maven/poms/maven-scm-plugin-1.6.pom
+maven/poms/maven-simian-plugin-1.5.pom
+maven/poms/maven-simian-plugin-1.6.pom
+maven/poms/maven-site-plugin-1.5.1.pom
+maven/poms/maven-site-plugin-1.5.2.pom
+maven/poms/maven-site-plugin-1.6.1.pom
+maven/poms/maven-site-plugin-1.6.pom
+maven/poms/maven-site-plugin-1.7.pom
+maven/poms/maven-source-plugin-1.0.pom
+maven/poms/maven-tasklist-plugin-2.4.pom
+maven/poms/maven-test-plugin-1.6.2.pom
+maven/poms/maven-test-plugin-1.7.pom
+maven/poms/maven-test-plugin-1.8.pom
+maven/poms/maven-war-plugin-1.6.1.pom
+maven/poms/maven-war-plugin-1.6.2.pom
+maven/poms/maven-xdoc-plugin-1.10.pom
+maven/poms/maven-xdoc-plugin-1.7.2.pom
+maven/poms/maven-xdoc-plugin-1.8.pom
+maven/poms/maven-xdoc-plugin-1.9.1.pom
+maven/poms/maven-xdoc-plugin-1.9.2.pom
+maven/poms/maven-xdoc-plugin-1.9.pom
+maven/poms/velocity-1.5-20060721.044818.pom
+maven/poms/maven-changes-plugin-1.7.pom
+maven/poms/maven-genapp-plugin-2.3.1.pom
+maven/poms/maven-pom-plugin-1.5.1.pom
+maven/poms/maven-clover-plugin-1.11.1.pom
+maven/poms/maven-java-plugin-1.6.1.pom
+maven/poms/maven-jira-plugin-1.3.1.pom
+maven/poms/maven-simian-plugin-1.6.1.pom
+maven/poms/maven-clover-plugin-1.11.2.pom
+maven/poms/maven-jdiff-plugin-1.5.1.pom
+maven/poms/maven-pdf-plugin-2.5.1.pom
+maven/poms/maven-pmd-plugin-1.10.pom
+maven/poms/maven-scm-plugin-1.6.1.pom
+maven/poms/maven-site-plugin-1.7.1.pom
+maven/poms/maven-modello-plugin-1.0.pom
+maven/poms/maven-site-plugin-1.7.2.pom
+maven/poms/maven-announcement-plugin-1.4.1.pom
+maven/poms/maven-developer-activity-plugin-1.6.1.pom
+maven/poms/maven-file-activity-plugin-1.6.1.pom
+maven/poms/maven-plugin-plugin-1.7.1.pom
+maven/poms/maven-idea-plugin-1.7.pom
+maven/poms/maven-jalopy-plugin-1.5.1.pom
+maven/poms/maven-jar-plugin-1.8.1.pom
+maven/poms/maven-javadoc-plugin-1.9.pom
+maven/poms/maven-multichanges-plugin-1.3.pom
+maven/poms/maven-artifact-plugin-1.9.pom
+maven/poms/maven-changelog-plugin-1.9.2.pom
+maven/poms/maven-dist-plugin-1.7.1.pom
+maven/poms/maven-eclipse-plugin-1.12.pom
+maven/poms/maven-ejb-plugin-1.7.3.pom
+maven/poms/maven-linkcheck-plugin-1.4.1.pom
+maven/poms/maven-multiproject-plugin-1.5.1.pom
+maven/poms/maven-test-plugin-1.8.1.pom
+maven/poms/maven-war-plugin-1.6.3.pom
+maven/poms/maven-xdoc-plugin-1.10.1.pom
+maven/poms/maven-nsis-plugin-2.1.pom
+maven/poms/maven-artifact-plugin-1.9.1.pom
+maven/poms/maven-1.1.pom
+maven/poms/maven-test-plugin-1.8.2.pom
+maven-new/jars/maven-fetch-20030525.145948.jar
+maven-new/jars/maven-fetch-snapshot-version
+maven-plugins/jars/maven-aptdoc-plugin-20030413.030249.jar
+maven-plugins/jars/maven-aptdoc-plugin-snapshot-version
+maven-plugins/jars/maven-dbunit-plugin-20030413.024213.jar
+maven-plugins/jars/maven-dbunit-plugin-snapshot-version
+maven-plugins/plugins/maven-dbunit-plugin-1.0.jar
+maven-plugins/plugins/maven-dbunit-plugin-20030814.080708.jar
+merlin/jars/merlin-api-3.3.0.jar
+merlin/jars/merlin-cli-3.3.0.jar
+merlin/jars/merlin-impl-3.3.0.jar
+merlin/jars/merlin-unit-3.3.0.jar
+merlin/plugins/merlin-plugin-3.3.0.jar
+merlin-developer/jars/merlin-developer-core-snapshot-version
+merlin-developer/jars/merlin-developer-core-0.1.jar
+merlin-developer/jars/merlin-developer-core-20040423.083017.jar
+merlin-tutorial/jars/locator-impl-1.0.jar
+merlin-tutorial/jars/locator-api-1.0.jar
+merlin-tutorial/jars/publisher-api-1.0.jar
+merlin-tutorial/jars/publisher-impl-1.0.jar
+muse/jars/2.0.0-M1/KEYS
+muse/jars/2.0.0-M1/muse-core-2.0.0-M1.jar
+muse/jars/2.0.0-M1/muse-platform-axis2-2.0.0-M1.jar
+muse/jars/2.0.0-M1/muse-tools-2.0.0-M1.jar
+muse/jars/2.0.0-M1/muse-util-2.0.0-M1.jar
+muse/jars/2.0.0-M1/muse-util-xml-2.0.0-M1.jar
+muse/jars/2.0.0-M1/muse-util-qname-2.0.0-M1.jar
+muse/jars/2.0.0-M1/muse-util-xstream-2.0.0-M1.jar
+muse/jars/2.0.0-M1/muse-wsa-soap-2.0.0-M1.jar
+muse/jars/2.0.0-M1/muse-wsdm-muws-adv-api-2.0.0-M1.jar
+muse/jars/2.0.0-M1/muse-wsdm-muws-adv-impl-2.0.0-M1.jar
+muse/jars/2.0.0-M1/muse-wsdm-muws-api-2.0.0-M1.jar
+muse/jars/2.0.0-M1/muse-wsrf-impl-2.0.0-M1.jar
+muse/jars/2.0.0-M1/muse-wsdm-muws-impl-2.0.0-M1.jar
+muse/jars/2.0.0-M1/muse-wsdm-wef-api-2.0.0-M1.jar
+muse/jars/2.0.0-M1/muse-wsdm-wef-impl-2.0.0-M1.jar
+muse/jars/2.0.0-M1/muse-wsn-api-2.0.0-M1.jar
+muse/jars/2.0.0-M1/muse-wsn-impl-2.0.0-M1.jar
+muse/jars/2.0.0-M1/muse-wsrf-api-2.0.0-M1.jar
+muse/jars/2.0.0-M1/muse-wsx-api-2.0.0-M1.jar
+muse/jars/2.0.0-M1/muse-wsx-impl-2.0.0-M1.jar
+muse/jars/advertiser-xbeans-src-1.0.jar
+muse/jars/advertiser-xbeans-1.0.jar
+muse/jars/wsdm-xbeans-1.0.jar
+muse/jars/muse-1.0.jar
+muse/jars/wsdm-xbeans-src-1.0.jar
+myfaces/jars/myfaces-1.0.9/myfaces-impl-1.0.9.jar
+myfaces/jars/myfaces-1.0.9/myfaces-1.0.9.jar
+myfaces/jars/myfaces-1.0.9/myfaces-extensions-1.0.9.jar
+myfaces/jars/myfaces-1.0.9/myfaces-jsf-api-1.0.9.jar
+myfaces/jars/myfaces-1.0.9/myfaces-wap-1.0.9.jar
+myfaces/jars/myfaces-1.0.9/myfaces-xdoclet-1.0.9.jar
+myfaces/jars/myfaces-1.1.0/myfaces-impl.jar
+myfaces/jars/myfaces-1.1.0/myfaces-all.jar
+myfaces/jars/myfaces-1.1.0/myfaces-api.jar
+myfaces/jars/myfaces-1.1.0/tomahawk.jar
+myfaces/jars/myfaces-1.0.9.jar
+myfaces/jars/myfaces-extensions-1.0.9.jar
+myfaces/jars/myfaces-all-1.1.0.jar
+myfaces/jars/myfaces-all-1.1.1.jar
+myfaces/jars/myfaces-api-1.1.0.jar
+myfaces/jars/myfaces-api-1.1.1.jar
+myfaces/jars/myfaces-impl-1.0.9.jar
+myfaces/jars/myfaces-impl-1.1.0.jar
+myfaces/jars/myfaces-impl-1.1.1.jar
+myfaces/jars/myfaces-jsf-api-1.0.8-beta.jar
+myfaces/jars/myfaces-jsf-api-1.0.9.jar
+myfaces/jars/myfaces-wap-1.0.9.jar
+myfaces/jars/myfaces-xdoclet-1.0.9.jar
+myfaces/jars/tomahawk-1.1.0.jar
+myfaces/jars/tomahawk-1.1.1.jar
+myfaces/poms/myfaces.pom
+nekohtml/jars/nekohtml-0.6.5.jar
+nekohtml/jars/nekohtml-0.7.1.jar
+nekohtml/jars/nekohtml-0.7.4.jar
+nekohtml/jars/nekohtml-0.7.6.jar
+nekohtml/jars/nekohtml-0.7.7.jar
+nekohtml/jars/nekohtml-0.8.1.jar
+nekohtml/jars/nekohtmlSamples-0.7.1.jar
+nekohtml/jars/nekohtmlSamples-0.7.7.jar
+nekohtml/jars/nekohtmlSamples-0.8.1.jar
+nekohtml/jars/nekohtmlXni-0.7.1.jar
+nekohtml/jars/nekohtmlXni-0.7.6.jar
+nekohtml/jars/nekohtmlXni-0.7.7.jar
+nekohtml/jars/nekohtmlXni-0.8.1.jar
+ojb/jars/db-ojb-1.0.0-tools.jar
+ojb/jars/db-ojb-1.0.0.jar
+ojb/jars/db-ojb-1.0.1.jar
+ojb/jars/db-ojb-1.0.2.jar
+ojb/jars/db-ojb-1.0.3.jar
+ojb/jars/db-ojb-1.0.4.jar.MD5
+ojb/jars/db-ojb-1.0.4.jar
+ojb/jars/db-ojb-1.0.rc5-tools.jar
+ojb/jars/ojb-0.9.jar
+ojb/jars/db-ojb-1.0.rc5.jar
+ojb/jars/db-ojb-1.0.rc7.jar
+ojb/jars/ojb-0.5.200.jar
+ojb/jars/ojb-0.7.343.jar
+ojb/jars/ojb-0.8.375.jar
+ojb/jars/ojb-0.9.1.jar
+ojb/jars/ojb-0.9.2.jar
+ojb/jars/ojb-0.9.4.jar
+ojb/jars/ojb-0.9.5.jar
+ojb/jars/ojb-0.9.6-dev.jar
+ojb/jars/ojb-0.9.6.jar
+ojb/jars/ojb-1.0-dev-james-1.jar
+ojb/jars/ojb-1.0.rc2.jar
+ojb/jars/ojb-1.0.rc3.jar
+ojb/jars/ojb-1.0.rc4.jar
+ojb/jars/xdoclet-ojb-module-1.2.1.jar
+ojb/jars/xdoclet-ojb-module-1.2.3.jar
+ojb/jars/xdoclet-ojb-module-1.2.3.jar.MD5
+ojb/poms/db-ojb-1.0.4.pom.MD5
+ojb/poms/db-ojb-1.0.4.pom
+ojb/poms/ojb-1.0.rc2.pom
+org/apache/geronimo/specs/geronimo-activation_1.0.2_spec/1.0/geronimo-activation_1.0.2_spec-1.0.jar
+org/apache/geronimo/specs/geronimo-activation_1.0.2_spec/1.0/geronimo-activation_1.0.2_spec-1.0.pom
+org/apache/geronimo/specs/geronimo-activation_1.0.2_spec/maven-metadata.xml
+org/apache/geronimo/specs/geronimo-corba_3.0_spec/1.0/geronimo-corba_3.0_spec-1.0.jar
+org/apache/geronimo/specs/geronimo-corba_3.0_spec/1.0/geronimo-corba_3.0_spec-1.0.pom
+org/apache/geronimo/specs/geronimo-corba_3.0_spec/maven-metadata.xml
+org/apache/geronimo/specs/geronimo-ejb_2.1_spec/1.0/geronimo-ejb_2.1_spec-1.0.jar
+org/apache/geronimo/specs/geronimo-ejb_2.1_spec/1.0/geronimo-ejb_2.1_spec-1.0.pom
+org/apache/geronimo/specs/geronimo-ejb_2.1_spec/maven-metadata.xml
+org/apache/geronimo/specs/geronimo-j2ee-connector_1.5_spec/1.0/geronimo-j2ee-connector_1.5_spec-1.0.jar
+org/apache/geronimo/specs/geronimo-j2ee-connector_1.5_spec/1.0/geronimo-j2ee-connector_1.5_spec-1.0.pom
+org/apache/geronimo/specs/geronimo-j2ee-connector_1.5_spec/maven-metadata.xml
+org/apache/geronimo/specs/geronimo-j2ee-deployment_1.1_spec/1.0/geronimo-j2ee-deployment_1.1_spec-1.0.jar
+org/apache/geronimo/specs/geronimo-j2ee-deployment_1.1_spec/1.0/geronimo-j2ee-deployment_1.1_spec-1.0.pom
+org/apache/geronimo/specs/geronimo-j2ee-deployment_1.1_spec/maven-metadata.xml
+org/apache/geronimo/specs/geronimo-j2ee-jacc_1.0_spec/1.0/geronimo-j2ee-jacc_1.0_spec-1.0.jar
+org/apache/geronimo/specs/geronimo-j2ee-jacc_1.0_spec/1.0/geronimo-j2ee-jacc_1.0_spec-1.0.pom
+org/apache/geronimo/specs/geronimo-j2ee-jacc_1.0_spec/maven-metadata.xml
+org/apache/geronimo/specs/geronimo-j2ee-management_1.0_spec/1.0/geronimo-j2ee-management_1.0_spec-1.0.jar
+org/apache/geronimo/specs/geronimo-j2ee-management_1.0_spec/1.0/geronimo-j2ee-management_1.0_spec-1.0.pom
+org/apache/geronimo/specs/geronimo-j2ee-management_1.0_spec/maven-metadata.xml
+org/apache/geronimo/specs/geronimo-jaxr_1.0_spec/1.0/geronimo-jaxr_1.0_spec-1.0.jar
+org/apache/geronimo/specs/geronimo-jaxr_1.0_spec/1.0/geronimo-jaxr_1.0_spec-1.0.pom
+org/apache/geronimo/specs/geronimo-jaxr_1.0_spec/maven-metadata.xml
+org/apache/geronimo/specs/geronimo-jaxrpc_1.1_spec/1.0/geronimo-jaxrpc_1.1_spec-1.0.jar
+org/apache/geronimo/specs/geronimo-jaxrpc_1.1_spec/1.0/geronimo-jaxrpc_1.1_spec-1.0.pom
+org/apache/geronimo/specs/geronimo-jaxrpc_1.1_spec/maven-metadata.xml
+org/apache/geronimo/specs/geronimo-jms_1.1_spec/1.0/geronimo-jms_1.1_spec-1.0.jar
+org/apache/geronimo/specs/geronimo-jms_1.1_spec/1.0/geronimo-jms_1.1_spec-1.0.pom
+org/apache/geronimo/specs/geronimo-jms_1.1_spec/maven-metadata.xml
+org/apache/geronimo/specs/geronimo-jsp_2.0_spec/1.0/geronimo-jsp_2.0_spec-1.0.jar
+org/apache/geronimo/specs/geronimo-jsp_2.0_spec/1.0/geronimo-jsp_2.0_spec-1.0.pom
+org/apache/geronimo/specs/geronimo-jsp_2.0_spec/maven-metadata.xml
+org/apache/geronimo/specs/geronimo-jta_1.0.1B_spec/1.0/geronimo-jta_1.0.1B_spec-1.0.jar
+org/apache/geronimo/specs/geronimo-jta_1.0.1B_spec/1.0/geronimo-jta_1.0.1B_spec-1.0.pom
+org/apache/geronimo/specs/geronimo-jta_1.0.1B_spec/maven-metadata.xml
+org/apache/geronimo/specs/geronimo-qname_1.1_spec/1.0/geronimo-qname_1.1_spec-1.0.jar
+org/apache/geronimo/specs/geronimo-qname_1.1_spec/1.0/geronimo-qname_1.1_spec-1.0.pom
+org/apache/geronimo/specs/geronimo-qname_1.1_spec/maven-metadata.xml
+org/apache/geronimo/specs/geronimo-saaj_1.1_spec/1.0/geronimo-saaj_1.1_spec-1.0.jar
+org/apache/geronimo/specs/geronimo-saaj_1.1_spec/1.0/geronimo-saaj_1.1_spec-1.0.pom
+org/apache/geronimo/specs/geronimo-saaj_1.1_spec/maven-metadata.xml
+org/apache/geronimo/specs/geronimo-servlet_2.4_spec/1.0/geronimo-servlet_2.4_spec-1.0.jar
+org/apache/geronimo/specs/geronimo-servlet_2.4_spec/1.0/geronimo-servlet_2.4_spec-1.0.pom
+org/apache/geronimo/specs/geronimo-servlet_2.4_spec/maven-metadata.xml
+org.apache.axis/jars/axis-1.4.jar
+org.apache.axis/jars/axis-1.4.jar.sha
+org.apache.axis/jars/axis-ant-1.4.jar
+org.apache.axis/jars/axis-ant-1.4.jar.sha
+org.apache.axis/jars/axis-jaxrpc-1.4.jar
+org.apache.axis/jars/axis-jaxrpc-1.4.jar.sha
+org.apache.axis/jars/axis-saaj-1.4.jar
+org.apache.axis/jars/axis-saaj-1.4.jar.sha
+org.apache.bcel/jars/bcel-5.2.jar
+org.apache.beehive/jars/beehive-controls-1.0.1.jar
+org.apache.beehive/jars/beehive-ejb-control-1.0.1.jar
+org.apache.beehive/jars/beehive-jdbc-control-1.0.1.jar
+org.apache.beehive/jars/beehive-jms-control-1.0.1.jar
+org.apache.beehive/jars/beehive-netui-compiler-1.0.1.jar
+org.apache.beehive/jars/beehive-netui-core-1.0.1.jar
+org.apache.beehive/jars/beehive-netui-tags-1.0.1.jar
+org.apache.beehive/poms/beehive-control-ejb-1.0.1.pom
+org.apache.beehive/poms/beehive-control-jdbc-1.0.1.pom
+org.apache.beehive/poms/beehive-control-jms-1.0.1.pom
+org.apache.beehive/poms/beehive-controls-1.0.1.pom
+org.apache.beehive/poms/beehive-netui-compiler-1.0.1.pom
+org.apache.beehive/poms/beehive-netui-core-1.0.1.pom
+org.apache.beehive/poms/beehive-netui-tags-1.0.1.pom
+org.apache.derby/jars/derby-10.1.1.0.jar
+org.apache.derby/jars/derbyLocale_de_DE-10.1.1.0.jar
+org.apache.derby/jars/derby-10.1.2.1.jar
+org.apache.derby/jars/derby-10.1.3.1.jar
+org.apache.derby/jars/derbyclient-10.1.1.0.jar
+org.apache.derby/jars/derbyLocale_de_DE-10.1.2.1.jar
+org.apache.derby/jars/derbyLocale_de_DE-10.1.3.1.jar
+org.apache.derby/jars/derbyLocale_es-10.1.1.0.jar
+org.apache.derby/jars/derbyLocale_es-10.1.2.1.jar
+org.apache.derby/jars/derbyLocale_es-10.1.3.1.jar
+org.apache.derby/jars/derbyLocale_fr-10.1.1.0.jar
+org.apache.derby/jars/derbyLocale_fr-10.1.2.1.jar
+org.apache.derby/jars/derbyLocale_fr-10.1.3.1.jar
+org.apache.derby/jars/derbyLocale_it-10.1.1.0.jar
+org.apache.derby/jars/derbyLocale_it-10.1.2.1.jar
+org.apache.derby/jars/derbyLocale_it-10.1.3.1.jar
+org.apache.derby/jars/derbyLocale_ja_JP-10.1.1.0.jar
+org.apache.derby/jars/derbyLocale_ja_JP-10.1.2.1.jar
+org.apache.derby/jars/derbyLocale_ja_JP-10.1.3.1.jar
+org.apache.derby/jars/derbyLocale_ko_KR-10.1.1.0.jar
+org.apache.derby/jars/derbyLocale_ko_KR-10.1.2.1.jar
+org.apache.derby/jars/derbyLocale_ko_KR-10.1.3.1.jar
+org.apache.derby/jars/derbyLocale_pt_BR-10.1.1.0.jar
+org.apache.derby/jars/derbyLocale_pt_BR-10.1.2.1.jar
+org.apache.derby/jars/derbyLocale_pt_BR-10.1.3.1.jar
+org.apache.derby/jars/derbyLocale_zh_CN-10.1.1.0.jar
+org.apache.derby/jars/derbyLocale_zh_CN-10.1.2.1.jar
+org.apache.derby/jars/derbyLocale_zh_CN-10.1.3.1.jar
+org.apache.derby/jars/derbyLocale_zh_TW-10.1.1.0.jar
+org.apache.derby/jars/derbyLocale_zh_TW-10.1.2.1.jar
+org.apache.derby/jars/derbyLocale_zh_TW-10.1.3.1.jar
+org.apache.derby/jars/derbyclient-10.1.2.1.jar
+org.apache.derby/jars/derbyclient-10.1.3.1.jar
+org.apache.derby/jars/derbynet-10.1.1.0.jar
+org.apache.derby/jars/derbynet-10.1.2.1.jar
+org.apache.derby/jars/derbynet-10.1.3.1.jar
+org.apache.derby/jars/derbytools-10.1.1.0.jar
+org.apache.derby/jars/derbytools-10.1.2.1.jar
+org.apache.derby/jars/derbytools-10.1.3.1.jar
+org.apache.derby/jars/derby-10.2.2.0.jar
+org.apache.derby/jars/derbyLocale_de_DE-10.2.2.0.jar
+org.apache.derby/jars/derbyLocale_es-10.2.2.0.jar
+org.apache.derby/jars/derbyLocale_fr-10.2.2.0.jar
+org.apache.derby/jars/derbyLocale_it-10.2.2.0.jar
+org.apache.derby/jars/derbyLocale_ja_JP-10.2.2.0.jar
+org.apache.derby/jars/derbyLocale_ko_KR-10.2.2.0.jar
+org.apache.derby/jars/derbyLocale_pt_BR-10.2.2.0.jar
+org.apache.derby/jars/derbyLocale_zh_CN-10.2.2.0.jar
+org.apache.derby/jars/derbyLocale_zh_TW-10.2.2.0.jar
+org.apache.derby/jars/derbyclient-10.2.2.0.jar
+org.apache.derby/jars/derbynet-10.2.2.0.jar
+org.apache.derby/jars/derbytools-10.2.2.0.jar
+org.apache.derby/jars/derbyclient-10.3.1.4.jar
+org.apache.derby/jars/derbyLocale_cs-10.3.1.4.jar
+org.apache.derby/jars/derbyLocale_de_DE-10.3.1.4.jar
+org.apache.derby/jars/derbyLocale_es-10.3.1.4.jar
+org.apache.derby/jars/derbyLocale_fr-10.3.1.4.jar
+org.apache.derby/jars/derbyLocale_hu-10.3.1.4.jar
+org.apache.derby/jars/derbyLocale_it-10.3.1.4.jar
+org.apache.derby/jars/derbyLocale_ja_JP-10.3.1.4.jar
+org.apache.derby/jars/derbyLocale_ko_KR-10.3.1.4.jar
+org.apache.derby/jars/derbyLocale_pl-10.3.1.4.jar
+org.apache.derby/jars/derbyLocale_pt_BR-10.3.1.4.jar
+org.apache.derby/jars/derbyLocale_ru-10.3.1.4.jar
+org.apache.derby/jars/derbyLocale_zh_CN-10.3.1.4.jar
+org.apache.derby/jars/derbyLocale_zh_TW-10.3.1.4.jar
+org.apache.derby/jars/derby-10.3.1.4.jar
+org.apache.derby/jars/derbynet-10.3.1.4.jar
+org.apache.derby/jars/derbytools-10.3.1.4.jar
+org.apache.derby/poms/derby-10.1.1.0.pom
+org.apache.derby/poms/derbyLocale_de_DE-10.1.1.0.pom
+org.apache.derby/poms/derby-10.1.2.1.pom
+org.apache.derby/poms/derby-10.1.3.1.pom
+org.apache.derby/poms/derbyLocale_de_DE-10.1.2.1.pom
+org.apache.derby/poms/derbyLocale_de_DE-10.1.3.1.pom
+org.apache.derby/poms/derbyLocale_es-10.1.1.0.pom
+org.apache.derby/poms/derbyLocale_es-10.1.2.1.pom
+org.apache.derby/poms/derbyLocale_es-10.1.3.1.pom
+org.apache.derby/poms/derbyLocale_fr-10.1.1.0.pom
+org.apache.derby/poms/derbynet-10.1.1.0.pom
+org.apache.derby/poms/derbyLocale_fr-10.1.2.1.pom
+org.apache.derby/poms/derbyLocale_fr-10.1.3.1.pom
+org.apache.derby/poms/derbyLocale_it-10.1.1.0.pom
+org.apache.derby/poms/derbyLocale_it-10.1.2.1.pom
+org.apache.derby/poms/derbyLocale_it-10.1.3.1.pom
+org.apache.derby/poms/derbyLocale_ja_JP-10.1.1.0.pom
+org.apache.derby/poms/derbyLocale_ja_JP-10.1.2.1.pom
+org.apache.derby/poms/derbyLocale_ja_JP-10.1.3.1.pom
+org.apache.derby/poms/derbyLocale_ko_KR-10.1.1.0.pom
+org.apache.derby/poms/derbyLocale_ko_KR-10.1.2.1.pom
+org.apache.derby/poms/derbyLocale_ko_KR-10.1.3.1.pom
+org.apache.derby/poms/derbyLocale_pt_BR-10.1.1.0.pom
+org.apache.derby/poms/derbyLocale_pt_BR-10.1.2.1.pom
+org.apache.derby/poms/derbyLocale_pt_BR-10.1.3.1.pom
+org.apache.derby/poms/derbyLocale_zh_CN-10.1.1.0.pom
+org.apache.derby/poms/derbyLocale_zh_CN-10.1.2.1.pom
+org.apache.derby/poms/derbyLocale_zh_CN-10.1.3.1.pom
+org.apache.derby/poms/derbyLocale_zh_TW-10.1.1.0.pom
+org.apache.derby/poms/derbyLocale_zh_TW-10.1.2.1.pom
+org.apache.derby/poms/derbyLocale_zh_TW-10.1.3.1.pom
+org.apache.derby/poms/derbyclient-10.1.1.0.pom
+org.apache.derby/poms/derbytools-10.1.2.1.pom
+org.apache.derby/poms/derbyclient-10.1.2.1.pom
+org.apache.derby/poms/derbyclient-10.1.3.1.pom
+org.apache.derby/poms/derbynet-10.1.2.1.pom
+org.apache.derby/poms/derbynet-10.1.3.1.pom
+org.apache.derby/poms/derbytools-10.1.1.0.pom
+org.apache.derby/poms/derbytools-10.1.3.1.pom
+org.apache.derby/poms/derbywar-10.1.1.0.pom
+org.apache.derby/poms/derbywar-10.1.2.1.pom
+org.apache.derby/poms/derbywar-10.1.3.1.pom
+org.apache.derby/poms/derby-10.2.2.0.pom
+org.apache.derby/poms/derbyLocale_de_DE-10.2.2.0.pom
+org.apache.derby/poms/derbyLocale_es-10.2.2.0.pom
+org.apache.derby/poms/derbyLocale_fr-10.2.2.0.pom
+org.apache.derby/poms/derbyLocale_it-10.2.2.0.pom
+org.apache.derby/poms/derbyLocale_ja_JP-10.2.2.0.pom
+org.apache.derby/poms/derbyLocale_ko_KR-10.2.2.0.pom
+org.apache.derby/poms/derbyLocale_pt_BR-10.2.2.0.pom
+org.apache.derby/poms/derbyLocale_zh_CN-10.2.2.0.pom
+org.apache.derby/poms/derbyLocale_zh_TW-10.2.2.0.pom
+org.apache.derby/poms/derbyclient-10.2.2.0.pom
+org.apache.derby/poms/derbynet-10.2.2.0.pom
+org.apache.derby/poms/derbytools-10.2.2.0.pom
+org.apache.derby/poms/derbywar-10.2.2.0.pom
+org.apache.derby/poms/derbyclient-10.3.1.4.pom
+org.apache.derby/poms/derbyLocale_cs-10.3.1.4.pom
+org.apache.derby/poms/derbyLocale_de_DE-10.3.1.4.pom
+org.apache.derby/poms/derbyLocale_es-10.3.1.4.pom
+org.apache.derby/poms/derbyLocale_fr-10.3.1.4.pom
+org.apache.derby/poms/derbyLocale_hu-10.3.1.4.pom
+org.apache.derby/poms/derbyLocale_it-10.3.1.4.pom
+org.apache.derby/poms/derbyLocale_ja_JP-10.3.1.4.pom
+org.apache.derby/poms/derby-10.3.1.4.pom
+org.apache.derby/poms/derbyLocale_ko_KR-10.3.1.4.pom
+org.apache.derby/poms/derbyLocale_pl-10.3.1.4.pom
+org.apache.derby/poms/derbyLocale_pt_BR-10.3.1.4.pom
+org.apache.derby/poms/derbyLocale_ru-10.3.1.4.pom
+org.apache.derby/poms/derbyLocale_zh_CN-10.3.1.4.pom
+org.apache.derby/poms/derbyLocale_zh_TW-10.3.1.4.pom
+org.apache.derby/poms/derbynet-10.3.1.4.pom
+org.apache.derby/poms/derbytools-10.3.1.4.pom
+org.apache.derby/poms/derbywar-10.3.1.4.pom
+org.apache.derby/wars/derbywar-10.1.1.0.war
+org.apache.derby/wars/derbywar-10.1.2.1.war
+org.apache.derby/wars/derbywar-10.1.3.1.war
+org.apache.derby/wars/derbywar-10.2.2.0.war
+org.apache.derby/wars/derbywar-10.3.1.4.war
+org.apache.geronimo/jars/daytrader-core-1.0.jar
+org.apache.geronimo/jars/daytrader-streamer-1.0.jar
+org.apache.geronimo/jars/daytrader-wsappclient-1.0.jar
+org.apache.geronimo/jars/geronimo-activation-1.0.jar
+org.apache.geronimo/jars/geronimo-axis-1.0.jar
+org.apache.geronimo/jars/geronimo-axis-builder-1.0.jar
+org.apache.geronimo/jars/geronimo-client-1.0.jar
+org.apache.geronimo/jars/geronimo-client-builder-1.0.jar
+org.apache.geronimo/jars/geronimo-common-1.0.jar
+org.apache.geronimo/jars/geronimo-connector-1.0.jar
+org.apache.geronimo/jars/geronimo-connector-builder-1.0.jar
+org.apache.geronimo/jars/geronimo-console-core-1.0.jar
+org.apache.geronimo/jars/geronimo-console-web-1.0.jar
+org.apache.geronimo/jars/geronimo-converter-1.0.jar
+org.apache.geronimo/jars/geronimo-core-1.0.jar
+org.apache.geronimo/jars/geronimo-daytrader-derby-db-1.0.jar
+org.apache.geronimo/jars/geronimo-deploy-config-1.0.jar
+org.apache.geronimo/jars/geronimo-deploy-jsr88-1.0.jar
+org.apache.geronimo/jars/geronimo-deploy-tool-1.0.jar
+org.apache.geronimo/jars/geronimo-deployment-1.0.jar
+org.apache.geronimo/jars/geronimo-derby-1.0.jar
+org.apache.geronimo/jars/geronimo-directory-1.0.jar
+org.apache.geronimo/jars/geronimo-hot-deploy-1.0.jar
+org.apache.geronimo/jars/geronimo-j2ee-1.0.jar
+org.apache.geronimo/jars/geronimo-j2ee-builder-1.0.jar
+org.apache.geronimo/jars/geronimo-j2ee-schema-1.0.jar
+org.apache.geronimo/jars/geronimo-javamail-transport-1.0.jar
+org.apache.geronimo/jars/geronimo-jetty-1.0.jar
+org.apache.geronimo/jars/geronimo-jetty-builder-1.0.jar
+org.apache.geronimo/jars/geronimo-jmxremoting-1.0.jar
+org.apache.geronimo/jars/geronimo-kernel-1.0.jar
+org.apache.geronimo/jars/geronimo-mail-1.0.jar
+org.apache.geronimo/jars/geronimo-management-1.0.jar
+org.apache.geronimo/jars/geronimo-naming-1.0.jar
+org.apache.geronimo/jars/geronimo-naming-builder-1.0.jar
+org.apache.geronimo/jars/geronimo-remote-deploy-lib-1.0.jar
+org.apache.geronimo/jars/geronimo-scripts-1.0.jar
+org.apache.geronimo/jars/geronimo-security-1.0.jar
+org.apache.geronimo/jars/geronimo-security-builder-1.0.jar
+org.apache.geronimo/jars/geronimo-service-builder-1.0.jar
+org.apache.geronimo/jars/geronimo-system-1.0.jar
+org.apache.geronimo/jars/geronimo-test-ddbean-1.0.jar
+org.apache.geronimo/jars/geronimo-timer-1.0.jar
+org.apache.geronimo/jars/geronimo-tomcat-1.0.jar
+org.apache.geronimo/jars/geronimo-tomcat-builder-1.0.jar
+org.apache.geronimo/jars/geronimo-transaction-1.0.jar
+org.apache.geronimo/jars/geronimo-uddi-db-1.0.jar
+org.apache.geronimo/jars/geronimo-util-1.0.jar
+org.apache.geronimo/jars/geronimo-web-builder-1.0.jar
+org.apache.geronimo/jars/geronimo-webservices-1.0.jar
+org.apache.geronimo.specs/jars/geronimo-activation_1.0.2_spec-1.0.jar
+org.apache.geronimo.specs/jars/geronimo-activation_1.0.2_spec-1.0.jar.sha
+org.apache.geronimo.specs/jars/geronimo-activation_1.0.2_spec-1.1.jar
+org.apache.geronimo.specs/jars/geronimo-commonj_1.1_spec-1.0.jar
+org.apache.geronimo.specs/jars/geronimo-corba_2.3_spec-1.0.jar
+org.apache.geronimo.specs/jars/geronimo-j2ee-connector_1.5_spec-1.0.1.jar
+org.apache.geronimo.specs/jars/geronimo-corba_2.3_spec-1.0.jar.sha
+org.apache.geronimo.specs/jars/geronimo-corba_2.3_spec-1.1.jar
+org.apache.geronimo.specs/jars/geronimo-corba_3.0_spec-1.1.jar
+org.apache.geronimo.specs/jars/geronimo-ejb_2.1_spec-1.0.1.jar
+org.apache.geronimo.specs/jars/geronimo-ejb_2.1_spec-1.0.jar
+org.apache.geronimo.specs/jars/geronimo-ejb_2.1_spec-1.0.jar.sha
+org.apache.geronimo.specs/jars/geronimo-j2ee_1.4_spec-1.0.jar.sha
+org.apache.geronimo.specs/jars/geronimo-j2ee-connector_1.5_spec-1.0.jar
+org.apache.geronimo.specs/jars/geronimo-j2ee-connector_1.5_spec-1.0.jar.sha
+org.apache.geronimo.specs/jars/geronimo-j2ee-deployment_1.1_spec-1.0.1.jar
+org.apache.geronimo.specs/jars/geronimo-j2ee_1.4_spec-1.1.jar
+org.apache.geronimo.specs/jars/geronimo-j2ee-deployment_1.1_spec-1.0.jar
+org.apache.geronimo.specs/jars/geronimo-j2ee-deployment_1.1_spec-1.0.jar.sha
+org.apache.geronimo.specs/jars/geronimo-j2ee-jacc_1.0_spec-1.0.1.jar
+org.apache.geronimo.specs/jars/geronimo-j2ee-jacc_1.0_spec-1.0.jar
+org.apache.geronimo.specs/jars/geronimo-j2ee-jacc_1.0_spec-1.0.jar.sha
+org.apache.geronimo.specs/jars/geronimo-j2ee-management_1.0_spec-1.0.1.jar
+org.apache.geronimo.specs/jars/geronimo-j2ee-management_1.0_spec-1.0.jar
+org.apache.geronimo.specs/jars/geronimo-j2ee-management_1.0_spec-1.0.jar.sha
+org.apache.geronimo.specs/jars/geronimo-j2ee_1.4_spec-1.0.jar
+org.apache.geronimo.specs/jars/geronimo-javamail_1.3.1_spec-1.0.jar
+org.apache.geronimo.specs/jars/geronimo-javamail_1.3.1_spec-1.0.jar.sha
+org.apache.geronimo.specs/jars/geronimo-javamail_1.3.1_spec-1.1.jar
+org.apache.geronimo.specs/jars/geronimo-jaxr_1.0_spec-1.0.1.jar
+org.apache.geronimo.specs/jars/geronimo-jaxr_1.0_spec-1.0.jar
+org.apache.geronimo.specs/jars/geronimo-jms_1.1_spec-1.0.jar
+org.apache.geronimo.specs/jars/geronimo-jaxr_1.0_spec-1.0.jar.sha
+org.apache.geronimo.specs/jars/geronimo-jaxrpc_1.1_spec-1.0.1.jar
+org.apache.geronimo.specs/jars/geronimo-jaxrpc_1.1_spec-1.0.jar
+org.apache.geronimo.specs/jars/geronimo-jaxrpc_1.1_spec-1.0.jar.sha
+org.apache.geronimo.specs/jars/geronimo-jms_1.1_spec-1.0.1.jar
+org.apache.geronimo.specs/jars/geronimo-jms_1.1_spec-1.0.jar.sha
+org.apache.geronimo.specs/jars/geronimo-jsp_2.0_spec-1.0.1.jar
+org.apache.geronimo.specs/jars/geronimo-jsp_2.0_spec-1.0.jar
+org.apache.geronimo.specs/jars/geronimo-jsp_2.0_spec-1.0.jar.sha
+org.apache.geronimo.specs/jars/geronimo-jta_1.0.1B_spec-1.0.1.jar
+org.apache.geronimo.specs/jars/geronimo-jta_1.0.1B_spec-1.0.jar
+org.apache.geronimo.specs/jars/geronimo-jta_1.0.1B_spec-1.0.jar.sha
+org.apache.geronimo.specs/jars/geronimo-qname_1.1_spec-1.0.1.jar
+org.apache.geronimo.specs/jars/geronimo-qname_1.1_spec-1.0.jar
+org.apache.geronimo.specs/jars/geronimo-qname_1.1_spec-1.0.jar.sha
+org.apache.geronimo.specs/jars/geronimo-saaj_1.1_spec-1.0.1.jar
+org.apache.geronimo.specs/jars/geronimo-saaj_1.1_spec-1.0.jar
+org.apache.geronimo.specs/jars/geronimo-saaj_1.1_spec-1.0.jar.sha
+org.apache.geronimo.specs/jars/geronimo-servlet_2.4_spec-1.0.1.jar
+org.apache.geronimo.specs/jars/geronimo-servlet_2.4_spec-1.0.jar
+org.apache.geronimo.specs/jars/geronimo-servlet_2.4_spec-1.0.jar.sha
+org.apache.geronimo.specs/jars/geronimo-annotation_1.0_spec-1.1.jar
+org.apache.jackrabbit/jars/jackrabbit-core-1.0.1.jar
+org.apache.jackrabbit/jars/jackrabbit-core-1.0.jar
+org.apache.jackrabbit/jars/jackrabbit-index-filters-1.0.1.jar
+org.apache.jackrabbit/jars/jackrabbit-core-1.1.jar
+org.apache.jackrabbit/jars/jackrabbit-index-filters-1.0.jar
+org.apache.jackrabbit/jars/jackrabbit-jcr-client-1.0.1.jar
+org.apache.jackrabbit/jars/jackrabbit-jcr-client-1.0.jar
+org.apache.jackrabbit/jars/jackrabbit-jcr-commons-1.0.1.jar
+org.apache.jackrabbit/jars/jackrabbit-jcr-commons-1.0.jar
+org.apache.jackrabbit/jars/jackrabbit-jcr-rmi-1.0.1.jar
+org.apache.jackrabbit/jars/jackrabbit-jcr-rmi-1.0.jar
+org.apache.jackrabbit/jars/jackrabbit-jcr-server-1.0.1.jar
+org.apache.jackrabbit/jars/jackrabbit-jcr-server-1.0.jar
+org.apache.jackrabbit/jars/jackrabbit-jcr-webdav-1.0.1.jar
+org.apache.jackrabbit/jars/jackrabbit-jcr-webdav-1.0.jar
+org.apache.jackrabbit/jars/jackrabbit-jcr-webdav-1.1.jar
+org.apache.jackrabbit/jars/jackrabbit-jcr-server-1.1.jar
+org.apache.jackrabbit/jars/jackrabbit-core-1.1.1.jar
+org.apache.jackrabbit/jars/jackrabbit-jcr-rmi-1.1.jar
+org.apache.jackrabbit/jars/jackrabbit-jcr-commons-1.1.jar
+org.apache.jackrabbit/jars/jackrabbit-jcr-client-1.1.jar
+org.apache.jackrabbit/jars/jackrabbit-index-filters-1.1.jar
+org.apache.jackrabbit/jars/jackrabbit-jca-1.1.1.jar
+org.apache.jackrabbit/jars/jackrabbit-jcr-commons-1.1.1.jar
+org.apache.jackrabbit/jars/jackrabbit-jcr-rmi-1.1.1.jar
+org.apache.jackrabbit/jars/jackrabbit-index-filters-1.1.1.jar
+org.apache.jackrabbit/jars/jackrabbit-jcr-webdav-1.1.1.jar
+org.apache.jackrabbit/jars/jackrabbit-jcr-client-1.1.1.jar
+org.apache.jackrabbit/jars/jackrabbit-jcr-server-1.1.1.jar
+org.apache.jackrabbit/java-sources/jackrabbit-core-1.0-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-core-1.0.1-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-index-filters-1.0-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-jcr-client-1.0.1-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-index-filters-1.0.1-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-jca-1.0-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-jca-1.0.1-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-jcr-client-1.0-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-jcr-commons-1.0-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-jcr-commons-1.0.1-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-jcr-rmi-1.0-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-jcr-rmi-1.0.1-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-core-1.1-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-jcr-server-1.0-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-jcr-server-1.0.1-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-jcr-webdav-1.0-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-jcr-webdav-1.0.1-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-server-1.0-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-server-1.0.1-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-server-1.1-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-jcr-webdav-1.1-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-jcr-server-1.1-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-jcr-rmi-1.1-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-jcr-commons-1.1-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-jcr-client-1.1-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-jca-1.1-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-index-filters-1.1-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-server-1.1.1-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-core-1.1.1-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-jcr-rmi-1.1.1-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-index-filters-1.1.1-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-jca-1.1.1-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-jcr-webdav-1.1.1-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-jcr-client-1.1.1-sources.jar
+org.apache.jackrabbit/java-sources/jackrabbit-jcr-server-1.1.1-sources.jar
+org.apache.jackrabbit/poms/jackrabbit-core-1.0.1.pom
+org.apache.jackrabbit/poms/jackrabbit-core-1.0.pom
+org.apache.jackrabbit/poms/jackrabbit-index-filters-1.0.1.pom
+org.apache.jackrabbit/poms/jackrabbit-core-1.1.pom
+org.apache.jackrabbit/poms/jackrabbit-index-filters-1.0.pom
+org.apache.jackrabbit/poms/jackrabbit-server-1.1.pom
+org.apache.jackrabbit/poms/jackrabbit-jca-1.0.1.pom
+org.apache.jackrabbit/poms/jackrabbit-jca-1.0.pom
+org.apache.jackrabbit/poms/jackrabbit-jcr-client-1.0.1.pom
+org.apache.jackrabbit/poms/jackrabbit-jcr-client-1.0.pom
+org.apache.jackrabbit/poms/jackrabbit-jcr-commons-1.0.1.pom
+org.apache.jackrabbit/poms/jackrabbit-jcr-commons-1.0.pom
+org.apache.jackrabbit/poms/jackrabbit-jcr-rmi-1.0.1.pom
+org.apache.jackrabbit/poms/jackrabbit-jcr-rmi-1.0.pom
+org.apache.jackrabbit/poms/jackrabbit-jcr-server-1.0.1.pom
+org.apache.jackrabbit/poms/jackrabbit-jcr-server-1.0.pom
+org.apache.jackrabbit/poms/jackrabbit-jcr-webdav-1.0.1.pom
+org.apache.jackrabbit/poms/jackrabbit-jcr-webdav-1.0.pom
+org.apache.jackrabbit/poms/jackrabbit-server-1.0.1.pom
+org.apache.jackrabbit/poms/jackrabbit-server-1.0.pom
+org.apache.jackrabbit/poms/jackrabbit-jcr-webdav-1.1.pom
+org.apache.jackrabbit/poms/jackrabbit-jcr-server-1.1.pom
+org.apache.jackrabbit/poms/jackrabbit-jcr-rmi-1.1.pom
+org.apache.jackrabbit/poms/jackrabbit-jcr-commons-1.1.pom
+org.apache.jackrabbit/poms/jackrabbit-jcr-client-1.1.pom
+org.apache.jackrabbit/poms/jackrabbit-jca-1.1.pom
+org.apache.jackrabbit/poms/jackrabbit-index-filters-1.1.pom
+org.apache.jackrabbit/poms/jackrabbit-core-1.1.1.pom
+org.apache.jackrabbit/poms/jackrabbit-jcr-commons-1.1.1.pom
+org.apache.jackrabbit/poms/jackrabbit-jcr-rmi-1.1.1.pom
+org.apache.jackrabbit/poms/jackrabbit-index-filters-1.1.1.pom
+org.apache.jackrabbit/poms/jackrabbit-jca-1.1.1.pom
+org.apache.jackrabbit/poms/jackrabbit-jcr-webdav-1.1.1.pom
+org.apache.jackrabbit/poms/jackrabbit-jcr-client-1.1.1.pom
+org.apache.jackrabbit/poms/jackrabbit-jcr-server-1.1.1.pom
+org.apache.jackrabbit/poms/jackrabbit-server-1.1.1.pom
+org.apache.jackrabbit/rars/jackrabbit-jca-1.0.1.rar
+org.apache.jackrabbit/rars/jackrabbit-jca-1.0.rar
+org.apache.jackrabbit/rars/jackrabbit-jca-1.1.rar
+org.apache.jackrabbit/rars/jackrabbit-jca-1.1.1.rar
+org.apache.jackrabbit/wars/jackrabbit-server-1.0.1.war
+org.apache.jackrabbit/wars/jackrabbit-server-1.0.war
+org.apache.jackrabbit/wars/jackrabbit-server-1.1.war
+org.apache.jackrabbit/wars/jackrabbit-server-1.1.1.war
+org.apache.jdo/jars/jdo2-core-2.0-beta.jar
+org.apache.jdo/jars/jdo2-core-2.0-rc1.jar
+org.apache.jdo/jars/jdo2-core-2.0.jar
+org.apache.jdo/jars/jdo2-enhancer-2.0-beta.jar
+org.apache.jdo/jars/jdo2-enhancer-2.0-rc1.jar
+org.apache.jdo/jars/jdo2-enhancer-2.0.jar
+org.apache.jdo/jars/jdo2-tck-2.0-rc1.jar
+org.apache.jdo/poms/jdo2-core-2.0-beta.pom
+org.apache.jdo/poms/jdo2-core-2.0-rc1.pom
+org.apache.jdo/poms/jdo2-core-2.0.pom
+org.apache.jdo/poms/jdo2-enhancer-2.0-beta.pom
+org.apache.jdo/poms/jdo2-enhancer-2.0-rc1.pom
+org.apache.jdo/poms/jdo2-enhancer-2.0.pom
+org.apache.jdo/poms/jdo2-tck-2.0-rc1.pom
+org.apache.maven/jars/maven-artifact-ant-2.0-alpha-1-dep.jar
+org.apache.maven/jars/maven-artifact-ant-2.0-alpha-2-dep.jar
+org.apache.maven/jars/maven-artifact-ant-2.0-alpha-3-dep.jar
+org.apache.maven/jars/maven-artifact-ant-2.0-beta-1-dep.jar
+org.apache.maven/jars/maven-artifact-ant-2.0-beta-2-dep.jar
+org.apache.maven/jars/maven-model-v3-2.0.jar
+org.apache.maven/poms/maven-model-v3-2.0.pom
+org.apache.pluto/jars/pluto-1.0.1-rc4.jar
+org.apache.pluto/jars/pluto-deploy-1.0.1-rc4.jar
+org.apache.pluto/jars/pluto-1.0.1.jar
+org.apache.pluto/jars/pluto-deploy-1.0.1.jar
+org.apache.pluto/jars/pluto-descriptors-1.0.1-rc4.jar
+org.apache.pluto/jars/pluto-descriptors-1.0.1.jar
+org.apache.pluto/jars/pluto-portal-1.0.1-rc4.jar
+org.apache.pluto/jars/pluto-portal-1.0.1.jar
+org.apache.portals.bridges/jars/portals-bridges-common-1.0.jar
+org.apache.portals.bridges/jars/portals-bridges-frameworks-1.0.jar
+org.apache.portals.bridges/jars/portals-bridges-jsf-1.0.jar
+org.apache.portals.bridges/jars/portals-bridges-perl-1.0.jar
+org.apache.portals.bridges/jars/portals-bridges-php-1.0.jar
+org.apache.portals.bridges/jars/portals-bridges-portletfilter-1.0.jar
+org.apache.portals.bridges/jars/portals-bridges-struts-1.2.4-1.0.jar
+org.apache.portals.bridges/jars/portals-bridges-struts-1.2.7-1.0.jar
+org.apache.portals.bridges/jars/portals-bridges-velocity-1.0.jar
+org.apache.portals.jetspeed-2/jars/content-server-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/content-server-2.0.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-api-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-api-2.0.1.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-api-2.0.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-capability-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-capability-2.0.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-cm-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-cm-2.0.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-commons-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-commons-2.0.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-sso-2.0.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-statistics-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-components-2.0.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-components-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-deploy-tools-2.0.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-deploy-tools-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-file-cache-2.0.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-file-cache-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-header-resource-2.0.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-header-resource-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-id-generator-2.0.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-id-generator-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-importer-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-layout-portlets-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-locator-2.0.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-locator-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-page-manager-2.0.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-page-manager-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-portal-2.0.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-portal-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-portal-site-2.0.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-portal-site-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-portlet-factory-2.0.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-portlet-factory-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-prefs-2.0.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-prefs-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-profiler-2.0.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-profiler-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-rdbms-2.0.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-rdbms-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-registry-2.0.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-registry-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-rewriter-2.0.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-rewriter-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-rss-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-search-2.0.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-search-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-security-2.0.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-security-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-security-schema-2.0.jar
+org.apache.portals.jetspeed-2/jars/portlet-api-1.0.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-security-schema-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-serializer-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-sso-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-statistics-2.0.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-web-content-2.0.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-web-content-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed-webapp-logging-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/jetspeed2-taglib-treecontrol-2.0.jar
+org.apache.portals.jetspeed-2/jars/jetspeed2-taglib-treecontrol-2.1-dev.jar
+org.apache.portals.jetspeed-2/jars/portals-gems-2.0.jar
+org.apache.portals.jetspeed-2/jars/portals-gems-2.1-dev.jar
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/META-INF/MANIFEST.MF
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/org/apache/jetspeed/dbutil/HSQLServerThread.class
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/org/apache/jetspeed/dbutil/HSQLServer.class
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/org/apache/jetspeed/dbutil/ScriptUtil.class
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/apacheds/apacheds-server.xml
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/apacheds/j2-apacheds.ldif
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/conf/jboss/jboss-login-config.xml
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/conf/jboss/jetspeed-ds.xml
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/conf/jboss/jetspeed-mysql-ds.xml
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/conf/jboss/jetspeed-oracle-ds.xml
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/conf/tomcat/jetspeed-tomcat-5.5.xml
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/conf/tomcat/jetspeed-tomcat-5.xml
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/db-ojb/OJB-logging.properties
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/db-ojb/OJB.properties
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/db-ojb/repository.dtd
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/db-ojb/repository.xml
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/db-ojb/repository_database.xml
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/db-ojb/repository_internal.xml
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/schema/phase3ojb-schema.xml
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/schema/phase1-schema.xml
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/schema/phase2-schema.xml
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/schema/prefs-schema.xml
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/schema/registry-schema.xml
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/schema/security-schema.xml
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/schema/velocity.log
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/schema/velocity.log.1
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/sql/derby/schema/phase3ojb-schema.sql
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/sql/derby/schema/phase1-schema.sql
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/sql/derby/schema/phase2-schema.sql
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/sql/derby/schema/prefs-schema.sql
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/sql/derby/schema/registry-schema.sql
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/sql/derby/schema/security-schema.sql
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/sql/hsql/portal-drop.sql
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/sql/hsql/drop.sql
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/sql/hsql/registry-drop.sql
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/sql/hsql/prefs-drop.sql
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/sql/hsql/populate-userinfo-for-default-psml.sql
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/sql/hsql/security-drop.sql
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/sql/mssql/schema/phase2-schema.sql
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/sql/mssql/schema/security-schema.sql
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/sql/mssql/drop.sql
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/sql/mssql/populate-userinfo-for-default-psml.sql
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/sql/mysql/drop.sql
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/sql/mysql/populate-entities-for-default-psml.sql
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/sql/mysql/populate-userinfo-for-default-psml.sql
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/sql/oracle/drop.sql
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/sql/oracle/populate-userinfo-for-default-psml.sql
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/sql/xml/README.txt
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/sql/xml/populate-db-default.xml
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/sql/drop.sql
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/sql/populate-db-default.sql
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/sql/populate-userinfo-for-default-psml.sql
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/ajax/portlet_definitions.ajax
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/ajax/portlet_apps.ajax
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/ajax/portlet_entities.ajax
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/ajax/portlet_entity.ajax
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/images/customize.gif
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/images/close.gif
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/images/icon_error_sml.gif
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/images/edit.gif
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/images/help.gif
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/images/icon_arrowfolderclosed1_sml.gif
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/images/icon_arrowdoc_sml.gif
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/images/leftnavbg.gif
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/images/info.gif
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/images/icon_arrowfolderopen2_sml.gif
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/images/icon_info_sml.gif
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/images/icon_success_sml.gif
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/images/icon_warning_sml.gif
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/images/info1.gif
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/images/maximized.gif
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/images/minimized.gif
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/images/nw_maj_rond.gif
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/images/print.gif
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/images/restore.gif
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/images/sw_med_rond.gif
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/images/view.gif
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/layout/css/PLT.C.3-Messages.css
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/layout/css/PLT.C.1-Links.css
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/layout/css/PLT.C.2-Fonts.css
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/layout/css/PLT.C.4-Sections.css
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/layout/css/PLT.C.5-Forms.css
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/layout/css/PLT.C.6-Menus-Arrow.css
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/layout/css/PLT.C.6-Menus.css
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/layout/css/PLT.C.All.css
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/layout/css/data-scroller.css
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/layout/css/database-browser.css
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/layout/css/html-tables.css
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/layout/css/portal-standard.css
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/layout/css/standard-columns.css
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/layout/css/tree-component.css
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/layout/images/movePortletDown.gif
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev/plugin-resources/webapp/decorations/layout/images/close.gif
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.1-dev.jar
+org.apache.portals.jetspeed-2/plugins/maven-jetspeed2-plugin-2.0.jar
+org.apache.portals.jetspeed-2/wars/demo-2.1-dev.war
+org.apache.portals.jetspeed-2/wars/demo-2.0.war
+org.apache.portals.jetspeed-2/wars/j2-admin-2.1-dev.war
+org.apache.portals.jetspeed-2/wars/j2-admin-2.0.war
+org.apache.portals.jetspeed-2/wars/jetspeed-2.1-dev.war
+org.apache.portals.jetspeed-2/wars/jetspeed-2.0.war
+org.apache.portals.jetspeed-2/wars/jetspeed-layouts-2.1-dev.war
+org.apache.portals.jetspeed-2/wars/jetspeed-layouts-2.0.war
+org.apache.portals.jetspeed-2/wars/portals-gems-2.1-dev.war
+org.apache.portals.jetspeed-2/wars/portals-gems-2.0.war
+org.apache.portals.jetspeed-2/wars/rss-2.1-dev.war
+org.apache.portals.jetspeed-2/wars/rss-2.0.war
+org.apache.ws.commons/jars/XmlSchema-1.0.1.jar
+org.apache.ws.commons/jars/XmlSchema-1.0.2.jar
+org.apache.ws.commons/jars/XmlSchema-1.0.3.jar
+org.apache.ws.commons/jars/XmlSchema-1.2.jar
+org.apache.ws.commons/jars/XmlSchema-1.0.jar
+org.apache.ws.commons/poms/XmlSchema-1.0.1.pom
+org.apache.ws.commons/poms/XmlSchema-1.0.2.pom
+org.apache.ws.commons/poms/XmlSchema-1.0.3.pom
+org.apache.ws.commons/poms/XmlSchema-SNAPSHOT.pom
+org.apache.ws.commons/poms/maven-metadata.xml
+org.apache.xbean/jars/xbean-classpath-2.3.jar
+org.apache.xbean/jars/xbean-classpath-2.4.jar
+org.apache.xbean/jars/xbean-finder-2.4.jar
+org.apache.xbean/jars/xbean-jaxb-2.4.jar
+org.apache.xbean/jars/xbean-kernel-2.3.jar
+org.apache.xbean/jars/xbean-kernel-2.4.jar
+org.apache.xbean/jars/xbean-osgi-2.3.jar
+org.apache.xbean/jars/xbean-osgi-2.4.jar
+org.apache.xbean/jars/xbean-reflect-2.3.jar
+org.apache.xbean/jars/xbean-reflect-2.4.jar
+org.apache.xbean/jars/xbean-server-2.3.jar
+org.apache.xbean/jars/xbean-server-2.4.jar
+org.apache.xbean/jars/xbean-spring-2.3.jar
+org.apache.xbean/jars/xbean-spring-2.4.jar
+org.apache.xbean/jars/xbean-spring-common-2.4.jar
+org.apache.xbean/jars/xbean-tiger-2.4.jar
+org.apache.xbean/jars/xbean-spring-itests-124-2.4.jar
+org.apache.xbean/jars/xbean-spring-itests-125-2.4.jar
+org.apache.xbean/jars/xbean-spring-itests-126-2.4.jar
+org.apache.xbean/jars/xbean-spring-itests-127-2.4.jar
+org.apache.xbean/jars/xbean-spring-itests-128-2.4.jar
+org.apache.xbean/jars/xbean-spring-itests-20m5-2.4.jar
+org.apache.xbean/jars/xbean-spring-itests-core-2.4.jar
+org.apache.xbean/jars/xbean-spring-v1-2.4.jar
+org.apache.xbean/jars/xbean-spring-v2-2.4.jar
+org.apache.xbean/jars/xbean-telnet-2.3.jar
+org.apache.xbean/jars/xbean-telnet-2.4.jar
+org.apache.xbean/jars/xbean-tiger-2.3.jar
+org.apache.xbean/maven-plugins/maven-xbean-plugin-2.3.jar
+org.apache.xbean/poms/xbean-2.3.pom
+org.apache.xbean/poms/maven-metadata-mavenOneRepository.xml
+org.apache.xbean/poms/maven-metadata.xml
+org.apache.xbean/poms/maven-xbean-plugin-2.3.pom
+org.apache.xbean/poms/xbean-classpath-2.3.pom
+org.apache.xbean/poms/xbean-kernel-2.3.pom
+org.apache.xbean/poms/xbean-osgi-2.3.pom
+org.apache.xbean/poms/xbean-reflect-2.3.pom
+org.apache.xbean/poms/xbean-server-2.3.pom
+org.apache.xbean/poms/xbean-spring-2.3.pom
+org.apache.xbean/poms/xbean-telnet-2.3.pom
+org.apache.xbean/poms/xbean-tiger-2.3.pom
+org.apache.xbean/KEYS
+oro/jars/oro-2.0.6.jar
+oro/jars/oro-2.0.7.jar
+oro/jars/oro-2.0.8.jar
+pluto-container/jars/pluto-0.46.jar
+poi/jars/poi-1.8.0-dev-20020919.jar
+poi/jars/poi-2.0-final-20040126.jar
+poi/jars/poi-2.5-final-20040302.jar
+poi/jars/poi-2.5.1-final-20040804.jar
+poi/jars/poi-3.0-alpha2-sources.jar
+poi/jars/poi-3.0-alpha3-sources.jar
+poi/jars/poi-3.0-alpha2.jar
+poi/jars/poi-contrib-2.0-final-20040126.jar
+poi/jars/poi-contrib-2.5-final-20040302.jar
+poi/jars/poi-contrib-2.5.1-final-20040804.jar
+poi/jars/poi-scratchpad-2.0-final-20040126.jar
+poi/jars/poi-3.0-alpha3.jar
+poi/jars/poi-scratchpad-2.5-final-20040302.jar
+poi/jars/poi-scratchpad-2.5.1-final-20040804.jar
+poi/jars/poi-3.0-FINAL.jar
+poi/jars/poi-3.0-FINAL-sources.jar
+poi/poms/poi-1.8.0-dev-20020919.pom
+poi/poms/poi-2.0-final-20040126.pom
+poi/poms/poi-2.5-final-20040302.pom
+poi/poms/poi-2.5.1-final-20040804.pom
+poi/poms/poi-3.0-alpha2.pom
+poi/poms/poi-3.0-alpha3.pom
+poi/poms/poi-contrib-2.0-final-20040126.pom
+poi/poms/poi-contrib-2.5-final-20040302.pom
+poi/poms/poi-contrib-2.5.1-final-20040804.pom
+poi/poms/poi-scratchpad-2.0-final-20040126.pom
+poi/poms/poi-scratchpad-2.5-final-20040302.pom
+poi/poms/poi-scratchpad-2.5.1-final-20040804.pom
+poi/poms/poi-3.0-FINAL.pom
+poi/poms/poi-3.0-FINAL.pom.bak
+poi/poms/poi-3.0.1-FINAL.pom
+poi/poms/poi-scratchpad-3.0.1-FINAL.pom
+poi/poms/poi-contrib-3.0.1-FINAL.pom
+pubscribe/jars/submgr-xbeans-1.0.jar
+pubscribe/jars/pubscribe-1.0.jar
+pubscribe/jars/pubscribe-1.1.jar
+pubscribe/jars/submgr-xbeans-src-1.0.jar
+pubscribe/jars/wse-xbeans-1.0.jar
+pubscribe/jars/wse-xbeans-src-1.0.jar
+pubscribe/jars/wsn-xbeans-1.0.jar
+pubscribe/jars/wsn-xbeans-src-1.0.jar
+sandesha/Sandesha-1.0-RC1.jar
+servletapi/jars/servlet-api-2.4-20040521.jar
+servletapi/jars/jsp-api-2.4-20040521.jar
+slide/jars/catalinawrapper-2.1M1.jar
+slide/jars/ant-webdav-2.1M1.jar
+slide/jars/catalinawrapper-2.0.jar
+slide/jars/jdk14logger-2.0.jar
+slide/jars/jaas-2.1M1.jar
+slide/jars/jdk14logger-2.1M1.jar
+slide/jars/kernel-2.0.jar
+slide/jars/kernel-2.1M1.jar
+slide/jars/log4jlogger-2.0.jar
+slide/jars/log4jlogger-2.1M1.jar
+slide/jars/roles-2.0.jar
+slide/jars/roles-2.1M1.jar
+slide/jars/slide-kernel-2.1.jar
+slide/jars/stores-2.1M1.jar
+slide/jars/stores-2.0.jar
+slide/jars/slide-stores-2.1.jar
+slide/jars/slide-webdavlib-2.1.jar
+slide/jars/slide-webdavservlet-2.1.jar
+slide/jars/webdavlib-2.0beta1.jar
+slide/jars/webdavlib-2.0.jar
+slide/jars/webdavlib-2.1M1.jar
+slide/jars/webdavlib-2.2-20050624.203112.jar
+slide/jars/webdavservlet-2.0.jar
+slide/jars/webdavservlet-2.1M1.jar
+slide/jars/webdavservlet-2.2-20050624.203112.jar
+stratum/distributions/stratum-1.0-src.tar.gz
+stratum/distributions/stratum-1.0-src.zip
+stratum/distributions/stratum-1.0.tar.gz
+stratum/distributions/stratum-1.0.zip
+stratum/jars/stratum-1.0-b5.jar
+stratum/jars/stratum-1.0.jar
+stratum/poms/stratum-1.0-b5.pom
+stratum/poms/stratum-1.0.pom
+struts/jars/struts-1.0.2.jar
+struts/jars/struts-1.1-b2-20021124.jar
+struts/jars/struts-1.1-b3.jar
+struts/jars/struts-1.1-beta-2.jar
+struts/jars/struts-1.1-rc2.jar
+struts/jars/struts-1.1.jar
+struts/jars/struts-1.2.2.jar
+struts/jars/struts-1.2.4.jar
+struts/jars/struts-1.2.7.jar
+struts/jars/struts-1.2.8.jar
+struts/jars/struts-1.2.9.jar
+struts/jars/struts-el-1.1.jar
+struts/jars/struts-el-1.2.4.jar
+struts/jars/struts-el-1.2.7.jar
+struts/jars/struts-el-1.2.8.jar
+struts/jars/struts-el-1.2.9.jar
+struts/jars/struts-legacy-1.1.jar
+struts/jars/struts-scripting-1.0.1.jar
+struts/poms/struts-1.2.4.pom
+struts/poms/struts-1.2.7.pom
+struts/poms/struts-1.2.8-el.pom
+struts/poms/struts-1.2.8.pom
+struts/poms/struts-1.2.9.pom
+struts/poms/struts-el-1.2.6.pom
+struts/poms/struts-scripting-1.0.1.pom
+struts/poms/struts-el-1.2.9.pom
+struts/tlds/struts-bean-1.1-rc1.tld
+struts/tlds/struts-bean-1.1-rc2.tld
+struts/tlds/struts-bean-1.2.2.tld
+struts/tlds/struts-bean-1.2.4.tld
+struts/tlds/struts-bean-1.2.7.tld
+struts/tlds/struts-bean-1.2.8.tld
+struts/tlds/struts-bean-el-1.2.2.tld
+struts/tlds/struts-bean-el-1.2.4.tld
+struts/tlds/struts-bean-el-1.2.7.tld
+struts/tlds/struts-bean-el-1.2.8.tld
+struts/tlds/struts-html-1.1-rc1.tld
+struts/tlds/struts-html-1.1-rc2.tld
+struts/tlds/struts-html-1.2.2.tld
+struts/tlds/struts-html-1.2.4.tld
+struts/tlds/struts-html-1.2.7.tld
+struts/tlds/struts-html-1.2.8.tld
+struts/tlds/struts-html-el-1.2.2.tld
+struts/tlds/struts-html-el-1.2.4.tld
+struts/tlds/struts-html-el-1.2.7.tld
+struts/tlds/struts-html-el-1.2.8.tld
+struts/tlds/struts-logic-1.1-rc1.tld
+struts/tlds/struts-logic-1.1-rc2.tld
+struts/tlds/struts-logic-1.2.2.tld
+struts/tlds/struts-logic-1.2.4.tld
+struts/tlds/struts-logic-1.2.7.tld
+struts/tlds/struts-logic-1.2.8.tld
+struts/tlds/struts-logic-el-1.2.2.tld
+struts/tlds/struts-logic-el-1.2.4.tld
+struts/tlds/struts-logic-el-1.2.7.tld
+struts/tlds/struts-logic-el-1.2.8.tld
+struts/tlds/struts-nested-1.1-rc1.tld
+struts/tlds/struts-nested-1.1-rc2.tld
+struts/tlds/struts-nested-1.2.2.tld
+struts/tlds/struts-nested-1.2.4.tld
+struts/tlds/struts-nested-1.2.7.tld
+struts/tlds/struts-nested-1.2.8.tld
+struts/tlds/struts-template-1.1-rc1.tld
+struts/tlds/struts-tiles-1.1-rc1.tld
+struts/tlds/struts-tiles-1.1-rc2.tld
+struts/tlds/struts-tiles-1.2.2.tld
+struts/tlds/struts-tiles-1.2.4.tld
+struts/tlds/struts-tiles-1.2.7.tld
+struts/tlds/struts-tiles-1.2.8.tld
+struts/tlds/struts-tiles-el-1.2.2.tld
+struts/tlds/struts-tiles-el-1.2.4.tld
+struts/tlds/struts-tiles-el-1.2.7.tld
+struts/tlds/struts-tiles-el-1.2.8.tld
+taglibs/jars/application-1.0.1.jar
+taglibs/jars/benchmark-1.0.jar
+taglibs/jars/datetime-1.0.1.jar
+taglibs/jars/dbtags-1.0.0.jar
+taglibs/jars/log-1.0.jar
+taglibs/jars/mailer-1.1.jar
+taglibs/jars/page-1.0.1.jar
+taglibs/jars/random-1.0.1.jar
+taglibs/jars/random-1.0.2.jar
+taglibs/jars/regexp-1.0.1.jar
+taglibs/jars/request-1.0.1.jar
+taglibs/jars/response-1.0.1.jar
+taglibs/jars/session-1.0.1.jar
+taglibs/jars/standard-1.0.1.jar
+taglibs/jars/standard-1.0.2.jar
+taglibs/jars/standard-1.0.3.jar
+taglibs/jars/standard-1.0.4.jar
+taglibs/jars/standard-1.0.5.jar
+taglibs/jars/standard-1.0.6.jar
+taglibs/jars/standard-1.0.jar
+taglibs/jars/standard-1.1.0.jar
+taglibs/jars/standard-1.1.1.jar
+taglibs/jars/string-1.0.jar
+taglibs/jars/standard-1.1.2.jar
+taglibs/jars/string-1.0.1.jar
+taglibs/jars/string-1.1.0.jar
+taglibs/jars/xsl-1.0.1.jar
+taglibs/tlds/permittedTaglibs-1.1.0.tld
+taglibs/tlds/application-1.0.1.tld
+taglibs/tlds/benchmark-1.0.tld
+taglibs/tlds/c-1.0.1.tld
+taglibs/tlds/c-1.0.2.tld
+taglibs/tlds/c-1.0.3.tld
+taglibs/tlds/c-1.0.4.tld
+taglibs/tlds/c-1.0.5.tld
+taglibs/tlds/c-1.0.6.tld
+taglibs/tlds/c-1.0.tld
+taglibs/tlds/c-1.1.0.tld
+taglibs/tlds/c-1.1.1.tld
+taglibs/tlds/c-1.1.2.tld
+taglibs/tlds/c-rt-1.0.1.tld
+taglibs/tlds/c-rt-1.0.2.tld
+taglibs/tlds/c-rt-1.0.3.tld
+taglibs/tlds/c-rt-1.0.4.tld
+taglibs/tlds/c-rt-1.0.5.tld
+taglibs/tlds/c-rt-1.0.6.tld
+taglibs/tlds/c-rt-1.0.tld
+taglibs/tlds/fmt-1.0.tld
+taglibs/tlds/datetime-1.0.1.tld
+taglibs/tlds/dbtags-1.0.0.tld
+taglibs/tlds/fmt-1.0.1.tld
+taglibs/tlds/fmt-1.0.2.tld
+taglibs/tlds/fmt-1.0.3.tld
+taglibs/tlds/fmt-1.0.4.tld
+taglibs/tlds/fmt-1.0.5.tld
+taglibs/tlds/fmt-1.0.6.tld
+taglibs/tlds/fmt-1.1.0.tld
+taglibs/tlds/fmt-1.1.1.tld
+taglibs/tlds/fmt-1.1.2.tld
+taglibs/tlds/fmt-rt-1.0.1.tld
+taglibs/tlds/fmt-rt-1.0.2.tld
+taglibs/tlds/fmt-rt-1.0.3.tld
+taglibs/tlds/fmt-rt-1.0.4.tld
+taglibs/tlds/fmt-rt-1.0.5.tld
+taglibs/tlds/fmt-rt-1.0.6.tld
+taglibs/tlds/fmt-rt-1.0.tld
+taglibs/tlds/fn-1.1.0.tld
+taglibs/tlds/fn-1.1.1.tld
+taglibs/tlds/log-1.0.tld
+taglibs/tlds/mailer-1.1.tld
+taglibs/tlds/page-1.0.1.tld
+taglibs/tlds/sql-rt-1.0.1.tld
+taglibs/tlds/permittedTaglibs-1.1.1.tld
+taglibs/tlds/random-1.0.1.tld
+taglibs/tlds/random-1.0.2.tld
+taglibs/tlds/regexp-1.0.1.tld
+taglibs/tlds/request-1.0.1.tld
+taglibs/tlds/response-1.0.1.tld
+taglibs/tlds/scriptfree-1.1.0.tld
+taglibs/tlds/scriptfree-1.1.1.tld
+taglibs/tlds/session-1.0.1.tld
+taglibs/tlds/sql-1.0.1.tld
+taglibs/tlds/sql-1.0.2.tld
+taglibs/tlds/sql-1.0.3.tld
+taglibs/tlds/sql-1.0.4.tld
+taglibs/tlds/sql-1.0.5.tld
+taglibs/tlds/sql-1.0.6.tld
+taglibs/tlds/sql-1.0.tld
+taglibs/tlds/sql-1.1.0.tld
+taglibs/tlds/sql-1.1.1.tld
+taglibs/tlds/sql-1.1.2.tld
+taglibs/tlds/sql-rt-1.0.2.tld
+taglibs/tlds/sql-rt-1.0.3.tld
+taglibs/tlds/sql-rt-1.0.4.tld
+taglibs/tlds/sql-rt-1.0.5.tld
+taglibs/tlds/sql-rt-1.0.6.tld
+taglibs/tlds/sql-rt-1.0.tld
+taglibs/tlds/string-1.0.1.tld
+taglibs/tlds/string-1.0.tld
+taglibs/tlds/string-1.1.0.tld
+taglibs/tlds/x-1.0.1.tld
+taglibs/tlds/x-1.0.2.tld
+taglibs/tlds/x-1.0.3.tld
+taglibs/tlds/x-1.0.4.tld
+taglibs/tlds/x-1.0.5.tld
+taglibs/tlds/x-1.0.6.tld
+taglibs/tlds/x-1.0.tld
+taglibs/tlds/x-1.1.0.tld
+taglibs/tlds/x-1.1.1.tld
+taglibs/tlds/x-1.1.2.tld
+taglibs/tlds/x-rt-1.0.1.tld
+taglibs/tlds/x-rt-1.0.2.tld
+taglibs/tlds/x-rt-1.0.3.tld
+taglibs/tlds/x-rt-1.0.4.tld
+taglibs/tlds/x-rt-1.0.5.tld
+taglibs/tlds/x-rt-1.0.6.tld
+taglibs/tlds/x-rt-1.0.tld
+taglibs/tlds/xsl-1.0.1.tld
+taglibs/wars/application-examples-1.0.1.war
+taglibs/wars/application-doc-1.0.1.war
+taglibs/wars/benchmark-examples-1.0.war
+taglibs/wars/benchmark-doc-1.0.war
+taglibs/wars/datetime-examples-1.0.1.war
+taglibs/wars/datetime-doc-1.0.1.war
+taglibs/wars/dbtags-examples-1.0.0.war
+taglibs/wars/dbtags-doc-1.0.0.war
+taglibs/wars/log-examples-1.0.war
+taglibs/wars/log-doc-1.0.war
+taglibs/wars/mailer-examples-1.1.war
+taglibs/wars/mailer-doc-1.1.war
+taglibs/wars/page-doc-1.0.1.war
+taglibs/wars/page-examples-1.0.1.war
+taglibs/wars/random-doc-1.0.1.war
+taglibs/wars/random-doc-1.0.2.war
+taglibs/wars/random-examples-1.0.1.war
+taglibs/wars/random-examples-1.0.2.war
+taglibs/wars/regexp-doc-1.0.1.war
+taglibs/wars/regexp-examples-1.0.1.war
+taglibs/wars/request-doc-1.0.1.war
+taglibs/wars/request-examples-1.0.1.war
+taglibs/wars/response-doc-1.0.1.war
+taglibs/wars/response-examples-1.0.1.war
+taglibs/wars/session-doc-1.0.1.war
+taglibs/wars/session-examples-1.0.1.war
+taglibs/wars/standard-doc-1.0.1.war
+taglibs/wars/standard-doc-1.0.3.war
+taglibs/wars/standard-doc-1.0.4.war
+taglibs/wars/standard-doc-1.0.5.war
+taglibs/wars/standard-doc-1.0.6.war
+taglibs/wars/standard-doc-1.0.war
+taglibs/wars/standard-doc-1.1.0.war
+taglibs/wars/standard-doc-1.1.1.war
+taglibs/wars/standard-doc-1.1.2.war
+taglibs/wars/standard-examples-1.0.1.war
+taglibs/wars/standard-examples-1.0.3.war
+taglibs/wars/standard-examples-1.0.4.war
+taglibs/wars/standard-examples-1.0.5.war
+taglibs/wars/standard-examples-1.0.6.war
+taglibs/wars/standard-examples-1.0.war
+taglibs/wars/standard-examples-1.1.0.war
+taglibs/wars/standard-examples-1.1.1.war
+taglibs/wars/standard-examples-1.1.2.war
+taglibs/wars/string-doc-1.0.1.war
+taglibs/wars/string-doc-1.0.war
+taglibs/wars/string-doc-1.1.0.war
+taglibs/wars/string-examples-1.0.1.war
+taglibs/wars/string-examples-1.0.war
+taglibs/wars/string-examples-1.1.0.war
+taglibs/wars/xsl-doc-1.0.1.war
+taglibs/wars/xsl-examples-1.0.1.war
+tapestry/jars/net.sf.tapestry-2.2.jar
+tapestry/jars/net.sf.tapestry.contrib-2.2.jar
+tapestry/jars/tapestry-3.0-beta-1a.jar
+tapestry/jars/tapestry-3.0-beta-2.jar
+tapestry/jars/tapestry-3.0.1.jar
+tapestry/jars/tapestry-3.0.2.jar
+tapestry/jars/tapestry-3.0.3.jar
+tapestry/jars/tapestry-3.0.jar
+tapestry/jars/tapestry-3.1-alpha-1.jar
+tapestry/jars/tapestry-4.0-alpha-2.jar
+tapestry/jars/tapestry-4.0-alpha-3.jar
+tapestry/jars/tapestry-4.0-alpha-4-snapshot.jar
+tapestry/jars/tapestry-4.0-beta-1.jar
+tapestry/jars/tapestry-4.0-beta-5.jar
+tapestry/jars/tapestry-4.0-beta-10.jar
+tapestry/jars/tapestry-4.0-beta-11.jar
+tapestry/jars/tapestry-4.0-beta-12.jar
+tapestry/jars/tapestry-4.0-beta-13.jar
+tapestry/jars/tapestry-4.0-beta-2.jar
+tapestry/jars/tapestry-4.0-beta-3.jar
+tapestry/jars/tapestry-4.0-beta-4.jar
+tapestry/jars/tapestry-4.0-beta-6.jar
+tapestry/jars/tapestry-4.0-beta-7.jar
+tapestry/jars/tapestry-4.0-beta-8.jar
+tapestry/jars/tapestry-4.0-beta-9.jar
+tapestry/jars/tapestry-4.0-rc-1.jar
+tapestry/jars/tapestry-4.0.1.jar
+tapestry/jars/tapestry-4.0-rc-2.jar
+tapestry/jars/tapestry-annotations-4.0.1.jar
+tapestry/jars/tapestry-4.0-rc-3.jar
+tapestry/jars/tapestry-4.0.2.jar
+tapestry/jars/tapestry-4.0.jar
+tapestry/jars/tapestry-annotations-4.0-alpha-4-snapshot.jar
+tapestry/jars/tapestry-annotations-4.0-beta-1.jar
+tapestry/jars/tapestry-annotations-4.0-beta-7.jar
+tapestry/jars/tapestry-annotations-4.0-beta-10.jar
+tapestry/jars/tapestry-annotations-4.0-beta-11.jar
+tapestry/jars/tapestry-annotations-4.0-beta-12.jar
+tapestry/jars/tapestry-annotations-4.0-beta-13.jar
+tapestry/jars/tapestry-annotations-4.0-beta-2.jar
+tapestry/jars/tapestry-annotations-4.0-beta-3.jar
+tapestry/jars/tapestry-annotations-4.0-beta-4.jar
+tapestry/jars/tapestry-annotations-4.0-beta-5.jar
+tapestry/jars/tapestry-annotations-4.0-beta-6.jar
+tapestry/jars/tapestry-annotations-4.0-beta-8.jar
+tapestry/jars/tapestry-annotations-4.0-beta-9.jar
+tapestry/jars/tapestry-annotations-4.0-rc-1.jar
+tapestry/jars/tapestry-annotations-4.0-rc-2.jar
+tapestry/jars/tapestry-annotations-4.0-rc-3.jar
+tapestry/jars/tapestry-annotations-4.0.2.jar
+tapestry/jars/tapestry-annotations-4.0.jar
+tapestry/jars/tapestry-contrib-3.0-beta-2.jar
+tapestry/jars/tapestry-contrib-3.0.1.jar
+tapestry/jars/tapestry-contrib-3.0.2.jar
+tapestry/jars/tapestry-contrib-3.0.3.jar
+tapestry/jars/tapestry-contrib-3.0.jar
+tapestry/jars/tapestry-contrib-3.1-alpha-1.jar
+tapestry/jars/tapestry-contrib-4.0-alpha-2.jar
+tapestry/jars/tapestry-contrib-4.0-alpha-4-snapshot.jar
+tapestry/jars/tapestry-contrib-4.0-alpha-3.jar
+tapestry/jars/tapestry-contrib-4.0-beta-1.jar
+tapestry/jars/tapestry-contrib-4.0-beta-10.jar
+tapestry/jars/tapestry-contrib-4.0-beta-11.jar
+tapestry/jars/tapestry-contrib-4.0-beta-12.jar
+tapestry/jars/tapestry-contrib-4.0-beta-13.jar
+tapestry/jars/tapestry-contrib-4.0-beta-2.jar
+tapestry/jars/tapestry-contrib-4.0-beta-3.jar
+tapestry/jars/tapestry-contrib-4.0-beta-4.jar
+tapestry/jars/tapestry-contrib-4.0-beta-5.jar
+tapestry/jars/tapestry-contrib-4.0-rc-2.jar
+tapestry/jars/tapestry-contrib-4.0-beta-6.jar
+tapestry/jars/tapestry-contrib-4.0-beta-7.jar
+tapestry/jars/tapestry-contrib-4.0-beta-8.jar
+tapestry/jars/tapestry-contrib-4.0-beta-9.jar
+tapestry/jars/tapestry-contrib-4.0-rc-1.jar
+tapestry/jars/tapestry-contrib-4.0-rc-3.jar
+tapestry/jars/tapestry-contrib-4.0.1.jar
+tapestry/jars/tapestry-contrib-4.0.2.jar
+tapestry/jars/tapestry-contrib-4.0.jar
+tapestry/jars/tapestry-portlet-4.0.1.jar
+tapestry/jars/tapestry-portlet-4.0-alpha-2.jar
+tapestry/jars/tapestry-portlet-4.0-alpha-3.jar
+tapestry/jars/tapestry-portlet-4.0-alpha-4-snapshot.jar
+tapestry/jars/tapestry-portlet-4.0-beta-1.jar
+tapestry/jars/tapestry-portlet-4.0-beta-10.jar
+tapestry/jars/tapestry-portlet-4.0-beta-11.jar
+tapestry/jars/tapestry-portlet-4.0-beta-12.jar
+tapestry/jars/tapestry-portlet-4.0-beta-13.jar
+tapestry/jars/tapestry-portlet-4.0-beta-2.jar
+tapestry/jars/tapestry-portlet-4.0-beta-3.jar
+tapestry/jars/tapestry-portlet-4.0-beta-4.jar
+tapestry/jars/tapestry-portlet-4.0-beta-5.jar
+tapestry/jars/tapestry-portlet-4.0-beta-6.jar
+tapestry/jars/tapestry-portlet-4.0-beta-7.jar
+tapestry/jars/tapestry-portlet-4.0-beta-8.jar
+tapestry/jars/tapestry-portlet-4.0-beta-9.jar
+tapestry/jars/tapestry-portlet-4.0-rc-1.jar
+tapestry/jars/tapestry-portlet-4.0-rc-2.jar
+tapestry/jars/tapestry-portlet-4.0-rc-3.jar
+tapestry/jars/tapestry-portlet-4.0.2.jar
+tapestry/jars/tapestry-portlet-4.0.jar
+tapestry/jars/vlibbeans-4.0-beta-4.jar
+tapestry/jars/vlibbeans-4.0-beta-5.jar
+tapestry/poms/tapestry-4.0-beta-8.pom
+tapestry/poms/tapestry-4.0.1.pom
+tapestry/poms/tapestry-annotations-4.0.1.pom
+tapestry/poms/tapestry-4.0.2.pom
+tapestry/poms/tapestry-annotations-4.0.2.pom
+tapestry/poms/tapestry-contrib-4.0.1.pom
+tapestry/poms/tapestry-contrib-4.0.2.pom
+tapestry/poms/tapestry-portlet-4.0.1.pom
+tapestry/poms/tapestry-portlet-4.0.2.pom
+tapestry/tlds/tapestry-3.0.1.tld
+tomcat/jars/bootstrap-4.0.6.jar
+tomcat/jars/bootstrap-5.0.28.jar
+tomcat/jars/bootstrap-5.5.12.jar
+tomcat/jars/catalina-5.5.15.jar
+tomcat/jars/catalina-4.0.4.jar
+tomcat/jars/catalina-4.0.6.jar
+tomcat/jars/catalina-5.0.28.jar
+tomcat/jars/catalina-5.5.12.jar
+tomcat/jars/catalina-admin-5.0.28.jar
+tomcat/jars/catalina-ant-5.0.28.jar
+tomcat/jars/catalina-ant-5.5.12.jar
+tomcat/jars/catalina-ant-5.5.15.jar
+tomcat/jars/catalina-ant-jmx-5.5.12.jar
+tomcat/jars/catalina-balancer-5.0.28.jar
+tomcat/jars/catalina-balancer-5.5.12.jar
+tomcat/jars/catalina-cluster-5.0.28.jar
+tomcat/jars/catalina-cluster-5.5.12.jar
+tomcat/jars/catalina-cluster-5.5.15.jar
+tomcat/jars/catalina-host-manager-5.5.12.jar
+tomcat/jars/warp-4.0.6.jar
+tomcat/jars/catalina-i18n-es-5.0.28.jar
+tomcat/jars/catalina-i18n-fr-5.0.28.jar
+tomcat/jars/catalina-i18n-ja-5.0.28.jar
+tomcat/jars/catalina-manager-5.0.28.jar
+tomcat/jars/catalina-manager-5.5.12.jar
+tomcat/jars/catalina-optional-5.0.28.jar
+tomcat/jars/catalina-optional-5.5.12.jar
+tomcat/jars/catalina-optional-5.5.15.jar
+tomcat/jars/catalina-root-5.0.28.jar
+tomcat/jars/catalina-root-5.5.12.jar
+tomcat/jars/catalina-storeconfig-5.5.12.jar
+tomcat/jars/catalina-storeconfig-5.5.15.jar
+tomcat/jars/commons-logging-4.0.6.jar
+tomcat/jars/container_util-3.3.2.jar
+tomcat/jars/core_util-3.3.2.jar
+tomcat/jars/etomcat-3.3.2.jar
+tomcat/jars/jasper-compiler-4.0.4.jar
+tomcat/jars/facade22-3.3.2.jar
+tomcat/jars/jasper-3.2.4.jar
+tomcat/jars/jasper-3.3.2.jar
+tomcat/jars/jasper-compiler-4.0.6.jar
+tomcat/jars/jasper-compiler-5.0.28.jar
+tomcat/jars/jasper-compiler-5.5.12.jar
+tomcat/jars/jasper-compiler-5.5.15.jar
+tomcat/jars/jasper-compiler-jdt-5.5.12.jar
+tomcat/jars/jasper-compiler-jdt-5.5.15.jar
+tomcat/jars/jasper-runtime-3.3.2.jar
+tomcat/jars/jasper-runtime-4.0.4.jar
+tomcat/jars/jasper-runtime-5.5.15.jar
+tomcat/jars/jkconfig-5.0.28.jar
+tomcat/jars/jasper-runtime-4.0.6.jar
+tomcat/jars/jasper-runtime-5.0.28.jar
+tomcat/jars/jasper-runtime-5.5.12.jar
+tomcat/jars/jkshm-5.0.28.jar
+tomcat/jars/jsp-api-5.5.12.jar
+tomcat/jars/jsp-api-5.5.15.jar
+tomcat/jars/naming-common-4.0.6.jar
+tomcat/jars/naming-common-5.0.28.jar
+tomcat/jars/naming-factory-4.0.6.jar
+tomcat/jars/naming-factory-5.0.28.jar
+tomcat/jars/naming-factory-5.5.12.jar
+tomcat/jars/naming-factory-5.5.15.jar
+tomcat/jars/naming-factory-dbcp-5.5.12.jar
+tomcat/jars/naming-factory-dbcp-5.5.15.jar
+tomcat/jars/naming-java-5.0.28.jar
+tomcat/jars/naming-resources-4.0.6.jar
+tomcat/jars/servlet-4.0.6.jar
+tomcat/jars/naming-resources-5.0.28.jar
+tomcat/jars/naming-resources-5.5.12.jar
+tomcat/jars/naming-resources-5.5.15.jar
+tomcat/jars/servlet-api-5.5.12.jar
+tomcat/jars/servlet-api-5.5.15.jar
+tomcat/jars/servlets-common-4.0.6.jar
+tomcat/jars/servlets-common-5.0.28.jar
+tomcat/jars/servlets-default-4.0.6.jar
+tomcat/jars/servlets-default-5.0.28.jar
+tomcat/jars/servlets-default-5.5.12.jar
+tomcat/jars/servlets-default-5.5.15.jar
+tomcat/jars/servlets-invoker-4.0.6.jar
+tomcat/jars/servlets-invoker-5.0.28.jar
+tomcat/jars/servlets-invoker-5.5.12.jar
+tomcat/jars/servlets-invoker-5.5.15.jar
+tomcat/jars/servlets-manager-4.0.6.jar
+tomcat/jars/servlets-webdav-4.0.6.jar
+tomcat/jars/servlets-webdav-5.0.28.jar
+tomcat/jars/servlets-webdav-5.5.12.jar
+tomcat/jars/servlets-webdav-5.5.15.jar
+tomcat/jars/stop-tomcat-3.3.2.jar
+tomcat/jars/tomcat-3.2.3.jar
+tomcat/jars/tomcat-3.3.2.jar
+tomcat/jars/tomcat-ajp-4.0.6.jar
+tomcat/jars/tomcat-ajp-5.5.12.jar
+tomcat/jars/tomcat-ajp-5.5.15.jar
+tomcat/jars/tomcat-ant-3.3.2.jar
+tomcat/jars/tomcat-apr-5.5.12.jar
+tomcat/jars/tomcat-apr-5.5.15.jar
+tomcat/jars/tomcat-coyote-3.3.2.jar
+tomcat/jars/tomcat-coyote-4.0.4.jar
+tomcat/jars/tomcat-coyote-4.0.6.jar
+tomcat/jars/tomcat-coyote-5.0.28.jar
+tomcat/jars/tomcat-coyote-5.5.12.jar
+tomcat/jars/tomcat-coyote-5.5.15.jar
+tomcat/jars/tomcat-http-5.5.12.jar
+tomcat/jars/tomcat-http-5.5.15.jar
+tomcat/jars/tomcat-http11-3.3.2.jar
+tomcat/jars/tomcat-http11-4.0.6.jar
+tomcat/jars/tomcat-http11-5.0.28.jar
+tomcat/jars/tomcat-i18n-en-5.5.12.jar
+tomcat/jars/tomcat-i18n-es-5.5.12.jar
+tomcat/jars/tomcat-i18n-fr-5.5.12.jar
+tomcat/jars/tomcat-i18n-ja-5.5.12.jar
+tomcat/jars/tomcat-jk-5.0.28.jar
+tomcat/jars/tomcat-jk2-3.3.2.jar
+tomcat/jars/tomcat-jk2-5.0.28.jar
+tomcat/jars/tomcat-jni-5.0.28.jar
+tomcat/jars/tomcat-juli-5.5.12.jar
+tomcat/jars/tomcat-naming-1.0.jar
+tomcat/jars/tomcat-util-3.3.2.jar
+tomcat/jars/tomcat-util-4.0.6.jar
+tomcat/jars/tomcat-util-5.0.28.jar
+tomcat/jars/tomcat-util-5.5.12.jar
+tomcat/jars/tomcat-util-5.5.15.jar
+tomcat/jars/tomcat33-coyote-3.3.2.jar
+tomcat/jars/tomcat33-resource-3.3.2.jar
+tomcat/jars/bootstrap-4.1.36.jar
+tomcat/jars/tomcat_core-3.3.2.jar
+tomcat/jars/tomcat_modules-3.3.2.jar
+tomcat/jars/webserver-3.2.4.jar
+tomcat/jars/catalina-4.1.36.jar
+tomcat/jars/catalina-ant-4.1.36.jar
+tomcat/jars/jasper-compiler-4.1.36.jar
+tomcat/jars/jasper-runtime-4.1.36.jar
+tomcat/jars/naming-common-4.1.36.jar
+tomcat/jars/naming-factory-4.1.36.jar
+tomcat/jars/naming-resources-4.1.36.jar
+tomcat/jars/servlet-4.1.36.jar
+tomcat/jars/servlets-cgi-4.1.36.jar
+tomcat/jars/servlets-common-4.1.36.jar
+tomcat/jars/servlets-default-4.1.36.jar
+tomcat/jars/servlets-invoker-4.1.36.jar
+tomcat/jars/servlets-manager-4.1.36.jar
+tomcat/jars/servlets-ssi-4.1.36.jar
+tomcat/jars/servlets-webdav-4.1.36.jar
+tomcat/jars/tomcat4-coyote-4.1.36.jar
+tomcat/jars/tomcat-coyote-4.1.36.jar
+tomcat/jars/tomcat-http11-4.1.36.jar
+tomcat/jars/tomcat-jk2-4.1.36.jar
+tomcat/jars/tomcat-jk-4.1.36.jar
+tomcat/jars/tomcat-jni-4.1.36.jar
+tomcat/jars/tomcat-util-4.1.36.jar
+tomcat/poms/catalina-5.5.15.pom
+tomcat/poms/catalina-ant-5.5.15.pom
+tomcat/poms/catalina-cluster-5.5.15.pom
+tomcat/poms/catalina-optional-5.5.15.pom
+tomcat/poms/catalina-storeconfig-5.5.15.pom
+tomcat/poms/jasper-compiler-5.5.15.pom
+tomcat/poms/jasper-compiler-jdt-5.5.15.pom
+tomcat/poms/jasper-runtime-5.5.15.pom
+tomcat/poms/jsp-api-5.5.15.pom
+tomcat/poms/naming-factory-5.5.15.pom
+tomcat/poms/naming-factory-dbcp-5.5.15.pom
+tomcat/poms/naming-resources-5.5.15.pom
+tomcat/poms/servlet-api-5.5.15.pom
+tomcat/poms/servlets-default-5.5.15.pom
+tomcat/poms/servlets-invoker-5.5.15.pom
+tomcat/poms/servlets-webdav-5.5.15.pom
+tomcat/poms/tomcat-ajp-5.5.15.pom
+tomcat/poms/tomcat-apr-5.5.15.pom
+tomcat/poms/tomcat-coyote-5.5.15.pom
+tomcat/poms/tomcat-http-5.5.15.pom
+tomcat/poms/tomcat-parent-5.5.15.pom
+tomcat/poms/tomcat-util-5.5.15.pom
+tomcat/zips/apache-tomcat-5.5.23.zip
+tomcat-util/jars/tomcat-util-dev.20021002.102355.jar
+torque/jars/maven-torque-plugin-3.2-rc1.jar
+torque/jars/torque-20030218.172852.jar
+torque/jars/torque-20030310.174947.jar
+torque/jars/torque-20030327.065722.jar
+torque/jars/torque-3.0-b4.jar
+torque/jars/torque-3.0-b3-dev.20020711.025538.jar
+torque/jars/torque-3.0-b4-dev.20020724.014157.jar
+torque/jars/torque-3.0-b4-dev.20020814.103755.jar
+torque/jars/torque-3.0-rc1.jar
+torque/jars/torque-3.0.1.jar
+torque/jars/torque-3.0.2.jar
+torque/jars/torque-3.1.1.jar
+torque/jars/torque-3.0.jar
+torque/jars/torque-3.1-alpha1.jar
+torque/jars/torque-3.1-alpha2.jar
+torque/jars/torque-3.1-beta1.jar
+torque/jars/torque-3.1-dev.jar
+torque/jars/torque-3.1-rc.jar
+torque/jars/torque-3.1.1-rc1.jar
+torque/jars/torque-3.1.1-rc2.jar
+torque/jars/torque-3.1.1-rc3.jar
+torque/jars/torque-3.1.jar
+torque/jars/torque-3.2-rc1.jar
+torque/jars/torque-gen-3.1-alpha1.jar
+torque/jars/torque-3.2-rc2.jar
+torque/jars/torque-3.2-rc3.jar
+torque/jars/torque-3.2.jar
+torque/jars/torque-gen-20030215.100807.jar
+torque/jars/torque-gen-20030310.175447.jar
+torque/jars/torque-gen-20030327.070220.jar
+torque/jars/torque-gen-3.1-alpha2.jar
+torque/jars/torque-gen-3.1-beta1.jar
+torque/jars/torque-gen-3.1-dev.jar
+torque/jars/torque-gen-3.1-rc.jar
+torque/jars/torque-gen-3.1.1-rc1.jar
+torque/jars/torque-gen-3.1.1-rc2.jar
+torque/jars/torque-gen-3.1.1-rc3.jar
+torque/jars/torque-gen-3.1.1.jar
+torque/jars/torque-gen-3.1.jar
+torque/jars/torque-gen-3.2-rc1.jar
+torque/jars/torque-gen-3.2.jar
+torque/jars/torque-gen-3.2-rc2.jar
+torque/jars/torque-gen-3.2-rc3.jar
+torque/jars/torque-gen-snapshot-version
+torque/jars/torque-gen-templates-3.2-rc1.jar
+torque/jars/torque-gen-templates-3.2-rc2.jar
+torque/jars/torque-gen-templates-3.2-rc3.jar
+torque/jars/torque-gen-templates-3.2.jar
+torque/jars/torque-3.3-RC1.jar
+torque/jars/torque-snapshot-version
+torque/jars/torque-gen-templates-3.3-RC1.jar
+torque/jars/torque-gen-3.3-RC1.jar
+torque/jars/torque-3.3-RC2.jar
+torque/jars/torque-gen-templates-3.3-RC2.jar
+torque/jars/torque-gen-3.3-RC2.jar
+torque/plugins/maven-torque-plugin-3.1.1-dev.jar
+torque/plugins/maven-torque-plugin-3.1.1-rc1.jar
+torque/plugins/maven-torque-plugin-3.1.1-rc2.jar
+torque/plugins/maven-torque-plugin-3.1.1-rc3.jar
+torque/plugins/maven-torque-plugin-3.1.1.jar
+torque/plugins/maven-torque-plugin-3.2-rc1.jar
+torque/plugins/maven-torque-plugin-3.2-rc2.jar
+torque/plugins/maven-torque-plugin-3.2-rc3.jar
+torque/plugins/maven-torque-plugin-3.2.jar
+torque/plugins/maven-torque-plugin-3.3-RC1.jar
+torque/plugins/maven-torque-plugin-3.3-RC2.jar
+torque/poms/maven-torque-plugin-3.1.1-dev.pom
+torque/poms/maven-torque-plugin-3.1.1-rc1.pom
+torque/poms/maven-torque-plugin-3.1.1-rc2.pom
+torque/poms/maven-torque-plugin-3.1.1-rc3.pom
+torque/poms/maven-torque-plugin-3.2-rc1.pom
+torque/poms/maven-torque-plugin-3.2-rc2.pom
+torque/poms/maven-torque-plugin-3.2-rc3.pom
+torque/poms/maven-torque-plugin-3.2.pom
+torque/poms/torque-3.1.1-rc1.pom
+torque/poms/torque-3.1.1-rc2.pom
+torque/poms/torque-3.1.1-rc3.pom
+torque/poms/torque-3.2-rc1.pom
+torque/poms/torque-3.2-rc2.pom
+torque/poms/torque-gen-templates-3.2-rc1.pom
+torque/poms/torque-3.2-rc3.pom
+torque/poms/torque-3.2.pom
+torque/poms/torque-gen-3.1.1-rc1.pom
+torque/poms/torque-gen-3.1.1-rc2.pom
+torque/poms/torque-gen-3.1.1-rc3.pom
+torque/poms/torque-gen-3.2-rc1.pom
+torque/poms/torque-gen-3.2-rc2.pom
+torque/poms/torque-gen-3.2-rc3.pom
+torque/poms/torque-gen-3.2.pom
+torque/poms/torque-3.3-RC1.pom
+torque/poms/torque-gen-templates-3.2-rc2.pom
+torque/poms/maven-torque-plugin-3.3-RC1.pom
+torque/poms/torque-gen-templates-3.2-rc3.pom
+torque/poms/torque-gen-templates-3.2.pom
+torque/poms/torque-gen-templates-3.3-RC1.pom
+torque/poms/torque-gen-3.3-RC1.pom
+torque/poms/torque-3.3-RC2.pom
+torque/poms/torque-gen-templates-3.3-RC2.pom
+torque/poms/torque-gen-3.3-RC2.pom
+torque/poms/maven-torque-plugin-3.3-RC2.pom
+turbine/distributions/maven-turbine-plugin-1.3-src.tar.gz
+turbine/distributions/maven-turbine-plugin-1.3-src.zip
+turbine/distributions/maven-turbine-plugin-1.3.tar.gz
+turbine/distributions/maven-turbine-plugin-1.3.zip
+turbine/distributions/turbine-2.3.2-src.tar.gz
+turbine/distributions/turbine-2.3.2-src.zip
+turbine/distributions/turbine-2.3.2.tar.gz
+turbine/distributions/turbine-2.3.2.zip
+turbine/jars/turbine-2.1.jar
+turbine/jars/turbine-2.2-b1.jar
+turbine/jars/turbine-2.2-b2-dev.jar
+turbine/jars/turbine-2.2-rc1.jar
+turbine/jars/turbine-2.2.jar
+turbine/jars/turbine-2.2b1.jar
+turbine/jars/turbine-2.3-rc1.jar
+turbine/jars/turbine-2.3.1-rc1.jar
+turbine/jars/turbine-2.3.1-rc2.jar
+turbine/jars/turbine-2.3.1.jar
+turbine/jars/turbine-2.3.2.jar
+turbine/jars/turbine-2.3.jar
+turbine/jars/turbine-2.4-M1.jar
+turbine/jars/turbine-3.0-alpha-1.20020912.045138.jar
+turbine/jars/turbine-3.0-dev.jar
+turbine/plugins/maven-turbine-plugin-20040825.211642.jar
+turbine/plugins/maven-turbine-plugin-1.2-rc1.jar
+turbine/plugins/maven-turbine-plugin-1.2.jar
+turbine/plugins/maven-turbine-plugin-1.3.jar
+turbine/plugins/maven-turbine-plugin-20040825.214656.jar
+turbine/plugins/maven-turbine-plugin-snapshot-version
+turbine/poms/maven-turbine-plugin-20040825.211642.pom
+turbine/poms/maven-turbine-plugin-1.2-rc1.pom
+turbine/poms/maven-turbine-plugin-1.3.pom
+turbine/poms/maven-turbine-plugin-20040825.214656.pom
+turbine/poms/maven-turbine-plugin-snapshot-version
+turbine/poms/turbine-2.3.1-rc1.pom
+turbine/poms/turbine-2.3.1-rc2.pom
+turbine/poms/turbine-2.3.2.pom
+velocity/jars/velocity-1.3-dev.jar
+velocity/jars/velocity-1.3.1.jar
+velocity/jars/velocity-1.3.jar
+velocity/jars/velocity-1.4-dev.jar
+velocity/jars/velocity-1.4-rc1.jar
+velocity/jars/velocity-1.4.jar
+velocity/jars/velocity-dep-1.5-beta2.jar
+velocity/jars/velocity-1.5.jar
+velocity/jars/velocity-dep-1.3.1.jar
+velocity/jars/velocity-dep-1.4-rc1.jar
+velocity/jars/velocity-dep-1.4.jar
+velocity/jars/velocity-1.5-beta2.jar
+velocity/jars/anakia-1.0.jar
+velocity/jars/texen-1.0.jar
+velocity/poms/velocity-1.5.pom.bak
+velocity/poms/velocity-1.5.pom.carlos
+velocity/poms/velocity-1.5.pom.md5.bak
+velocity-dvsl/jars/velocity-dvsl-0.31.jar
+velocity-dvsl/jars/velocity-dvsl-0.40.jar
+velocity-dvsl/jars/velocity-dvsl-0.43.20020711.010949.jar
+velocity-dvsl/jars/velocity-dvsl-0.43.20020716.041424.jar
+velocity-dvsl/jars/velocity-dvsl-0.43.jar
+velocity-dvsl/jars/velocity-dvsl-0.43.20020719.020022.jar
+velocity-dvsl/jars/velocity-dvsl-0.45.jar
+velocity-dvsl/jars/velocity-dvsl-0.44.20020719.122919.jar
+velocity-dvsl/jars/velocity-dvsl-0.44.20020720.011619.jar
+velocity-dvsl/jars/velocity-dvsl-0.44.20020720.082908.jar
+velocity-tools/jars/velocity-tools-1.0.jar
+velocity-tools/jars/velocity-tools-1.1.jar
+velocity-tools/jars/velocity-tools-1.2.jar
+velocity-tools/jars/velocity-tools-generic-1.0.jar
+velocity-tools/jars/velocity-tools-generic-1.1.jar
+velocity-tools/jars/velocity-tools-generic-1.2.jar
+velocity-tools/jars/velocity-tools-view-1.0.jar
+velocity-tools/jars/velocity-tools-view-1.1.jar
+velocity-tools/jars/velocity-tools-view-1.2.jar
+velocity-tools/jars/velocity-tools-1.3.jar
+velocity-tools/jars/velocity-tools-generic-1.3.jar
+velocity-tools/jars/velocity-tools-view-1.3.jar
+ws-commons/jars/KEYS
+ws-commons/jars/axiom-api-0.95.jar
+ws-commons/jars/tcpmon-1.0.jar
+ws-commons/jars/sign.sh
+ws-commons/jars/axiom-api-1.0.jar
+ws-commons/jars/axiom-dom-1.0.jar
+ws-commons/jars/axiom-impl-0.95.jar
+ws-commons/jars/axiom-impl-1.0.jar
+ws-commons/jars/neethi-1.0.1.jar
+ws-commons/jars/policy-1.0.jar
+ws-commons/poms/axiom-1.0.pom
+ws-commons/poms/axiom-api-1.0.pom
+ws-commons/poms/axiom-impl-1.0.pom
+ws-commons/poms/neethi-1.0.1.pom
+ws-commons-java5/jars/ws-commons-java5-1.0-sources.jar
+ws-commons-java5/jars/ws-commons-java5-1.0.1-sources.jar
+ws-commons-java5/jars/ws-commons-java5-1.0.1.jar
+ws-commons-java5/jars/ws-commons-java5-1.0.jar
+ws-commons-java5/poms/ws-commons-java5-1.0.1.pom
+ws-commons-java5/poms/ws-commons-java5-1.0.pom
+ws-commons-util/jars/ws-commons-util-1.0-sources.jar
+ws-commons-util/jars/ws-commons-util-1.0.1-sources.jar
+ws-commons-util/jars/ws-commons-util-1.0.1.jar
+ws-commons-util/jars/ws-commons-util-1.0.jar
+ws-commons-util/poms/ws-commons-util-1.0.1.pom
+ws-commons-util/poms/ws-commons-util-1.0.pom
+ws-scout/jars/scout-0.5.jar
+ws-scout/jars/scout-0.7rc1.jar
+ws-scout/jars/scout-0.7rc2.pom
+ws-scout/jars/scout-0.7rc2.jar
+ws-scout/jars/scout-0.7rc2-sources.jar
+ws-scout/KEYS
+wsdl4j/jars/wsdl4j-1.0.jar
+wsrf/jars/j2ee-xbeans-src-1.0.jar
+wsrf/jars/j2ee-xbeans-1.0.jar
+wsrf/jars/wsa-xbeans-src-1.0.jar
+wsrf/jars/wsa-xbeans-1.0.jar
+wsrf/jars/wsrf-xbeans-1.0.jar
+wsrf/jars/wsrf-1.0.jar
+wsrf/jars/wsrf-1.1.jar
+wsrf/jars/wsrf-jndi-config-src-1.0.jar
+wsrf/jars/wsrf-jndi-config-1.0.jar
+wsrf/jars/wsrf-xbeans-src-1.0.jar
+wss4j/jars/wss4j-1.5.0.jar
+wss4j/jars/wss4j-1.5.1.jar
+xalan/jars/xalan-2.1.0.jar
+xalan/jars/xalan-2.3.1.jar
+xalan/jars/xalan-2.4.0.jar
+xalan/jars/xalan-2.4.1.jar
+xalan/jars/xalan-2.5.0.jar
+xalan/jars/xalan-2.5.1.jar
+xalan/jars/xalan-2.6.0.jar
+xalan/jars/xalan-2.7.0.jar
+xalan/jars/xalansamples-2.4.1.jar
+xalan/jars/xalansamples-2.5.1.jar
+xalan/jars/xalansamples-2.6.0.jar
+xalan/jars/xalanservlet-2.4.1.jar
+xalan/wars/xalanservlet-2.5.1.war
+xerces/jars/xerces-1.2.3.jar
+xerces/jars/xerces-1.4.0.jar
+xerces/jars/xerces-1.4.4.jar
+xerces/jars/xerces-2.0.0.jar
+xerces/jars/xerces-2.0.1.jar
+xerces/jars/xerces-2.0.2.jar
+xerces/jars/xerces-2.2.1.jar
+xerces/jars/xerces-2.3.0.jar
+xerces/jars/xerces-2.4.0.jar
+xerces/jars/xercesImpl-2.0.0.jar
+xerces/jars/xercesImpl-2.5.0.jar
+xerces/jars/xercesImpl-2.6.0.jar
+xerces/jars/xercesImpl-2.6.2.jar
+xerces/jars/xercesImpl-2.7.1.jar
+xerces/jars/xercesImpl-2.8.0.jar
+xerces/jars/xercesImpl-2.8.0.jar.sig
+xerces/jars/xercesSamples-2.5.0.jar
+xerces/jars/xercesSamples-2.6.0.jar
+xerces/jars/xercesSamples-2.6.2.jar
+xerces/jars/xercesSamples-2.8.0.jar
+xerces/jars/xercesSamples-2.8.0.jar.sig
+xerces/jars/xmlParserAPIs-2.0.0.jar
+xerces/jars/xmlParserAPIs-2.0.2.jar
+xerces/jars/xmlParserAPIs-2.2.1.jar
+xerces/jars/xmlParserAPIs-2.6.0.jar
+xerces/jars/xmlParserAPIs-2.6.2.jar
+xerces/java-sources/xercesImpl-2.8.0-sources.jar
+xerces/poms/xercesImpl-2.8.0.pom
+xercesjarv/jars/xercesjarv-20020712-DG.jar
+xercesjarv/jars/xercesjarv-20020712.jar
+xml-apis/jars/xml-apis-1.0.b2.jar
+xml-apis/jars/.htaccess
+xml-apis/jars/README.html
+xml-apis/jars/xml-apis-1.0.b2.james
+xml-apis/jars/xml-apis-1.3.02.jar
+xml-apis/jars/xml-apis-1.3.03.jar
+xml-apis/jars/xml-apis-1.3.03.jar.sig
+xml-apis/poms/xml-apis-1.3.02.pom
+xml-apis/poms/xml-apis-1.3.03.pom
+xml-resolver/jars/xml-resolver-1.1.jar
+xml-security/jars/xml-security-1.0.4.jar
+xml-security/jars/xmlsec-1.0.5D2.jar
+xml-security/jars/xmlsec-1.1.0.jar
+xml-security/jars/xmlsec-1.1.0.jar.sig
+xml-security/jars/xmlsec-1.2.1.jar
+xml-security/jars/xmlsec-1.2.1.jar.sig
+xml-security/jars/xmlsec-1.3.0.jar
+xml-security/jars/xmlsec-1.3.0.jar.sig
+xmlbeans/jars/jsr173_1.0_api.jar
+xmlbeans/jars/jsr173_1.0_api_bundle.jar
+xmlbeans/jars/xbean-1.0.3.jar
+xmlbeans/jars/xbean-1.0.4-jdk1.3.jar
+xmlbeans/jars/xbean-1.0.4.jar
+xmlbeans/jars/xbean-2.0.0-beta1.jar
+xmlbeans/jars/xbean-2.0.0.jar
+xmlbeans/jars/xbean-2.1.0.jar
+xmlbeans/jars/xbean_xpath-1.0.3.jar
+xmlbeans/jars/xbean-2.2.0.jar
+xmlbeans/jars/xbean_xpath-1.0.4-jdk1.3.jar
+xmlbeans/jars/xbean_xpath-1.0.4.jar
+xmlbeans/jars/xbean_xpath-2.0.0-beta1.jar
+xmlbeans/jars/xbean_xpath-2.0.0.jar
+xmlbeans/jars/xbean_xpath-2.1.0.jar
+xmlbeans/jars/xbean_xpath-2.2.0.jar
+xmlbeans/jars/xmlbeans-1.0.3.jar
+xmlbeans/jars/xmlbeans-1.0.jar
+xmlbeans/jars/xmlpublic-2.0.0-beta1.jar
+xmlbeans/jars/xmlpublic-2.0.0.jar
+xmlbeans/jars/xmlpublic-2.1.0.jar
+xmlbeans/jars/xmlpublic-2.2.0.jar
+xmlbeans/poms/xmlbeans-1.0.3.pom
+xmlbeans/poms/xbean-2.2.0.pom
+xmlrpc/jars/xmlrpc-1.1.jar
+xmlrpc/jars/xmlrpc-1.2-a1.jar
+xmlrpc/jars/xmlrpc-1.2-a2.jar
+xmlrpc/jars/xmlrpc-1.2-a3-dev.20030102.111633.jar
+xmlrpc/jars/xmlrpc-1.2-a3-dev.jar
+xmlrpc/jars/xmlrpc-1.2-b1.jar
+xmlrpc/jars/xmlrpc-2.0-applet.jar
+xmlrpc/jars/xmlrpc-1.2.jar
+xmlrpc/jars/xmlrpc-2.0-beta-applet.jar
+xmlrpc/jars/xmlrpc-2.0-beta.jar
+xmlrpc/jars/xmlrpc-2.0.1-sources.jar
+xmlrpc/jars/xmlrpc-3.0a1-sources.jar
+xmlrpc/jars/xmlrpc-2.0.1.jar
+xmlrpc/jars/xmlrpc-2.0.jar
+xmlrpc/jars/xmlrpc-3.0a1.jar
+xmlrpc/jars/xmlrpc-client-3.0-sources.jar
+xmlrpc/jars/xmlrpc-common-3.0.jar
+xmlrpc/jars/xmlrpc-client-3.0.jar
+xmlrpc/jars/xmlrpc-client-3.0b1-sources.jar
+xmlrpc/jars/xmlrpc-client-3.0b1.jar
+xmlrpc/jars/xmlrpc-common-3.0-sources.jar
+xmlrpc/jars/xmlrpc-common-3.0b1-sources.jar
+xmlrpc/jars/xmlrpc-common-3.0b1.jar
+xmlrpc/jars/xmlrpc-helma-1.0.jar
+xmlrpc/jars/xmlrpc-server-3.0-sources.jar
+xmlrpc/jars/xmlrpc-server-3.0.jar
+xmlrpc/jars/xmlrpc-server-3.0b1-sources.jar
+xmlrpc/jars/xmlrpc-server-3.0b1.jar
+xmlrpc/poms/xmlrpc-3.0.pom
+xmlrpc/poms/xmlrpc-3.0b1.pom
+xmlrpc/poms/xmlrpc-client-3.0.pom
+xmlrpc/poms/xmlrpc-client-3.0b1.pom
+xmlrpc/poms/xmlrpc-common-3.0.pom
+xmlrpc/poms/xmlrpc-common-3.0b1.pom
+xmlrpc/poms/xmlrpc-server-3.0.pom
+xmlrpc/poms/xmlrpc-server-3.0b1.pom
+org.apache.ws.commons.axiom/jars/axiom-api-1.2.jar
+org.apache.ws.commons.axiom/jars/axiom-impl-1.2.jar
+org.apache.ws.commons.axiom/jars/axiom-dom-1.2.jar
+org.apache.ws.commons.axiom/jars/axiom-1.2.1.jar
+org.apache.ws.commons.axiom/jars/axiom-impl-1.2.1.jar
+org.apache.ws.commons.axiom/jars/axiom-dom-1.2.1.jar
+org.apache.ws.commons.axiom/jars/axiom-api-1.2.1.jar
+org.apache.ws.commons.axiom/jars/axiom-1.2.2.jar
+org.apache.ws.commons.axiom/jars/axiom-api-1.2.2.jar
+org.apache.ws.commons.axiom/jars/axiom-dom-1.2.2.jar
+org.apache.ws.commons.axiom/jars/axiom-impl-1.2.2.jar
+org.apache.ws.commons.axiom/jars/axiom-1.2.3.jar
+org.apache.ws.commons.axiom/jars/axiom-api-1.2.3.jar
+org.apache.ws.commons.axiom/jars/axiom-dom-1.2.3.jar
+org.apache.ws.commons.axiom/jars/axiom-impl-1.2.3.jar
+org.apache.ws.commons.axiom/jars/axiom-1.2.4.jar
+org.apache.ws.commons.axiom/jars/axiom-api-1.2.4.jar
+org.apache.ws.commons.axiom/jars/axiom-dom-1.2.4.jar
+org.apache.ws.commons.axiom/jars/axiom-impl-1.2.4.jar
+org.apache.ws.commons.axiom/jars/axiom-impl-1.2.5.jar
+org.apache.ws.commons.axiom/jars/axiom-dom-1.2.5.jar
+org.apache.ws.commons.axiom/jars/axiom-api-1.2.5.jar
+org.apache.ws.commons.axiom/jars/axiom-1.2.5.jar
+org.apache.ws.commons.schema/jars/XmlSchema-1.2.jar
+org.apache.axis2/jars/axis2-adb-1.1.jar
+org.apache.axis2/jars/axis2-adb-codegen-1.1.jar
+org.apache.axis2/jars/axis2-codegen-1.1.jar
+org.apache.axis2/jars/axis2-java2wsdl-1.1.jar
+org.apache.axis2/jars/axis2-jibx-1.1.jar
+org.apache.axis2/jars/axis2-kernel-1.1.jar
+org.apache.axis2/jars/axis2-saaj-1.1.jar
+org.apache.axis2/jars/axis2-soapmonitor-1.1.jar
+org.apache.axis2/jars/axis2-spring-1.1.jar
+org.apache.axis2/jars/axis2-tools-1.1.jar
+org.apache.axis2/jars/axis2-xmlbeans-1.1.jar
+org.apache.axis2/jars/axis2-1.1.jar
+org.apache.axis2/jars/axis2-rahas-1.1.jar
+org.apache.axis2/jars/axis2-secpolicy-1.1.jar
+org.apache.axis2/jars/axis2-security-1.1.jar
+org.apache.axis2/jars/axis2-1.1.1.jar
+org.apache.axis2/jars/axis2-adb-1.1.1.jar
+org.apache.axis2/jars/axis2-adb-codegen-1.1.1.jar
+org.apache.axis2/jars/axis2-codegen-1.1.1.jar
+org.apache.axis2/jars/axis2-java2wsdl-1.1.1.jar
+org.apache.axis2/jars/axis2-jaxbri-1.1.1.jar
+org.apache.axis2/jars/axis2-jibx-1.1.1.jar
+org.apache.axis2/jars/axis2-kernel-1.1.1.jar
+org.apache.axis2/jars/axis2-saaj-1.1.1.jar
+org.apache.axis2/jars/axis2-soapmonitor-1.1.1.jar
+org.apache.axis2/jars/axis2-spring-1.1.1.jar
+org.apache.axis2/jars/axis2-tools-1.1.1.jar
+org.apache.axis2/jars/axis2-xmlbeans-1.1.1.jar
+org.apache.axis2/jars/axis2-1.2.jar
+org.apache.axis2/jars/axis2-adb-1.2.jar
+org.apache.axis2/jars/axis2-adb-codegen-1.2.jar
+org.apache.axis2/jars/axis2-addressing-1.2.jar
+org.apache.axis2/jars/axis2-codegen-1.2.jar
+org.apache.axis2/jars/axis2-fastinfoset-1.2.jar
+org.apache.axis2/jars/axis2-jaxws-1.2.jar
+org.apache.axis2/jars/axis2-java2wsdl-1.2.jar
+org.apache.axis2/jars/axis2-jaxbri-1.2.jar
+org.apache.axis2/jars/axis2-jaxws-api-1.2.jar
+org.apache.axis2/jars/axis2-jibx-1.2.jar
+org.apache.axis2/jars/axis2-json-1.2.jar
+org.apache.axis2/jars/axis2-kernel-1.2.jar
+org.apache.axis2/jars/axis2-metadata-1.2.jar
+org.apache.axis2/jars/axis2-mex-1.2.jar
+org.apache.axis2/jars/axis2-mtompolicy-1.2.jar
+org.apache.axis2/jars/axis2-ping-1.2.jar
+org.apache.axis2/jars/axis2-saaj-1.2.jar
+org.apache.axis2/jars/axis2-saaj-api-1.2.jar
+org.apache.axis2/jars/axis2-soapmonitor-1.2.jar
+org.apache.axis2/jars/axis2-spring-1.2.jar
+org.apache.axis2/jars/axis2-xmlbeans-1.2.jar
+org.apache.axis2/mars/addressing-1.1.mar
+org.apache.axis2/mars/soapmonitor-1.1.mar
+org.apache.axis2/mars/rampart-1.1.mar
+org.apache.axis2/mars/rahas-1.1.mar
+org.apache.axis2/mars/addressing-1.1.1.mar
+org.apache.axis2/mars/soapmonitor-1.1.1.mar
+org.apache.axis2/mars/addressing-1.2.mar
+org.apache.axis2/mars/soapmonitor-1.2.mar
+org.apache.neethi/jars/neethi-2.0.jar
+org.apache.neethi/jars/neethi-2.0.1.jar
+org.apache.neethi/jars/neethi-2.0.2.jar
+org.apache.ws.commons.neethi/jars/neethi-1.0.1.jar
+org.apache.ws.commons.neethi/jars/neethi-2.0.1.jar
+org.apache.sandesha2/jars/sandesha2-1.1.jar
+org.apache.sandesha2/jars/sandesha2-client-1.1.jar
+org.apache.sandesha2/jars/sandesha2-policy-1.1.jar
+org.apache.sandesha2/mars/sandesha2-1.1.mar
+org.apache.ant/jars/ant-1.7.0.jar
+org.apache.ant/jars/ant-antlr-1.7.0.jar
+org.apache.ant/jars/ant-apache-bcel-1.7.0.jar
+org.apache.ant/jars/ant-apache-bsf-1.7.0.jar
+org.apache.ant/jars/ant-apache-log4j-1.7.0.jar
+org.apache.ant/jars/ant-apache-oro-1.7.0.jar
+org.apache.ant/jars/ant-apache-regexp-1.7.0.jar
+org.apache.ant/jars/ant-apache-resolver-1.7.0.jar
+org.apache.ant/jars/ant-commons-logging-1.7.0.jar
+org.apache.ant/jars/ant-commons-net-1.7.0.jar
+org.apache.ant/jars/ant-jai-1.7.0.jar
+org.apache.ant/jars/ant-javamail-1.7.0.jar
+org.apache.ant/jars/ant-jdepend-1.7.0.jar
+org.apache.ant/jars/ant-jmf-1.7.0.jar
+org.apache.ant/jars/ant-jsch-1.7.0.jar
+org.apache.ant/jars/ant-junit-1.7.0.jar
+org.apache.ant/jars/ant-launcher-1.7.0.jar
+org.apache.ant/jars/ant-netrexx-1.7.0.jar
+org.apache.ant/jars/ant-nodeps-1.7.0.jar
+org.apache.ant/jars/ant-starteam-1.7.0.jar
+org.apache.ant/jars/ant-stylebook-1.7.0.jar
+org.apache.ant/jars/ant-swing-1.7.0.jar
+org.apache.ant/jars/ant-testutil-1.7.0.jar
+org.apache.ant/jars/ant-trax-1.7.0.jar
+org.apache.ant/jars/ant-weblogic-1.7.0.jar
+org.apache.ant/poms/ant-1.7.0.pom
+org.apache.ant/poms/ant-antlr-1.7.0.pom
+org.apache.ant/poms/ant-apache-bcel-1.7.0.pom
+org.apache.ant/poms/ant-apache-bsf-1.7.0.pom
+org.apache.ant/poms/ant-apache-log4j-1.7.0.pom
+org.apache.ant/poms/ant-apache-oro-1.7.0.pom
+org.apache.ant/poms/ant-apache-regexp-1.7.0.pom
+org.apache.ant/poms/ant-apache-resolver-1.7.0.pom
+org.apache.ant/poms/ant-commons-logging-1.7.0.pom
+org.apache.ant/poms/ant-commons-net-1.7.0.pom
+org.apache.ant/poms/ant-jai-1.7.0.pom
+org.apache.ant/poms/ant-javamail-1.7.0.pom
+org.apache.ant/poms/ant-jdepend-1.7.0.pom
+org.apache.ant/poms/ant-jmf-1.7.0.pom
+org.apache.ant/poms/ant-jsch-1.7.0.pom
+org.apache.ant/poms/ant-junit-1.7.0.pom
+org.apache.ant/poms/ant-launcher-1.7.0.pom
+org.apache.ant/poms/ant-netrexx-1.7.0.pom
+org.apache.ant/poms/ant-nodeps-1.7.0.pom
+org.apache.ant/poms/ant-parent-1.7.0.pom
+org.apache.ant/poms/ant-starteam-1.7.0.pom
+org.apache.ant/poms/ant-stylebook-1.7.0.pom
+org.apache.ant/poms/ant-swing-1.7.0.pom
+org.apache.ant/poms/ant-trax-1.7.0.pom
+org.apache.ant/poms/ant-testutil-1.7.0.pom
+org.apache.ant/poms/ant-weblogic-1.7.0.pom
+org.apache.activemq/tar.bz2s/apache-activemq-4.1.1.tar.bz2
+org.apache.activemq/jars/activemq-console-4.1.1.jar
+org.apache.activemq/jars/activemq-core-4.1.1-tests.jar
+org.apache.activemq/jars/activemq-core-4.1.1.jar
+org.apache.activemq/jars/activemq-jaas-4.1.1.jar
+org.apache.activemq/jars/activemq-openwire-generator-4.1.1.jar
+org.apache.activemq/jars/activemq-optional-4.1.1.jar
+org.apache.activemq/jars/activemq-ra-4.1.1.jar
+org.apache.activemq/jars/activemq-test-atomikos-4.1.1.jar
+org.apache.activemq/jars/activemq-web-4.1.1.jar
+org.apache.activemq/jars/activemq-xmpp-4.1.1.jar
+org.apache.activemq/jars/apache-activemq-4.1.1.jar
+org.apache.activemq/java-sources/activemq-console-4.1.1-sources.jar
+org.apache.activemq/java-sources/activemq-openwire-generator-4.1.1-sources.jar
+org.apache.activemq/java-sources/activemq-core-4.1.1-sources.jar
+org.apache.activemq/java-sources/activemq-jaas-4.1.1-sources.jar
+org.apache.activemq/java-sources/activemq-optional-4.1.1-sources.jar
+org.apache.activemq/java-sources/activemq-ra-4.1.1-sources.jar
+org.apache.activemq/java-sources/activemq-test-atomikos-4.1.1-sources.jar
+org.apache.activemq/java-sources/activemq-rar-4.1.1-sources.jar
+org.apache.activemq/java-sources/activemq-web-4.1.1-sources.jar
+org.apache.activemq/java-sources/activemq-web-console-4.1.1-sources.jar
+org.apache.activemq/java-sources/activemq-web-demo-4.1.1-sources.jar
+org.apache.activemq/java-sources/activemq-xmpp-4.1.1-sources.jar
+org.apache.activemq/java-sources/apache-activemq-4.1.1-sources.jar
+org.apache.activemq/poms/activemq-console-4.1.1.pom
+org.apache.activemq/poms/activemq-openwire-generator-4.1.1.pom
+org.apache.activemq/poms/activemq-core-4.1.1.pom
+org.apache.activemq/poms/activemq-jaas-4.1.1.pom
+org.apache.activemq/poms/activemq-ra-4.1.1.pom
+org.apache.activemq/poms/activemq-optional-4.1.1.pom
+org.apache.activemq/poms/activemq-parent-4.1.1.pom
+org.apache.activemq/poms/activemq-xmpp-4.1.1.pom
+org.apache.activemq/poms/activemq-rar-4.1.1.pom
+org.apache.activemq/poms/activemq-test-atomikos-4.1.1.pom
+org.apache.activemq/poms/activemq-web-4.1.1.pom
+org.apache.activemq/poms/activemq-web-console-4.1.1.pom
+org.apache.activemq/poms/activemq-web-demo-4.1.1.pom
+org.apache.activemq/poms/apache-activemq-4.1.1.pom
+org.apache.activemq/poms/maven-metadata.xml
+org.apache.activemq/rars/activemq-rar-4.1.1.rar
+org.apache.activemq/htmls/activemq-core-4.1.1-schema.html
+org.apache.activemq/htmls/activemq-ra-4.1.1-schema.html
+org.apache.activemq/tar.gzs/apache-activemq-4.1.1-src.tar.gz
+org.apache.activemq/tar.gzs/apache-activemq-4.1.1.tar.gz
+org.apache.activemq/wars/activemq-web-console-4.1.1.war
+org.apache.activemq/wars/activemq-web-demo-4.1.1.war
+org.apache.activemq/xsd.htmls/activemq-core-4.1.1.xsd.html
+org.apache.activemq/xsd.htmls/activemq-ra-4.1.1.xsd.html
+org.apache.activemq/xsds/activemq-core-4.1.1.xsd
+org.apache.activemq/xsds/activemq-ra-4.1.1.xsd
+org.apache.activemq/xsds/README.txt
+org.apache.activemq/xsds/ReadMe.html
+org.apache.activemq/xsds/HEADER.html
+org.apache.activemq/zips/apache-activemq-4.1.1-src.zip
+org.apache.activemq/zips/apache-activemq-4.1.1.zip
+org.apache.activemq/snapshot-schema
+org.apache.poi/jars/poi-3.0.1-FINAL.jar
+org.apache.poi/jars/poi-scratchpad-3.0.1-FINAL.jar
+org.apache.poi/jars/poi-contrib-3.0.1-FINAL.jar
+org.apache.poi/poms/poi-3.0-FINAL.pom
+org.apache.poi/poms/poi-3.0.1-FINAL.pom
+org.apache.poi/poms/poi-scratchpad-3.0.1-FINAL.pom
+org.apache.poi/poms/poi-contrib-3.0.1-FINAL.pom
+org.apache.camel/poms/apache-camel-1.0.0.pom
+org.apache.camel/poms/archetypes-1.0.0.pom
+org.apache.camel/poms/camel-activemq-1.0.0.pom
+org.apache.camel/poms/camel-example-jms-file-1.0.0.pom
+org.apache.camel/poms/camel-bam-1.0.0.pom
+org.apache.camel/poms/camel-book-1.0.0.pom
+org.apache.camel/poms/camel-core-1.0.0.pom
+org.apache.camel/poms/camel-cxf-1.0.0.pom
+org.apache.camel/poms/camel-example-spring-1.0.0.pom
+org.apache.camel/poms/camel-ftp-1.0.0.pom
+org.apache.camel/poms/camel-jms-1.0.0.pom
+org.apache.camel/poms/camel-http-1.0.0.pom
+org.apache.camel/poms/camel-irc-1.0.0.pom
+org.apache.camel/poms/camel-jaxb-1.0.0.pom
+org.apache.camel/poms/camel-jbi-1.0.0.pom
+org.apache.camel/poms/camel-josql-1.0.0.pom
+org.apache.camel/poms/camel-jpa-1.0.0.pom
+org.apache.camel/poms/camel-mail-1.0.0.pom
+org.apache.camel/poms/camel-maven-plugin-1.0.0.pom
+org.apache.camel/poms/camel-mina-1.0.0.pom
+org.apache.camel/poms/camel-parent-1.0.0.pom
+org.apache.camel/poms/camel-rmi-1.0.0.pom
+org.apache.camel/poms/camel-quartz-1.0.0.pom
+org.apache.camel/poms/camel-router-1.0.0.pom
+org.apache.camel/poms/camel-saxon-1.0.0.pom
+org.apache.camel/poms/camel-script-1.0.0.pom
+org.apache.camel/poms/camel-spring-1.0.0.pom
+org.apache.camel/poms/camel-xmpp-1.0.0.pom
+org.apache.camel/poms/components-1.0.0.pom
+org.apache.camel/poms/examples-1.0.0.pom
+org.apache.camel/poms/maven-html-to-docbook-1.0.0.pom
+org.apache.camel/poms/maven-metadata.xml
+org.apache.camel/poms/maven-plugins-1.0.0.pom
+org.apache.camel/poms/tooling-1.0.0.pom
+org.apache.camel/poms/apache-camel-1.1.0.pom
+org.apache.camel/poms/archetypes-1.1.0.pom
+org.apache.camel/poms/camel-activemq-1.1.0.pom
+org.apache.camel/poms/camel-bam-1.1.0.pom
+org.apache.camel/poms/camel-book-1.1.0.pom
+org.apache.camel/poms/camel-core-1.1.0.pom
+org.apache.camel/poms/camel-cxf-1.1.0.pom
+org.apache.camel/poms/camel-example-bam-1.1.0.pom
+org.apache.camel/poms/camel-example-etl-1.1.0.pom
+org.apache.camel/poms/camel-example-jms-file-1.1.0.pom
+org.apache.camel/poms/camel-jpa-1.1.0.pom
+org.apache.camel/poms/camel-example-spring-1.1.0.pom
+org.apache.camel/poms/camel-ftp-1.1.0.pom
+org.apache.camel/poms/camel-http-1.1.0.pom
+org.apache.camel/poms/camel-irc-1.1.0.pom
+org.apache.camel/poms/camel-jaxb-1.1.0.pom
+org.apache.camel/poms/camel-jing-1.1.0.pom
+org.apache.camel/poms/camel-jms-1.1.0.pom
+org.apache.camel/poms/camel-maven-plugin-1.1.0.pom
+org.apache.camel/poms/camel-josql-1.1.0.pom
+org.apache.camel/poms/camel-juel-1.1.0.pom
+org.apache.camel/poms/camel-mail-1.1.0.pom
+org.apache.camel/poms/camel-msv-1.1.0.pom
+org.apache.camel/poms/camel-mina-1.1.0.pom
+org.apache.camel/poms/camel-rmi-1.1.0.pom
+org.apache.camel/poms/camel-ognl-1.1.0.pom
+org.apache.camel/poms/camel-parent-1.1.0.pom
+org.apache.camel/poms/camel-quartz-1.1.0.pom
+org.apache.camel/poms/examples-1.1.0.pom
+org.apache.camel/poms/camel-router-1.1.0.pom
+org.apache.camel/poms/camel-saxon-1.1.0.pom
+org.apache.camel/poms/camel-script-1.1.0.pom
+org.apache.camel/poms/camel-spring-1.1.0.pom
+org.apache.camel/poms/camel-xmpp-1.1.0.pom
+org.apache.camel/poms/components-1.1.0.pom
+org.apache.camel/poms/maven-html-to-docbook-1.1.0.pom
+org.apache.camel/poms/maven-plugins-1.1.0.pom
+org.apache.camel/poms/tooling-1.1.0.pom
+org.apache.camel/java-sources/apache-camel-1.0.0-sources.jar
+org.apache.camel/java-sources/camel-activemq-1.0.0-sources.jar
+org.apache.camel/java-sources/camel-bam-1.0.0-sources.jar
+org.apache.camel/java-sources/camel-cxf-1.0.0-sources.jar
+org.apache.camel/java-sources/camel-core-1.0.0-sources.jar
+org.apache.camel/java-sources/camel-example-jms-file-1.0.0-sources.jar
+org.apache.camel/java-sources/camel-ftp-1.0.0-sources.jar
+org.apache.camel/java-sources/camel-example-spring-1.0.0-sources.jar
+org.apache.camel/java-sources/camel-http-1.0.0-sources.jar
+org.apache.camel/java-sources/camel-irc-1.0.0-sources.jar
+org.apache.camel/java-sources/camel-jaxb-1.0.0-sources.jar
+org.apache.camel/java-sources/camel-jbi-1.0.0-sources.jar
+org.apache.camel/java-sources/camel-jms-1.0.0-sources.jar
+org.apache.camel/java-sources/camel-josql-1.0.0-sources.jar
+org.apache.camel/java-sources/camel-jpa-1.0.0-sources.jar
+org.apache.camel/java-sources/camel-mail-1.0.0-sources.jar
+org.apache.camel/java-sources/camel-maven-plugin-1.0.0-sources.jar
+org.apache.camel/java-sources/camel-rmi-1.0.0-sources.jar
+org.apache.camel/java-sources/camel-mina-1.0.0-sources.jar
+org.apache.camel/java-sources/camel-quartz-1.0.0-sources.jar
+org.apache.camel/java-sources/camel-router-1.0.0-sources.jar
+org.apache.camel/java-sources/camel-saxon-1.0.0-sources.jar
+org.apache.camel/java-sources/camel-script-1.0.0-sources.jar
+org.apache.camel/java-sources/camel-spring-1.0.0-sources.jar
+org.apache.camel/java-sources/camel-xmpp-1.0.0-sources.jar
+org.apache.camel/java-sources/maven-html-to-docbook-1.0.0-sources.jar
+org.apache.camel/java-sources/apache-camel-1.1.0-sources.jar
+org.apache.camel/java-sources/camel-activemq-1.1.0-sources.jar
+org.apache.camel/java-sources/camel-bam-1.1.0-sources.jar
+org.apache.camel/java-sources/camel-core-1.1.0-sources.jar
+org.apache.camel/java-sources/camel-cxf-1.1.0-sources.jar
+org.apache.camel/java-sources/camel-example-bam-1.1.0-sources.jar
+org.apache.camel/java-sources/camel-ftp-1.1.0-sources.jar
+org.apache.camel/java-sources/camel-example-etl-1.1.0-sources.jar
+org.apache.camel/java-sources/camel-example-jms-file-1.1.0-sources.jar
+org.apache.camel/java-sources/camel-example-spring-1.1.0-sources.jar
+org.apache.camel/java-sources/camel-http-1.1.0-sources.jar
+org.apache.camel/java-sources/camel-irc-1.1.0-sources.jar
+org.apache.camel/java-sources/camel-maven-plugin-1.1.0-sources.jar
+org.apache.camel/java-sources/camel-jaxb-1.1.0-sources.jar
+org.apache.camel/java-sources/camel-jing-1.1.0-sources.jar
+org.apache.camel/java-sources/camel-jms-1.1.0-sources.jar
+org.apache.camel/java-sources/camel-josql-1.1.0-sources.jar
+org.apache.camel/java-sources/camel-jpa-1.1.0-sources.jar
+org.apache.camel/java-sources/camel-juel-1.1.0-sources.jar
+org.apache.camel/java-sources/camel-mail-1.1.0-sources.jar
+org.apache.camel/java-sources/camel-mina-1.1.0-sources.jar
+org.apache.camel/java-sources/camel-msv-1.1.0-sources.jar
+org.apache.camel/java-sources/camel-ognl-1.1.0-sources.jar
+org.apache.camel/java-sources/camel-rmi-1.1.0-sources.jar
+org.apache.camel/java-sources/camel-quartz-1.1.0-sources.jar
+org.apache.camel/java-sources/camel-router-1.1.0-sources.jar
+org.apache.camel/java-sources/camel-saxon-1.1.0-sources.jar
+org.apache.camel/java-sources/camel-script-1.1.0-sources.jar
+org.apache.camel/java-sources/camel-spring-1.1.0-sources.jar
+org.apache.camel/java-sources/camel-xmpp-1.1.0-sources.jar
+org.apache.camel/java-sources/maven-html-to-docbook-1.1.0-sources.jar
+org.apache.camel/maven-plugins/camel-maven-plugin-1.0.0.jar
+org.apache.camel/maven-plugins/maven-html-to-docbook-1.0.0.jar
+org.apache.camel/maven-plugins/camel-maven-plugin-1.1.0.jar
+org.apache.camel/maven-plugins/maven-html-to-docbook-1.1.0.jar
+org.apache.camel/jars/apache-camel-1.0.0.jar
+org.apache.camel/jars/camel-activemq-1.0.0.jar
+org.apache.camel/jars/camel-example-jms-file-1.0.0.jar
+org.apache.camel/jars/camel-bam-1.0.0.jar
+org.apache.camel/jars/camel-core-1.0.0-tests.jar
+org.apache.camel/jars/camel-core-1.0.0.jar
+org.apache.camel/jars/camel-cxf-1.0.0.jar
+org.apache.camel/jars/camel-example-spring-1.0.0.jar
+org.apache.camel/jars/camel-ftp-1.0.0.jar
+org.apache.camel/jars/camel-http-1.0.0.jar
+org.apache.camel/jars/camel-irc-1.0.0.jar
+org.apache.camel/jars/camel-jaxb-1.0.0.jar
+org.apache.camel/jars/camel-jbi-1.0.0.jar
+org.apache.camel/jars/camel-jms-1.0.0.jar
+org.apache.camel/jars/camel-josql-1.0.0.jar
+org.apache.camel/jars/camel-jpa-1.0.0.jar
+org.apache.camel/jars/camel-mail-1.0.0.jar
+org.apache.camel/jars/camel-mina-1.0.0.jar
+org.apache.camel/jars/camel-quartz-1.0.0.jar
+org.apache.camel/jars/camel-rmi-1.0.0.jar
+org.apache.camel/jars/camel-router-1.0.0.jar
+org.apache.camel/jars/camel-saxon-1.0.0.jar
+org.apache.camel/jars/camel-script-1.0.0.jar
+org.apache.camel/jars/camel-spring-1.0.0-tests.jar
+org.apache.camel/jars/camel-spring-1.0.0.jar
+org.apache.camel/jars/camel-xmpp-1.0.0.jar
+org.apache.camel/jars/apache-camel-1.1.0.jar
+org.apache.camel/jars/camel-activemq-1.1.0.jar
+org.apache.camel/jars/camel-bam-1.1.0.jar
+org.apache.camel/jars/camel-core-1.1.0-tests.jar
+org.apache.camel/jars/camel-core-1.1.0.jar
+org.apache.camel/jars/camel-cxf-1.1.0.jar
+org.apache.camel/jars/camel-example-bam-1.1.0.jar
+org.apache.camel/jars/camel-example-etl-1.1.0.jar
+org.apache.camel/jars/camel-example-jms-file-1.1.0.jar
+org.apache.camel/jars/camel-ftp-1.1.0.jar
+org.apache.camel/jars/camel-example-spring-1.1.0.jar
+org.apache.camel/jars/camel-http-1.1.0.jar
+org.apache.camel/jars/camel-irc-1.1.0.jar
+org.apache.camel/jars/camel-jaxb-1.1.0.jar
+org.apache.camel/jars/camel-jing-1.1.0.jar
+org.apache.camel/jars/camel-jms-1.1.0.jar
+org.apache.camel/jars/camel-josql-1.1.0.jar
+org.apache.camel/jars/camel-jpa-1.1.0.jar
+org.apache.camel/jars/camel-juel-1.1.0.jar
+org.apache.camel/jars/camel-mail-1.1.0.jar
+org.apache.camel/jars/camel-mina-1.1.0.jar
+org.apache.camel/jars/camel-msv-1.1.0.jar
+org.apache.camel/jars/camel-ognl-1.1.0.jar
+org.apache.camel/jars/camel-quartz-1.1.0.jar
+org.apache.camel/jars/camel-rmi-1.1.0.jar
+org.apache.camel/jars/camel-router-1.1.0.jar
+org.apache.camel/jars/camel-saxon-1.1.0.jar
+org.apache.camel/jars/camel-script-1.1.0.jar
+org.apache.camel/jars/camel-spring-1.1.0-tests.jar
+org.apache.camel/jars/camel-spring-1.1.0.jar
+org.apache.camel/jars/camel-xmpp-1.1.0.jar
+org.apache.camel/tar.gzs/apache-camel-1.0.0-src.tar.gz
+org.apache.camel/tar.gzs/apache-camel-1.0.0.tar.gz
+org.apache.camel/tar.gzs/apache-camel-1.1.0-src.tar.gz
+org.apache.camel/tar.gzs/apache-camel-1.1.0.tar.gz
+org.apache.camel/xsds/camel-spring-1.0.0.xsd
+org.apache.camel/xsds/camel-spring-1.1.0.xsd
+org.apache.camel/zips/apache-camel-1.0.0-src.zip
+org.apache.camel/zips/apache-camel-1.0.0.zip
+org.apache.camel/zips/apache-camel-1.1.0-src.zip
+org.apache.camel/zips/apache-camel-1.1.0.zip
+org.apache.xmlbeans/jars/xmlbeans-2.3.0.jar
+org.apache.xmlbeans/jars/xmlbeans-xmlpublic-2.3.0.jar
+org.apache.xmlbeans/jars/xmlbeans-qname-2.3.0.jar
+org.apache.xmlbeans/jars/xmlbeans-2.2.0.jar
+org.apache.xmlbeans/jars/xmlbeans-xmlpublic-2.2.0.jar
+org.apache.xmlbeans/jars/xmlbeans-xpath-2.3.0.jar
+org.apache.xmlbeans/jars/xmlbeans-xpath-2.2.0.jar
+org.apache.xmlbeans/poms/xmlbeans-2.2.0.pom
+org.apache.xmlbeans/poms/xmlbeans-2.3.0.pom
+org.apache.xmlbeans/poms/xmlbeans-xpath-2.3.0.pom
+org.apache.xmlbeans/poms/xmlbeans-xmlpublic-2.2.0.pom
+org.apache.xmlbeans/poms/xmlbeans-xmlpublic-2.3.0.pom
+org.apache.xmlbeans/poms/xmlbeans-xpath-2.2.0.pom
+org.apache.xmlbeans/poms/xmlbeans-qname-2.3.0.pom
+org.apache.poi.DELETE/poms/poi-3.0-FINAL.pom
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/resolver-status.properties b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/resolver-status.properties
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/resolver-status.properties
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/scanner-archiva.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/scanner-archiva.xml
new file mode 100644
index 000000000..de6b2b62f
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/scanner-archiva.xml
@@ -0,0 +1,109 @@
+<?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.
+ -->
+
+<configuration>
+ <version>3.0.0</version>
+ <repositoryScanning>
+ <fileTypes>
+ <fileType>
+ <id>artifacts</id>
+ <patterns>
+ <pattern>**/*.pom</pattern>
+ <pattern>**/*.jar</pattern>
+ <pattern>**/*.ear</pattern>
+ <pattern>**/*.war</pattern>
+ <pattern>**/*.car</pattern>
+ <pattern>**/*.sar</pattern>
+ <pattern>**/*.mar</pattern>
+ <pattern>**/*.rar</pattern>
+ <pattern>**/*.dtd</pattern>
+ <pattern>**/*.tld</pattern>
+ <pattern>**/*.tar.gz</pattern>
+ <pattern>**/*.tar.bz2</pattern>
+ <pattern>**/*.zip</pattern>
+ </patterns>
+ </fileType>
+ <fileType>
+ <id>indexable-content</id>
+ <patterns>
+ <pattern>**/*.txt</pattern>
+ <pattern>**/*.TXT</pattern>
+ <pattern>**/*.block</pattern>
+ <pattern>**/*.config</pattern>
+ <pattern>**/*.pom</pattern>
+ <pattern>**/*.xml</pattern>
+ <pattern>**/*.xsd</pattern>
+ <pattern>**/*.dtd</pattern>
+ <pattern>**/*.tld</pattern>
+ </patterns>
+ </fileType>
+ <fileType>
+ <id>auto-remove</id>
+ <patterns>
+ <pattern>**/*.bak</pattern>
+ <pattern>**/*~</pattern>
+ <pattern>**/*-</pattern>
+ </patterns>
+ </fileType>
+ <fileType>
+ <id>ignored</id>
+ <patterns>
+ <pattern>**/.htaccess</pattern>
+ <pattern>**/KEYS</pattern>
+ <pattern>**/*.rb</pattern>
+ <pattern>**/*.sh</pattern>
+ <pattern>**/.svn/**</pattern>
+ <pattern>**/.DAV/**</pattern>
+ </patterns>
+ </fileType>
+ </fileTypes>
+ <knownContentConsumers>
+ <knownContentConsumer>update-db-artifact</knownContentConsumer>
+ <knownContentConsumer>create-missing-checksums</knownContentConsumer>
+ <knownContentConsumer>update-db-repository-metadata</knownContentConsumer>
+ <knownContentConsumer>validate-checksum</knownContentConsumer>
+ <knownContentConsumer>validate-signature</knownContentConsumer>
+ <knownContentConsumer>index-content</knownContentConsumer>
+ <knownContentConsumer>auto-remove</knownContentConsumer>
+ <knownContentConsumer>auto-rename</knownContentConsumer>
+ </knownContentConsumers>
+ <invalidContentConsumers>
+ <invalidContentConsumer>update-db-bad-content</invalidContentConsumer>
+ </invalidContentConsumers>
+ </repositoryScanning>
+
+ <databaseScanning>
+ <cronExpression>0 0 * * * ?</cronExpression>
+ <unprocessedConsumers>
+ <unprocessedConsumer>index-artifact</unprocessedConsumer>
+ <unprocessedConsumer>update-db-project</unprocessedConsumer>
+ <unprocessedConsumer>validate-repository-metadata</unprocessedConsumer>
+ <unprocessedConsumer>index-archive-toc</unprocessedConsumer>
+ <unprocessedConsumer>update-db-bytecode-stats</unprocessedConsumer>
+ <unprocessedConsumer>index-public-methods</unprocessedConsumer>
+ </unprocessedConsumers>
+ <cleanupConsumers>
+ <cleanupConsumer>not-present-remove-db-artifact</cleanupConsumer>
+ <cleanupConsumer>not-present-remove-db-project</cleanupConsumer>
+ <cleanupConsumer>not-present-remove-indexed</cleanupConsumer>
+ </cleanupConsumers>
+ </databaseScanning>
+
+</configuration>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/spring-context-metadata-tools-test.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/spring-context-metadata-tools-test.xml
new file mode 100644
index 000000000..b320fa6a5
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/spring-context-metadata-tools-test.xml
@@ -0,0 +1,32 @@
+<?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.
+ -->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
+ default-lazy-init="true">
+
+ <bean name="archivaConfiguration#mock" class="org.apache.archiva.metadata.repository.storage.maven2.conf.MockConfiguration"/>
+ <alias name="archivaConfiguration#mock" alias="archivaConfiguration#default"/>
+ <bean name="metadataTools#test" class="org.apache.archiva.repository.metadata.MetadataTools">
+ <property name="configuration" ref="archivaConfiguration#mock"/>
+ </bean>
+</beans> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/spring-context-no-mock-conf.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/spring-context-no-mock-conf.xml
new file mode 100644
index 000000000..b5de647ad
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/spring-context-no-mock-conf.xml
@@ -0,0 +1,34 @@
+<?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.
+ -->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+ http://www.springframework.org/schema/context
+ http://www.springframework.org/schema/context/spring-context-3.0.xsd">
+
+ <context:annotation-config/>
+ <context:component-scan base-package="org.apache.archiva.metadata.repository.storage.maven2.conf,org.apache.archiva.repository.content.maven2"/>
+
+
+
+</beans> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/spring-context-repo-request-test.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/spring-context-repo-request-test.xml
new file mode 100644
index 000000000..3f28158ae
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/spring-context-repo-request-test.xml
@@ -0,0 +1,51 @@
+<?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.
+ -->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+ http://www.springframework.org/schema/context
+ http://www.springframework.org/schema/context/spring-context-3.0.xsd">
+
+ <context:property-placeholder system-properties-mode="OVERRIDE"/>
+ <context:component-scan base-package="org.apache.archiva.repository.content.maven2" />
+ <bean name="archivaConfiguration#repo-request-test" class="org.apache.archiva.configuration.DefaultArchivaConfiguration">
+ <property name="registry" ref="registry#configured"/>
+ </bean>
+
+ <alias name="archivaConfiguration#repo-request-test" alias="archivaConfiguration#default"/>
+ <alias name="archivaConfiguration#repo-request-test" alias="archivaConfiguration"/>
+
+ <bean name="registry#configured" class="org.apache.archiva.redback.components.registry.commons.CommonsConfigurationRegistry">
+ <property name="properties">
+ <value>
+ <![CDATA[
+ <configuration>
+ <system/>
+ <xml fileName="${basedir}/src/test/resources/scanner-archiva.xml"
+ config-name="org.apache.archiva" config-at="org.apache.archiva"/>
+ </configuration>
+ ]]>
+ </value>
+ </property>
+ </bean>
+</beans> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/spring-context-storage.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/spring-context-storage.xml
new file mode 100644
index 000000000..f88f88fc3
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/spring-context-storage.xml
@@ -0,0 +1,63 @@
+<?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.
+ -->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+ http://www.springframework.org/schema/context
+ http://www.springframework.org/schema/context/spring-context-3.0.xsd"
+ default-lazy-init="true">
+
+ <context:annotation-config/>
+ <context:component-scan base-package="org.apache.archiva.policies.urlcache,org.apache.archiva.proxy,org.apache.archiva.proxy.maven,org.apache.archiva.indexer,org.apache.maven.index,org.apache.archiva.repository,org.apache.archiva.configuration,org.apache.archiva.metadata.repository,org.apache.archiva.repository.index.mock"/>
+
+
+ <bean name="archivaConfiguration#test" class="org.apache.archiva.metadata.repository.storage.maven2.conf.MockConfiguration"/>
+ <alias name="archivaConfiguration#test" alias="archivaConfiguration#default"/>
+ <alias name="archivaConfiguration#test" alias="archivaConfiguration"/>
+
+ <alias name="metadataResolver#test" alias="metadataResolver#default"/>
+
+ <alias name="archivaTaskScheduler#repositoryMock" alias="archivaTaskScheduler#repository" />
+
+ <bean name="scheduler" class="org.apache.archiva.redback.components.scheduler.DefaultScheduler">
+ <property name="properties">
+ <props>
+ <prop key="org.quartz.scheduler.instanceName">scheduler1</prop>
+ <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
+ <prop key="org.quartz.threadPool.threadCount">1</prop>
+ <prop key="org.quartz.threadPool.threadPriority">4</prop>
+ <prop key="org.quartz.jobStore.class">org.quartz.simpl.RAMJobStore</prop>
+ </props>
+ </property>
+ </bean>
+
+ <bean name="metadataTools#default" class="org.apache.archiva.repository.metadata.MetadataTools">
+ <property name="configuration" ref="archivaConfiguration#default"/>
+ </bean>
+
+ <bean name="filetypes" class="org.apache.archiva.configuration.FileTypes">
+ <property name="archivaConfiguration" ref="archivaConfiguration#default"/>
+ </bean>
+
+
+</beans> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/spring-context.xml b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/spring-context.xml
new file mode 100644
index 000000000..85fa73c32
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/spring-context.xml
@@ -0,0 +1,64 @@
+<?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.
+ -->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+ http://www.springframework.org/schema/context
+ http://www.springframework.org/schema/context/spring-context-3.0.xsd"
+ default-lazy-init="true">
+
+ <context:annotation-config/>
+ <context:component-scan base-package="org.apache.archiva.repository,org.apache.archiva.configuration,org.apache.archiva.metadata.repository,org.apache.archiva.repository.index.mock"/>
+
+
+ <bean name="archivaConfiguration#test" class="org.apache.archiva.configuration.DefaultArchivaConfiguration">
+ </bean>
+ <alias name="archivaConfiguration#test" alias="archivaConfiguration#default"/>
+ <alias name="archivaConfiguration#test" alias="archivaConfiguration"/>
+
+ <alias name="metadataResolver#test" alias="metadataResolver#default"/>
+
+ <alias name="archivaTaskScheduler#repositoryMock" alias="archivaTaskScheduler#repository" />
+
+ <bean name="scheduler" class="org.apache.archiva.redback.components.scheduler.DefaultScheduler">
+ <property name="properties">
+ <props>
+ <prop key="org.quartz.scheduler.instanceName">scheduler1</prop>
+ <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
+ <prop key="org.quartz.threadPool.threadCount">1</prop>
+ <prop key="org.quartz.threadPool.threadPriority">4</prop>
+ <prop key="org.quartz.jobStore.class">org.quartz.simpl.RAMJobStore</prop>
+ </props>
+ </property>
+ </bean>
+
+ <bean name="metadataTools#default" class="org.apache.archiva.repository.metadata.MetadataTools">
+ <property name="configuration" ref="archivaConfiguration#default"/>
+ </bean>
+
+ <bean name="filetypes" class="org.apache.archiva.configuration.FileTypes">
+ <property name="archivaConfiguration" ref="archivaConfiguration#default"/>
+ </bean>
+
+
+</beans> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/test-repo/org/apache/archiva/generic-version/1.0-SNAPSHOT/generic-version-1.0-SNAPSHOT.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/test-repo/org/apache/archiva/generic-version/1.0-SNAPSHOT/generic-version-1.0-SNAPSHOT.pom
new file mode 100644
index 000000000..64ddc4d74
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/test-repo/org/apache/archiva/generic-version/1.0-SNAPSHOT/generic-version-1.0-SNAPSHOT.pom
@@ -0,0 +1,9 @@
+<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.archiva</groupId>
+ <artifactId>generic-version</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <name>Generic Snapshot Version</name>
+ <packaging>pom</packaging>
+</project> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/test-repo/org/apache/archiva/released-version/1.0/released-version-1.0.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/test-repo/org/apache/archiva/released-version/1.0/released-version-1.0.pom
new file mode 100644
index 000000000..1a7f85e65
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/test-repo/org/apache/archiva/released-version/1.0/released-version-1.0.pom
@@ -0,0 +1,9 @@
+<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.archiva</groupId>
+ <artifactId>released-version</artifactId>
+ <version>1.0</version>
+ <name>Released Version</name>
+ <packaging>pom</packaging>
+</project> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/test-repo/org/apache/archiva/unique-version/1.0-SNAPSHOT/unique-version-1.0-20090807.070903-1.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/test-repo/org/apache/archiva/unique-version/1.0-SNAPSHOT/unique-version-1.0-20090807.070903-1.pom
new file mode 100644
index 000000000..4ccc67759
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/test-repo/org/apache/archiva/unique-version/1.0-SNAPSHOT/unique-version-1.0-20090807.070903-1.pom
@@ -0,0 +1,9 @@
+<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.archiva</groupId>
+ <artifactId>unique-version</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <name>Unique Version Snapshot - Build 1</name>
+ <packaging>pom</packaging>
+</project> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/test-repo/org/apache/archiva/unique-version/1.0-SNAPSHOT/unique-version-1.0-20090808.051902-2.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/test-repo/org/apache/archiva/unique-version/1.0-SNAPSHOT/unique-version-1.0-20090808.051902-2.pom
new file mode 100644
index 000000000..2662a0ea8
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/test-repo/org/apache/archiva/unique-version/1.0-SNAPSHOT/unique-version-1.0-20090808.051902-2.pom
@@ -0,0 +1,9 @@
+<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.archiva</groupId>
+ <artifactId>unique-version</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <name>Unique Version Snapshot - Build 2</name>
+ <packaging>pom</packaging>
+</project> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/test-repo/org/apache/archiva/unique-version/1.0-SNAPSHOT/unique-version-1.0-20090808.081025-3.pom b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/test-repo/org/apache/archiva/unique-version/1.0-SNAPSHOT/unique-version-1.0-20090808.081025-3.pom
new file mode 100644
index 000000000..597e65408
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/test-repo/org/apache/archiva/unique-version/1.0-SNAPSHOT/unique-version-1.0-20090808.081025-3.pom
@@ -0,0 +1,9 @@
+<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.archiva</groupId>
+ <artifactId>unique-version</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <name>Unique Version Snapshot - Build 3</name>
+ <packaging>pom</packaging>
+</project> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/test01.properties b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/test01.properties
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/test01.properties
diff --git a/archiva-modules/archiva-maven/archiva-maven-scheduler/pom.xml b/archiva-modules/archiva-maven/archiva-maven-scheduler/pom.xml
new file mode 100644
index 000000000..52763e1a9
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-scheduler/pom.xml
@@ -0,0 +1,186 @@
+<?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>
+ <artifactId>archiva-maven</artifactId>
+ <groupId>org.apache.archiva.maven</groupId>
+ <version>3.0.0-SNAPSHOT</version>
+ </parent>
+
+
+ <properties>
+ <site.staging.base>${project.parent.parent.basedir}</site.staging.base>
+ </properties>
+
+ <artifactId>archiva-maven-scheduler</artifactId>
+ <name>Archiva :: Maven :: Scheduler</name>
+
+ <description>Scheduler for downloading remote Maven indexes.</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-context</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>archiva-configuration</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>archiva-scheduler-indexing</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>archiva-repository-layer</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva.maven</groupId>
+ <artifactId>archiva-maven-proxy</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-http</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-http-lightweight</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Test dependencies -->
+ <dependency>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>archiva-repository-admin-default</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva.maven</groupId>
+ <artifactId>archiva-maven-indexer</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva.maven</groupId>
+ <artifactId>archiva-maven-repository</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>archiva-test-utils</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-server</artifactId>
+ <version>${jetty.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-plus</artifactId>
+ <version>${jetty.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.assertj</groupId>
+ <artifactId>assertj-core</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>archiva-mock</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.archiva.redback</groupId>
+ <artifactId>redback-rbac-cached</artifactId>
+ <scope>test</scope>
+ <version>${redback.version}</version>
+ </dependency>
+
+
+ <dependency>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>archiva-scheduler-repository</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-slf4j-impl</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.archiva.redback</groupId>
+ <artifactId>redback-common-test-resources</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.ow2.asm</groupId>
+ <artifactId>asm</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.rat</groupId>
+ <artifactId>apache-rat-plugin</artifactId>
+ <configuration>
+ <excludes>
+ <exclude>src/test/index-updates/nexus-maven-repository-index.properties</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <systemPropertyVariables>
+ <appserver.base>${project.build.directory}/appserver-base</appserver.base>
+ <plexus.home>${project.build.directory}/appserver-base</plexus.home>
+ <derby.system.home>${project.build.directory}/appserver-base</derby.system.home>
+ <redback.jdbc.url>${redbackTestJdbcUrl}</redback.jdbc.url>
+ <redback.jdbc.driver.name>${redbackTestJdbcDriver}</redback.jdbc.driver.name>
+ <basedir>${basedir}</basedir>
+ <archiva.repositorySessionFactory.id>mock</archiva.repositorySessionFactory.id>
+ <openjpa.Log>${openjpa.Log}</openjpa.Log>
+ </systemPropertyVariables>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/archiva-modules/archiva-maven/archiva-maven-scheduler/src/main/java/org/apache/archiva/scheduler/indexing/maven/ArchivaIndexingTaskExecutor.java b/archiva-modules/archiva-maven/archiva-maven-scheduler/src/main/java/org/apache/archiva/scheduler/indexing/maven/ArchivaIndexingTaskExecutor.java
new file mode 100644
index 000000000..8192cce2b
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-scheduler/src/main/java/org/apache/archiva/scheduler/indexing/maven/ArchivaIndexingTaskExecutor.java
@@ -0,0 +1,302 @@
+package org.apache.archiva.scheduler.indexing.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 Li
+ * cense is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES 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.archiva.indexer.ArchivaIndexingContext;
+import org.apache.archiva.indexer.UnsupportedBaseContextException;
+import org.apache.archiva.redback.components.taskqueue.Task;
+import org.apache.archiva.redback.components.taskqueue.execution.TaskExecutionException;
+import org.apache.archiva.redback.components.taskqueue.execution.TaskExecutor;
+import org.apache.archiva.repository.ManagedRepository;
+import org.apache.archiva.repository.features.IndexCreationFeature;
+import org.apache.archiva.scheduler.indexing.ArtifactIndexingTask;
+import org.apache.maven.index.ArtifactContext;
+import org.apache.maven.index.ArtifactContextProducer;
+import org.apache.maven.index.DefaultScannerListener;
+import org.apache.maven.index.FlatSearchRequest;
+import org.apache.maven.index.FlatSearchResponse;
+import org.apache.maven.index.Indexer;
+import org.apache.maven.index.IndexerEngine;
+import org.apache.maven.index.MAVEN;
+import org.apache.maven.index.Scanner;
+import org.apache.maven.index.ScanningRequest;
+import org.apache.maven.index.ScanningResult;
+import org.apache.maven.index.context.IndexingContext;
+import org.apache.maven.index.expr.SourcedSearchExpression;
+import org.apache.maven.index.packer.IndexPacker;
+import org.apache.maven.index.packer.IndexPackingRequest;
+import org.apache.maven.index_shaded.lucene.search.BooleanClause;
+import org.apache.maven.index_shaded.lucene.search.BooleanQuery;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import javax.inject.Inject;
+import java.io.IOException;
+import java.nio.file.Path;
+
+/**
+ * ArchivaIndexingTaskExecutor Executes all indexing tasks. Adding, updating and removing artifacts from the index are
+ * all performed by this executor. Add and update artifact in index tasks are added in the indexing task queue by the
+ * NexusIndexerConsumer while remove artifact from index tasks are added by the LuceneCleanupRemoveIndexedConsumer.
+ */
+@Service( "taskExecutor#indexing" )
+public class ArchivaIndexingTaskExecutor
+ implements TaskExecutor
+{
+ private Logger log = LoggerFactory.getLogger( ArchivaIndexingTaskExecutor.class );
+
+ @Inject
+ private IndexPacker indexPacker;
+
+ @Inject
+ private ArtifactContextProducer artifactContextProducer;
+
+ @Inject
+ private Indexer indexer;
+
+ @Inject
+ private Scanner scanner;
+
+ @Inject
+ IndexerEngine indexerEngine;
+
+ /**
+ * depending on current {@link Task} you have.
+ * If {@link org.apache.archiva.scheduler.indexing.ArtifactIndexingTask.Action#FINISH} &amp;&amp; isExecuteOnEntireRepo:
+ * repository will be scanned.
+ *
+ * @param task
+ * @throws TaskExecutionException
+ */
+ @Override
+ public void executeTask( Task task )
+ throws TaskExecutionException
+ {
+ ArtifactIndexingTask indexingTask = (ArtifactIndexingTask) task;
+
+ ManagedRepository repository = indexingTask.getRepository( );
+ ArchivaIndexingContext archivaContext = indexingTask.getContext( );
+ IndexingContext context = null;
+ try
+ {
+ context = archivaContext.getBaseContext( IndexingContext.class );
+ }
+ catch ( UnsupportedBaseContextException e )
+ {
+ throw new TaskExecutionException( "Bad repository type.", e );
+ }
+
+ if ( ArtifactIndexingTask.Action.FINISH.equals( indexingTask.getAction( ) )
+ && indexingTask.isExecuteOnEntireRepo( ) )
+ {
+ long start = System.currentTimeMillis( );
+ try
+ {
+ context.updateTimestamp( );
+ DefaultScannerListener listener = new DefaultScannerListener( context, indexerEngine, true, null );
+ ScanningRequest request = new ScanningRequest( context, listener );
+ ScanningResult result = scanner.scan( request );
+ if ( result.hasExceptions( ) )
+ {
+ log.error( "Exceptions occured during index scan of " + context.getId( ) );
+ result.getExceptions( ).stream( ).map( e -> e.getMessage( ) ).distinct( ).limit( 5 ).forEach(
+ s -> log.error( "Message: " + s )
+ );
+ }
+ }
+ catch ( IOException e )
+ {
+ log.error( "Error during context scan {}: {}", context.getId( ), context.getIndexDirectory( ) );
+ }
+ long end = System.currentTimeMillis( );
+ log.info( "indexed maven repository: {}, onlyUpdate: {}, time {} ms", repository.getId( ),
+ indexingTask.isOnlyUpdate( ), ( end - start ) );
+ log.debug( "Finishing indexing task on repo: {}", repository.getId( ) );
+ finishIndexingTask( indexingTask, repository, context );
+ }
+ else
+ {
+ // create context if not a repo scan request
+ if ( !indexingTask.isExecuteOnEntireRepo( ) )
+ {
+ try
+ {
+ log.debug( "Creating indexing context on resource: {}", //
+ ( indexingTask.getResourceFile( ) == null
+ ? "none"
+ : indexingTask.getResourceFile( ) ) );
+ archivaContext = repository.getIndexingContext( );
+ context = archivaContext.getBaseContext( IndexingContext.class );
+ }
+ catch ( UnsupportedBaseContextException e )
+ {
+ log.error( "Error occurred while creating context: {}", e.getMessage( ) );
+ throw new TaskExecutionException( "Error occurred while creating context: " + e.getMessage( ), e );
+ }
+ }
+
+ if ( context == null || context.getIndexDirectory( ) == null )
+ {
+ throw new TaskExecutionException( "Trying to index an artifact but the context is already closed" );
+ }
+
+ try
+ {
+ Path artifactFile = indexingTask.getResourceFile( );
+ if ( artifactFile == null )
+ {
+ log.debug( "no artifact pass in indexing task so skip it" );
+ }
+ else
+ {
+ ArtifactContext ac = artifactContextProducer.getArtifactContext( context, artifactFile.toFile( ) );
+
+ if ( ac != null )
+ {
+ // MRM-1779 pom must be indexed too
+ // TODO make that configurable?
+ if ( artifactFile.getFileName( ).toString( ).endsWith( ".pom" ) )
+ {
+ ac.getArtifactInfo( ).setFileExtension( "pom" );
+ ac.getArtifactInfo( ).setPackaging( "pom" );
+ ac.getArtifactInfo( ).setClassifier( "pom" );
+ }
+ if ( indexingTask.getAction( ).equals( ArtifactIndexingTask.Action.ADD ) )
+ {
+ //IndexSearcher s = context.getIndexSearcher();
+ //String uinfo = ac.getArtifactInfo().getUinfo();
+ //TopDocs d = s.search( new TermQuery( new Term( ArtifactInfo.UINFO, uinfo ) ), 1 );
+
+ BooleanQuery.Builder qb = new BooleanQuery.Builder();
+ qb.add( indexer.constructQuery( MAVEN.GROUP_ID, new SourcedSearchExpression(
+ ac.getArtifactInfo( ).getGroupId( ) ) ), BooleanClause.Occur.MUST );
+ qb.add( indexer.constructQuery( MAVEN.ARTIFACT_ID, new SourcedSearchExpression(
+ ac.getArtifactInfo( ).getArtifactId( ) ) ), BooleanClause.Occur.MUST );
+ qb.add( indexer.constructQuery( MAVEN.VERSION, new SourcedSearchExpression(
+ ac.getArtifactInfo( ).getVersion( ) ) ), BooleanClause.Occur.MUST );
+ if ( ac.getArtifactInfo( ).getClassifier( ) != null )
+ {
+ qb.add( indexer.constructQuery( MAVEN.CLASSIFIER, new SourcedSearchExpression(
+ ac.getArtifactInfo( ).getClassifier( ) ) ), BooleanClause.Occur.MUST );
+ }
+ if ( ac.getArtifactInfo( ).getPackaging( ) != null )
+ {
+ qb.add( indexer.constructQuery( MAVEN.PACKAGING, new SourcedSearchExpression(
+ ac.getArtifactInfo( ).getPackaging( ) ) ), BooleanClause.Occur.MUST );
+ }
+ FlatSearchRequest flatSearchRequest = new FlatSearchRequest( qb.build(), context );
+ FlatSearchResponse flatSearchResponse = indexer.searchFlat( flatSearchRequest );
+ if ( flatSearchResponse.getResults( ).isEmpty( ) )
+ {
+ log.debug( "Adding artifact '{}' to index..", ac.getArtifactInfo( ) );
+ indexerEngine.index( context, ac );
+ }
+ else
+ {
+ log.debug( "Updating artifact '{}' in index..", ac.getArtifactInfo( ) );
+ // TODO check if update exists !!
+ indexerEngine.update( context, ac );
+ }
+
+ context.updateTimestamp( );
+ context.commit( );
+
+
+ }
+ else
+ {
+ log.debug( "Removing artifact '{}' from index..", ac.getArtifactInfo( ) );
+ indexerEngine.remove( context, ac );
+ }
+ }
+ }
+ // close the context if not a repo scan request
+ if ( !indexingTask.isExecuteOnEntireRepo( ) )
+ {
+ log.debug( "Finishing indexing task on resource file : {}", indexingTask.getResourceFile( ) != null
+ ? indexingTask.getResourceFile( )
+ : " none " );
+ finishIndexingTask( indexingTask, repository, context );
+ }
+ }
+ catch ( IOException e )
+ {
+ log.error( "Error occurred while executing indexing task '{}': {}", indexingTask, e.getMessage( ),
+ e );
+ throw new TaskExecutionException( "Error occurred while executing indexing task '" + indexingTask + "'",
+ e );
+ }
+ }
+
+ }
+
+ private void finishIndexingTask( ArtifactIndexingTask indexingTask, ManagedRepository repository,
+ IndexingContext context )
+ throws TaskExecutionException
+ {
+ try
+ {
+
+ log.debug( "Finishing indexing" );
+ context.optimize( );
+
+ if ( repository.supportsFeature( IndexCreationFeature.class ) )
+ {
+ IndexCreationFeature icf = repository.getFeature( IndexCreationFeature.class ).get( );
+ if ( !icf.isSkipPackedIndexCreation( ) && icf.getLocalPackedIndexPath( ) != null )
+ {
+
+ log.debug( "Creating packed index from {} on {}", context.getIndexDirectoryFile( ), icf.getLocalPackedIndexPath( ) );
+ IndexPackingRequest request = new IndexPackingRequest( context, //
+ context.acquireIndexSearcher( ).getIndexReader( ),
+ //
+ icf.getLocalPackedIndexPath( ).toFile( ) );
+
+ indexPacker.packIndex( request );
+ context.updateTimestamp( true );
+
+ log.debug( "Index file packed at '{}'.", icf.getLocalPackedIndexPath( ) );
+ }
+ else
+ {
+ log.debug( "skip packed index creation" );
+ }
+ }
+ else
+ {
+ log.debug( "skip packed index creation" );
+ }
+ }
+ catch ( IOException e )
+ {
+ log.error( "Error occurred while executing indexing task '{}': {}", indexingTask, e.getMessage( ) );
+ throw new TaskExecutionException( "Error occurred while executing indexing task '" + indexingTask + "'",
+ e );
+ }
+ }
+
+ public void setIndexPacker( IndexPacker indexPacker )
+ {
+ this.indexPacker = indexPacker;
+ }
+
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-scheduler/src/main/java/org/apache/archiva/scheduler/indexing/maven/DefaultDownloadRemoteIndexScheduler.java b/archiva-modules/archiva-maven/archiva-maven-scheduler/src/main/java/org/apache/archiva/scheduler/indexing/maven/DefaultDownloadRemoteIndexScheduler.java
new file mode 100644
index 000000000..2496c1d81
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-scheduler/src/main/java/org/apache/archiva/scheduler/indexing/maven/DefaultDownloadRemoteIndexScheduler.java
@@ -0,0 +1,211 @@
+package org.apache.archiva.scheduler.indexing.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.archiva.proxy.ProxyRegistry;
+import org.apache.archiva.proxy.model.NetworkProxy;
+import org.apache.archiva.scheduler.indexing.DownloadRemoteIndexException;
+import org.apache.archiva.scheduler.indexing.DownloadRemoteIndexScheduler;
+import org.apache.archiva.admin.model.RepositoryAdminException;
+import org.apache.archiva.configuration.ArchivaConfiguration;
+import org.apache.archiva.configuration.ConfigurationEvent;
+import org.apache.archiva.configuration.ConfigurationListener;
+import org.apache.archiva.indexer.UnsupportedBaseContextException;
+import org.apache.archiva.proxy.maven.WagonFactory;
+import org.apache.archiva.repository.RepositoryRegistry;
+import org.apache.archiva.repository.features.RemoteIndexFeature;
+import org.apache.commons.lang.StringUtils;
+import org.apache.maven.index.context.IndexingContext;
+import org.apache.maven.index.packer.IndexPacker;
+import org.apache.maven.index.updater.IndexUpdater;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.scheduling.TaskScheduler;
+import org.springframework.scheduling.support.CronTrigger;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+import javax.inject.Inject;
+import javax.inject.Named;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+/**
+ * @author Olivier Lamy
+ * @since 1.4-M1
+ */
+@Service( "downloadRemoteIndexScheduler#default" )
+public class DefaultDownloadRemoteIndexScheduler
+ implements ConfigurationListener, DownloadRemoteIndexScheduler
+{
+
+ private Logger log = LoggerFactory.getLogger( getClass() );
+
+ @Inject
+ @Named( value = "taskScheduler#indexDownloadRemote" )
+ private TaskScheduler taskScheduler;
+
+ @Inject
+ RepositoryRegistry repositoryRegistry;
+
+ @Inject
+ private ArchivaConfiguration archivaConfiguration;
+
+ @Inject
+ private WagonFactory wagonFactory;
+
+ @Inject
+ private IndexUpdater indexUpdater;
+
+ @Inject
+ private IndexPacker indexPacker;
+
+ @Inject
+ private ProxyRegistry proxyRegistry;
+
+ // store ids about currently running remote download : updated in DownloadRemoteIndexTask
+ private List<String> runningRemoteDownloadIds = new CopyOnWriteArrayList<String>();
+
+ @PostConstruct
+ public void startup()
+ throws
+ DownloadRemoteIndexException, UnsupportedBaseContextException {
+ archivaConfiguration.addListener( this );
+ // TODO add indexContexts even if null
+
+ for ( org.apache.archiva.repository.RemoteRepository remoteRepository : repositoryRegistry.getRemoteRepositories() )
+ {
+ String contextKey = "remote-" + remoteRepository.getId();
+ IndexingContext context = remoteRepository.getIndexingContext().getBaseContext(IndexingContext.class);
+ if ( context == null )
+ {
+ continue;
+ }
+ RemoteIndexFeature rif = remoteRepository.getFeature(RemoteIndexFeature.class).get();
+
+
+ // TODO record jobs from configuration
+ if ( rif.isDownloadRemoteIndex() && StringUtils.isNotEmpty(
+ remoteRepository.getSchedulingDefinition() ) )
+ {
+ boolean fullDownload = context.getIndexDirectoryFile().list().length == 0;
+ scheduleDownloadRemote( remoteRepository.getId(), false, fullDownload );
+ }
+ }
+
+
+ }
+
+ @Override
+ public void configurationEvent( ConfigurationEvent event )
+ {
+ // TODO remove jobs and add again
+ }
+
+
+ @Override
+ public void scheduleDownloadRemote( String repositoryId, boolean now, boolean fullDownload )
+ throws DownloadRemoteIndexException
+ {
+ org.apache.archiva.repository.RemoteRepository remoteRepo = repositoryRegistry.getRemoteRepository(repositoryId);
+
+ if ( remoteRepo == null )
+ {
+ log.warn( "ignore scheduleDownloadRemote for repo with id {} as not exists", repositoryId );
+ return;
+ }
+ if (!remoteRepo.supportsFeature(RemoteIndexFeature.class)) {
+ log.warn("ignore scheduleDownloadRemote for repo with id {}. Does not support remote index.", repositoryId);
+ return;
+ }
+ RemoteIndexFeature rif = remoteRepo.getFeature(RemoteIndexFeature.class).get();
+ NetworkProxy networkProxy = null;
+ if ( StringUtils.isNotBlank( rif.getProxyId() ) )
+ {
+ networkProxy = proxyRegistry.getNetworkProxy( rif.getProxyId() );
+ if ( networkProxy == null )
+ {
+ log.warn(
+ "your remote repository is configured to download remote index trought a proxy we cannot find id:{}",
+ rif.getProxyId() );
+ }
+ }
+
+ DownloadRemoteIndexTaskRequest downloadRemoteIndexTaskRequest = new DownloadRemoteIndexTaskRequest() //
+ .setRemoteRepository( remoteRepo ) //
+ .setNetworkProxy( networkProxy ) //
+ .setFullDownload( fullDownload ) //
+ .setWagonFactory( wagonFactory ) //
+ .setIndexUpdater( indexUpdater ) //
+ .setIndexPacker( this.indexPacker );
+
+ if ( now )
+ {
+ log.info( "schedule download remote index for repository {}", remoteRepo.getId() );
+ // do it now
+ taskScheduler.schedule(
+ new DownloadRemoteIndexTask( downloadRemoteIndexTaskRequest, this.runningRemoteDownloadIds ),
+ new Date() );
+ }
+ else
+ {
+ log.info( "schedule download remote index for repository {} with cron expression {}",
+ remoteRepo.getId(), remoteRepo.getSchedulingDefinition());
+ try
+ {
+ CronTrigger cronTrigger = new CronTrigger( remoteRepo.getSchedulingDefinition());
+ taskScheduler.schedule(
+ new DownloadRemoteIndexTask( downloadRemoteIndexTaskRequest, this.runningRemoteDownloadIds ),
+ cronTrigger );
+ }
+ catch ( IllegalArgumentException e )
+ {
+ log.warn( "Unable to schedule remote index download: {}", e.getLocalizedMessage() );
+ }
+
+ if ( rif.isDownloadRemoteIndexOnStartup() )
+ {
+ log.info(
+ "remote repository {} configured with downloadRemoteIndexOnStartup schedule now a download",
+ remoteRepo.getId() );
+ taskScheduler.schedule(
+ new DownloadRemoteIndexTask( downloadRemoteIndexTaskRequest, this.runningRemoteDownloadIds ),
+ new Date() );
+ }
+ }
+
+ }
+
+ public TaskScheduler getTaskScheduler()
+ {
+ return taskScheduler;
+ }
+
+ public void setTaskScheduler( TaskScheduler taskScheduler )
+ {
+ this.taskScheduler = taskScheduler;
+ }
+
+ @Override
+ public List<String> getRunningRemoteDownloadIds()
+ {
+ return runningRemoteDownloadIds;
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-scheduler/src/main/java/org/apache/archiva/scheduler/indexing/maven/DefaultIndexUpdateSideEffect.java b/archiva-modules/archiva-maven/archiva-maven-scheduler/src/main/java/org/apache/archiva/scheduler/indexing/maven/DefaultIndexUpdateSideEffect.java
new file mode 100644
index 000000000..581dbb2da
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-scheduler/src/main/java/org/apache/archiva/scheduler/indexing/maven/DefaultIndexUpdateSideEffect.java
@@ -0,0 +1,47 @@
+package org.apache.archiva.scheduler.indexing.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.index.context.IndexingContext;
+import org.apache.maven.index.updater.IndexUpdateSideEffect;
+import org.apache.maven.index_shaded.lucene.store.Directory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+/**
+ * Not doing much but required at least one implementation
+ *
+ * @since 3.0.0
+ */
+@Service
+public class DefaultIndexUpdateSideEffect
+ implements IndexUpdateSideEffect
+{
+ private static final Logger LOGGER = LoggerFactory.getLogger( DefaultIndexUpdateSideEffect.class );
+
+ @Override
+ public void updateIndex( Directory directory, IndexingContext indexingContext, boolean b )
+ {
+ LOGGER.info( "updating index: {} with directory: {}", //
+ indexingContext.getId(), //
+ directory.toString() );
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-scheduler/src/main/java/org/apache/archiva/scheduler/indexing/maven/DownloadRemoteIndexTask.java b/archiva-modules/archiva-maven/archiva-maven-scheduler/src/main/java/org/apache/archiva/scheduler/indexing/maven/DownloadRemoteIndexTask.java
new file mode 100644
index 000000000..3f794019e
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-scheduler/src/main/java/org/apache/archiva/scheduler/indexing/maven/DownloadRemoteIndexTask.java
@@ -0,0 +1,380 @@
+package org.apache.archiva.scheduler.indexing.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.archiva.proxy.maven.WagonFactory;
+import org.apache.archiva.proxy.maven.WagonFactoryRequest;
+import org.apache.archiva.proxy.model.NetworkProxy;
+import org.apache.archiva.repository.PasswordCredentials;
+import org.apache.archiva.repository.RemoteRepository;
+import org.apache.archiva.repository.RepositoryException;
+import org.apache.archiva.repository.RepositoryType;
+import org.apache.archiva.repository.features.RemoteIndexFeature;
+import org.apache.commons.lang.time.StopWatch;
+import org.apache.maven.index.context.IndexingContext;
+import org.apache.maven.index.updater.IndexUpdateRequest;
+import org.apache.maven.index.updater.IndexUpdateResult;
+import org.apache.maven.index.updater.IndexUpdater;
+import org.apache.maven.index.updater.ResourceFetcher;
+import org.apache.maven.index_shaded.lucene.index.IndexNotFoundException;
+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.AuthenticationInfo;
+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.proxy.ProxyInfo;
+import org.apache.maven.wagon.repository.Repository;
+import org.apache.maven.wagon.shared.http.AbstractHttpClientWagon;
+import org.apache.maven.wagon.shared.http.HttpConfiguration;
+import org.apache.maven.wagon.shared.http.HttpMethodConfiguration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Olivier Lamy
+ * @since 1.4-M1
+ */
+public class DownloadRemoteIndexTask
+ implements Runnable
+{
+ private Logger log = LoggerFactory.getLogger( getClass() );
+
+ private RemoteRepository remoteRepository;
+
+ private WagonFactory wagonFactory;
+
+ private NetworkProxy networkProxy;
+
+ private boolean fullDownload;
+
+ private List<String> runningRemoteDownloadIds;
+
+ private IndexUpdater indexUpdater;
+
+
+ public DownloadRemoteIndexTask( DownloadRemoteIndexTaskRequest downloadRemoteIndexTaskRequest,
+ List<String> runningRemoteDownloadIds )
+ {
+ this.remoteRepository = downloadRemoteIndexTaskRequest.getRemoteRepository();
+ this.wagonFactory = downloadRemoteIndexTaskRequest.getWagonFactory();
+ this.networkProxy = downloadRemoteIndexTaskRequest.getNetworkProxy();
+ this.fullDownload = downloadRemoteIndexTaskRequest.isFullDownload();
+ this.runningRemoteDownloadIds = runningRemoteDownloadIds;
+ this.indexUpdater = downloadRemoteIndexTaskRequest.getIndexUpdater();
+ }
+
+ @Override
+ public void run()
+ {
+
+ // so short lock : not sure we need it
+ synchronized ( this.runningRemoteDownloadIds )
+ {
+ if ( this.runningRemoteDownloadIds.contains( this.remoteRepository.getId() ) )
+ {
+ // skip it as it's running
+ log.info( "skip download index remote for repo {} it's already running",
+ this.remoteRepository.getId() );
+ return;
+ }
+ this.runningRemoteDownloadIds.add( this.remoteRepository.getId() );
+ }
+ Path tempIndexDirectory = null;
+ StopWatch stopWatch = new StopWatch();
+ stopWatch.start();
+ try
+ {
+ log.info( "start download remote index for remote repository {}", this.remoteRepository.getId() );
+ if (this.remoteRepository.getIndexingContext()==null) {
+ throw new IndexNotFoundException("No index context set for repository "+remoteRepository.getId());
+ }
+ if (this.remoteRepository.getType()!= RepositoryType.MAVEN) {
+ throw new RepositoryException("Bad repository type");
+ }
+ if (!this.remoteRepository.supportsFeature(RemoteIndexFeature.class)) {
+ throw new RepositoryException("Repository does not support RemotIndexFeature "+remoteRepository.getId());
+ }
+ RemoteIndexFeature rif = this.remoteRepository.getFeature(RemoteIndexFeature.class).get();
+ IndexingContext indexingContext = this.remoteRepository.getIndexingContext().getBaseContext(IndexingContext.class);
+ // create a temp directory to download files
+ tempIndexDirectory = Paths.get(indexingContext.getIndexDirectoryFile().getParent(), ".tmpIndex" );
+ Path indexCacheDirectory = Paths.get( indexingContext.getIndexDirectoryFile().getParent(), ".indexCache" );
+ Files.createDirectories( indexCacheDirectory );
+ if ( Files.exists(tempIndexDirectory) )
+ {
+ org.apache.archiva.common.utils.FileUtils.deleteDirectory( tempIndexDirectory );
+ }
+ Files.createDirectories( tempIndexDirectory );
+ tempIndexDirectory.toFile().deleteOnExit();
+ String baseIndexUrl = indexingContext.getIndexUpdateUrl();
+
+ String wagonProtocol = this.remoteRepository.getLocation().getScheme();
+
+ final StreamWagon wagon = (StreamWagon) wagonFactory.getWagon(
+ new WagonFactoryRequest( wagonProtocol, this.remoteRepository.getExtraHeaders() ).networkProxy(
+ this.networkProxy )
+ );
+ // FIXME olamy having 2 config values
+ wagon.setReadTimeout( (int)rif.getDownloadTimeout().toMillis());
+ wagon.setTimeout( (int)remoteRepository.getTimeout().toMillis());
+
+ if ( wagon instanceof AbstractHttpClientWagon )
+ {
+ HttpConfiguration httpConfiguration = new HttpConfiguration();
+ HttpMethodConfiguration httpMethodConfiguration = new HttpMethodConfiguration();
+ httpMethodConfiguration.setUsePreemptive( true );
+ httpMethodConfiguration.setReadTimeout( (int)rif.getDownloadTimeout().toMillis() );
+ httpConfiguration.setGet( httpMethodConfiguration );
+ AbstractHttpClientWagon.class.cast( wagon ).setHttpConfiguration( httpConfiguration );
+ }
+
+ wagon.addTransferListener( new DownloadListener() );
+ ProxyInfo proxyInfo = null;
+ if ( this.networkProxy != null )
+ {
+ proxyInfo = new ProxyInfo();
+ proxyInfo.setType( this.networkProxy.getProtocol() );
+ proxyInfo.setHost( this.networkProxy.getHost() );
+ proxyInfo.setPort( this.networkProxy.getPort() );
+ proxyInfo.setUserName( this.networkProxy.getUsername() );
+ proxyInfo.setPassword( this.networkProxy.getPassword() );
+ }
+ AuthenticationInfo authenticationInfo = null;
+ if ( this.remoteRepository.getLoginCredentials()!=null && this.remoteRepository.getLoginCredentials() instanceof PasswordCredentials )
+ {
+ PasswordCredentials creds = (PasswordCredentials) this.remoteRepository.getLoginCredentials();
+ authenticationInfo = new AuthenticationInfo();
+ authenticationInfo.setUserName( creds.getUsername());
+ authenticationInfo.setPassword( new String(creds.getPassword()) );
+ }
+ log.debug("Connection to {}, authInfo={}", this.remoteRepository.getId(), authenticationInfo);
+ wagon.connect( new Repository( this.remoteRepository.getId(), baseIndexUrl ), authenticationInfo,
+ proxyInfo );
+
+ Path indexDirectory = indexingContext.getIndexDirectoryFile().toPath();
+ if ( !Files.exists(indexDirectory) )
+ {
+ Files.createDirectories( indexDirectory );
+ }
+ log.debug("Downloading index file to {}", indexDirectory);
+ log.debug("Index cache dir {}", indexCacheDirectory);
+
+ ResourceFetcher resourceFetcher =
+ new WagonResourceFetcher( log, tempIndexDirectory, wagon, remoteRepository );
+ IndexUpdateRequest request = new IndexUpdateRequest( indexingContext, resourceFetcher );
+ request.setForceFullUpdate( this.fullDownload );
+ request.setLocalIndexCacheDir( indexCacheDirectory.toFile() );
+
+ IndexUpdateResult result = this.indexUpdater.fetchAndUpdateIndex(request);
+ log.debug("Update result success: {}", result.isSuccessful());
+ stopWatch.stop();
+ log.info( "time update index from remote for repository {}: {}ms", this.remoteRepository.getId(),
+ ( stopWatch.getTime() ) );
+
+ // index packing optionnal ??
+ //IndexPackingRequest indexPackingRequest =
+ // new IndexPackingRequest( indexingContext, indexingContext.getIndexDirectoryFile() );
+ //indexPacker.packIndex( indexPackingRequest );
+ indexingContext.updateTimestamp( true );
+
+ }
+ catch ( Exception e )
+ {
+ log.error( e.getMessage(), e );
+ throw new RuntimeException( e.getMessage(), e );
+ }
+ finally
+ {
+ deleteDirectoryQuiet( tempIndexDirectory );
+ this.runningRemoteDownloadIds.remove( this.remoteRepository.getId() );
+ }
+ log.info( "end download remote index for remote repository {}", this.remoteRepository.getId() );
+ }
+
+ private void deleteDirectoryQuiet( Path f )
+ {
+ try
+ {
+ org.apache.archiva.common.utils.FileUtils.deleteDirectory( f );
+ }
+ catch ( IOException e )
+ {
+ log.warn( "skip error delete {} : {}", f, e.getMessage() );
+ }
+ }
+
+
+ private static final class DownloadListener
+ implements TransferListener
+ {
+ private Logger log = LoggerFactory.getLogger( getClass() );
+
+ private String resourceName;
+
+ private long startTime;
+
+ private int totalLength = 0;
+
+ @Override
+ public void transferInitiated( TransferEvent transferEvent )
+ {
+ startTime = System.currentTimeMillis();
+ resourceName = transferEvent.getResource().getName();
+ log.debug( "initiate transfer of {}", resourceName );
+ }
+
+ @Override
+ public void transferStarted( TransferEvent transferEvent )
+ {
+ this.totalLength = 0;
+ resourceName = transferEvent.getResource().getName();
+ log.info("Transferring: {}, {}", transferEvent.getResource().getContentLength(), transferEvent.getLocalFile().toString());
+ log.info( "start transfer of {}", transferEvent.getResource().getName() );
+ }
+
+ @Override
+ public void transferProgress( TransferEvent transferEvent, byte[] buffer, int length )
+ {
+ log.debug( "transfer of {} : {}/{}", transferEvent.getResource().getName(), buffer.length, length );
+ this.totalLength += length;
+ }
+
+ @Override
+ public void transferCompleted( TransferEvent transferEvent )
+ {
+ resourceName = transferEvent.getResource().getName();
+ long endTime = System.currentTimeMillis();
+ log.info( "end of transfer file {}: {}b, {}ms", transferEvent.getResource().getName(),
+ this.totalLength, ( endTime - startTime ) );
+ }
+
+ @Override
+ public void transferError( TransferEvent transferEvent )
+ {
+ log.info( "error of transfer file {}: {}", transferEvent.getResource().getName(),
+ transferEvent.getException().getMessage(), transferEvent.getException() );
+ }
+
+ @Override
+ public void debug( String message )
+ {
+ log.debug( "transfer debug {}", message );
+ }
+ }
+
+ private static class WagonResourceFetcher
+ implements ResourceFetcher
+ {
+
+ Logger log;
+
+ Path tempIndexDirectory;
+
+ Wagon wagon;
+
+ RemoteRepository remoteRepository;
+
+ private WagonResourceFetcher( Logger log, Path tempIndexDirectory, Wagon wagon,
+ RemoteRepository remoteRepository )
+ {
+ this.log = log;
+ this.tempIndexDirectory = tempIndexDirectory;
+ this.wagon = wagon;
+ this.remoteRepository = remoteRepository;
+ }
+
+ @Override
+ public void connect( String id, String url )
+ throws IOException
+ {
+ //no op
+ }
+
+ @Override
+ public void disconnect()
+ throws IOException
+ {
+ // no op
+ }
+
+ @Override
+ public InputStream retrieve( String name )
+ throws IOException, FileNotFoundException
+ {
+ try
+ {
+ log.info( "index update retrieve file, name:{}", name );
+ Path file = tempIndexDirectory.resolve( name );
+ Files.deleteIfExists( file );
+ file.toFile().deleteOnExit();
+ wagon.get( addParameters( name, this.remoteRepository ), file.toFile() );
+ return Files.newInputStream( file );
+ }
+ catch ( AuthorizationException | TransferFailedException e )
+ {
+ throw new IOException( e.getMessage(), e );
+ }
+ catch ( ResourceDoesNotExistException e )
+ {
+ FileNotFoundException fnfe = new FileNotFoundException( e.getMessage() );
+ fnfe.initCause( e );
+ throw fnfe;
+ }
+ }
+
+ // FIXME remove crappy copy/paste
+ protected String addParameters( String path, RemoteRepository remoteRepository )
+ {
+ if ( remoteRepository.getExtraParameters().isEmpty() )
+ {
+ return path;
+ }
+
+ boolean question = false;
+
+ StringBuilder res = new StringBuilder( path == null ? "" : path );
+
+ for ( Map.Entry<String, String> entry : remoteRepository.getExtraParameters().entrySet() )
+ {
+ if ( !question )
+ {
+ res.append( '?' ).append( entry.getKey() ).append( '=' ).append( entry.getValue() );
+ }
+ }
+
+ return res.toString();
+ }
+
+ }
+
+
+}
+
diff --git a/archiva-modules/archiva-maven/archiva-maven-scheduler/src/main/java/org/apache/archiva/scheduler/indexing/maven/DownloadRemoteIndexTaskRequest.java b/archiva-modules/archiva-maven/archiva-maven-scheduler/src/main/java/org/apache/archiva/scheduler/indexing/maven/DownloadRemoteIndexTaskRequest.java
new file mode 100644
index 000000000..784709345
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-scheduler/src/main/java/org/apache/archiva/scheduler/indexing/maven/DownloadRemoteIndexTaskRequest.java
@@ -0,0 +1,116 @@
+package org.apache.archiva.scheduler.indexing.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.archiva.proxy.maven.WagonFactory;
+import org.apache.archiva.proxy.model.NetworkProxy;
+import org.apache.archiva.repository.RemoteRepository;
+import org.apache.maven.index.packer.IndexPacker;
+import org.apache.maven.index.updater.IndexUpdater;
+
+/**
+ * @author Olivier Lamy
+ * @since 1.4-M1
+ */
+public class DownloadRemoteIndexTaskRequest
+{
+ private RemoteRepository remoteRepository;
+
+ private WagonFactory wagonFactory;
+
+ private NetworkProxy networkProxy;
+
+ private boolean fullDownload;
+
+ private IndexUpdater indexUpdater;
+
+ private IndexPacker indexPacker;
+
+ public DownloadRemoteIndexTaskRequest()
+ {
+ // no op
+ }
+
+ public RemoteRepository getRemoteRepository()
+ {
+ return remoteRepository;
+ }
+
+ public DownloadRemoteIndexTaskRequest setRemoteRepository( RemoteRepository remoteRepository )
+ {
+ this.remoteRepository = remoteRepository;
+ return this;
+ }
+
+
+ public WagonFactory getWagonFactory()
+ {
+ return wagonFactory;
+ }
+
+ public DownloadRemoteIndexTaskRequest setWagonFactory( WagonFactory wagonFactory )
+ {
+ this.wagonFactory = wagonFactory;
+ return this;
+ }
+
+ public NetworkProxy getNetworkProxy()
+ {
+ return networkProxy;
+ }
+
+ public DownloadRemoteIndexTaskRequest setNetworkProxy( NetworkProxy networkProxy )
+ {
+ this.networkProxy = networkProxy;
+ return this;
+ }
+
+ public boolean isFullDownload()
+ {
+ return fullDownload;
+ }
+
+ public DownloadRemoteIndexTaskRequest setFullDownload( boolean fullDownload )
+ {
+ this.fullDownload = fullDownload;
+ return this;
+ }
+
+ public IndexUpdater getIndexUpdater()
+ {
+ return indexUpdater;
+ }
+
+ public DownloadRemoteIndexTaskRequest setIndexUpdater( IndexUpdater indexUpdater )
+ {
+ this.indexUpdater = indexUpdater;
+ return this;
+ }
+
+ public IndexPacker getIndexPacker()
+ {
+ return indexPacker;
+ }
+
+ public DownloadRemoteIndexTaskRequest setIndexPacker( IndexPacker indexPacker )
+ {
+ this.indexPacker = indexPacker;
+ return this;
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-scheduler/src/main/resources/META-INF/spring-context.xml b/archiva-modules/archiva-maven/archiva-maven-scheduler/src/main/resources/META-INF/spring-context.xml
new file mode 100644
index 000000000..ddb6a1592
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-scheduler/src/main/resources/META-INF/spring-context.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.
+ -->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+ http://www.springframework.org/schema/context
+ http://www.springframework.org/schema/context/spring-context-3.0.xsd"
+ default-lazy-init="false">
+
+ <context:annotation-config/>
+ <context:component-scan base-package="org.apache.archiva.scheduler.indexing,org.apache.maven.index"/>
+
+
+
+
+ <bean name="taskQueueExecutor#indexing" class="org.apache.archiva.redback.components.taskqueue.execution.ThreadedTaskQueueExecutor">
+ <property name="executor" ref="taskExecutor#indexing"/>
+ <property name="queue" ref="taskQueue#indexing"/>
+ <property name="name" value="indexing"/>
+ </bean>
+
+ <bean name="taskScheduler#indexDownloadRemote"
+ class="org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler">
+ <property name="poolSize" value="4"/>
+ <property name="threadGroupName" value="indexDownloadRemote"/>
+ </bean>
+
+
+</beans> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/index-updates/nexus-maven-repository-index.gz b/archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/index-updates/nexus-maven-repository-index.gz
new file mode 100644
index 000000000..1bf73c9dc
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/index-updates/nexus-maven-repository-index.gz
Binary files differ
diff --git a/archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/index-updates/nexus-maven-repository-index.properties b/archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/index-updates/nexus-maven-repository-index.properties
new file mode 100644
index 000000000..1d81aaf59
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/index-updates/nexus-maven-repository-index.properties
@@ -0,0 +1,36 @@
+#Sun Sep 25 09:15:00 CEST 2011
+nexus.index.id=test-repo
+nexus.index.chain-id=1316094851802
+nexus.index.timestamp=20110925071457.200 +0000
+nexus.index.incremental-19=39
+nexus.index.incremental-18=40
+nexus.index.incremental-17=41
+nexus.index.incremental-16=42
+nexus.index.incremental-15=43
+nexus.index.incremental-14=44
+nexus.index.incremental-13=45
+nexus.index.incremental-9=49
+nexus.index.incremental-12=46
+nexus.index.incremental-8=50
+nexus.index.incremental-11=47
+nexus.index.incremental-7=51
+nexus.index.incremental-10=48
+nexus.index.incremental-6=52
+nexus.index.incremental-5=53
+nexus.index.incremental-4=54
+nexus.index.incremental-3=55
+nexus.index.incremental-2=56
+nexus.index.last-incremental=58
+nexus.index.incremental-1=57
+nexus.index.incremental-0=58
+nexus.index.incremental-29=29
+nexus.index.incremental-28=30
+nexus.index.incremental-27=31
+nexus.index.incremental-26=32
+nexus.index.incremental-25=33
+nexus.index.incremental-24=34
+nexus.index.time=20110925071457.200 +0000
+nexus.index.incremental-23=35
+nexus.index.incremental-22=36
+nexus.index.incremental-21=37
+nexus.index.incremental-20=38
diff --git a/archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/index-updates/nexus-maven-repository-index.zip b/archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/index-updates/nexus-maven-repository-index.zip
new file mode 100644
index 000000000..8f82a0dca
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/index-updates/nexus-maven-repository-index.zip
Binary files differ
diff --git a/archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/java/org/apache/archiva/scheduler/indexing/maven/ArchivaIndexingTaskExecutorTest.java b/archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/java/org/apache/archiva/scheduler/indexing/maven/ArchivaIndexingTaskExecutorTest.java
new file mode 100644
index 000000000..758568ba9
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/java/org/apache/archiva/scheduler/indexing/maven/ArchivaIndexingTaskExecutorTest.java
@@ -0,0 +1,352 @@
+package org.apache.archiva.scheduler.indexing.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 junit.framework.TestCase;
+import org.apache.archiva.indexer.ArchivaIndexingContext;
+import org.apache.archiva.indexer.UnsupportedBaseContextException;
+import org.apache.archiva.repository.BasicManagedRepository;
+import org.apache.archiva.repository.ManagedRepository;
+import org.apache.archiva.repository.ReleaseScheme;
+import org.apache.archiva.repository.RepositoryRegistry;
+import org.apache.archiva.repository.features.IndexCreationFeature;
+import org.apache.archiva.scheduler.indexing.ArtifactIndexingTask;
+import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
+import org.apache.maven.index.ArtifactInfo;
+import org.apache.maven.index.FlatSearchRequest;
+import org.apache.maven.index.FlatSearchResponse;
+import org.apache.maven.index.Indexer;
+import org.apache.maven.index.MAVEN;
+import org.apache.maven.index.context.IndexingContext;
+import org.apache.maven.index.expr.SourcedSearchExpression;
+import org.apache.maven.index.expr.StringSearchExpression;
+import org.apache.maven.index.updater.DefaultIndexUpdater;
+import org.apache.maven.index.updater.IndexUpdateRequest;
+import org.apache.maven.index.updater.IndexUpdater;
+import org.apache.maven.index_shaded.lucene.search.BooleanClause;
+import org.apache.maven.index_shaded.lucene.search.BooleanQuery;
+import org.apache.maven.index_shaded.lucene.search.IndexSearcher;
+import org.apache.maven.index_shaded.lucene.search.TopDocs;
+import org.assertj.core.api.Assertions;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.test.context.ContextConfiguration;
+
+import javax.inject.Inject;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Set;
+
+/**
+ * ArchivaIndexingTaskExecutorTest
+ */
+@RunWith( ArchivaSpringJUnit4ClassRunner.class )
+@ContextConfiguration( locations = { "classpath*:/META-INF/spring-context.xml", "classpath*:/spring-context.xml" } )
+public class ArchivaIndexingTaskExecutorTest
+ extends TestCase
+{
+ @Inject
+ private ArchivaIndexingTaskExecutor indexingExecutor;
+
+ @Inject
+ RepositoryRegistry repositoryRegistry;
+
+ @Inject
+ private IndexUpdater indexUpdater;
+
+ private ManagedRepository repo;
+
+ @Inject
+ private Indexer indexer;
+
+ @Before
+ @Override
+ public void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ Path baseDir = Paths.get(System.getProperty("basedir"), "target/test-classes").toAbsolutePath();
+ BasicManagedRepository repositoryConfig = new BasicManagedRepository( "test-repo", "Test Repository", baseDir);
+ Path repoLocation = baseDir.resolve("test-repo" );
+ repositoryConfig.setLocation(repoLocation.toUri() );
+ repositoryConfig.setLayout( "default" );
+ repositoryConfig.setScanned( true );
+ repositoryConfig.addActiveReleaseScheme( ReleaseScheme.RELEASE );
+ repositoryConfig.removeActiveReleaseScheme( ReleaseScheme.SNAPSHOT );
+ repositoryRegistry.putRepository(repositoryConfig);
+ repo = repositoryRegistry.getManagedRepository( repositoryConfig.getId() );
+ }
+
+ @After
+ @Override
+ public void tearDown()
+ throws Exception
+ {
+
+ repositoryRegistry.destroy();
+ /*
+ removeIndexingContext with true cleanup files.
+ // delete created index in the repository
+ File indexDir = new File( repositoryConfig.getLocation(), ".indexer" );
+ FileUtils.deleteDirectory( indexDir );
+ assertFalse( indexDir.exists() );
+
+ indexDir = new File( repositoryConfig.getLocation(), ".index" );
+ FileUtils.deleteDirectory( indexDir );
+ assertFalse( indexDir.exists() );
+ */
+ super.tearDown();
+ }
+
+ protected IndexingContext getIndexingContext() throws UnsupportedBaseContextException {
+ assert repo != null;
+ ArchivaIndexingContext ctx = repo.getIndexingContext();
+ assert ctx != null;
+ return ctx.getBaseContext(IndexingContext.class);
+ }
+
+ @Test
+ public void testAddArtifactToIndex()
+ throws Exception
+ {
+ Path basePath = repo.getLocalPath();
+ Path artifactFile = basePath.resolve(
+ "org/apache/archiva/archiva-index-methods-jar-test/1.0/archiva-index-methods-jar-test-1.0.jar" );
+
+ ArtifactIndexingTask task =
+ new ArtifactIndexingTask( repo, artifactFile, ArtifactIndexingTask.Action.ADD,
+ repo.getIndexingContext());
+
+ indexingExecutor.executeTask( task );
+
+ task = new ArtifactIndexingTask( repo, null, ArtifactIndexingTask.Action.FINISH,
+ repo.getIndexingContext() );
+ indexingExecutor.executeTask( task );
+
+ BooleanQuery.Builder queryBuilder = new BooleanQuery.Builder( );
+ queryBuilder.add( indexer.constructQuery( MAVEN.GROUP_ID, new StringSearchExpression( "org.apache.archiva" ) ),
+ BooleanClause.Occur.SHOULD );
+ queryBuilder.add(
+ indexer.constructQuery( MAVEN.ARTIFACT_ID, new StringSearchExpression( "archiva-index-methods-jar-test" ) ),
+ BooleanClause.Occur.SHOULD );
+ BooleanQuery q = queryBuilder.build();
+
+ FlatSearchRequest request = new FlatSearchRequest( q , getIndexingContext());
+ FlatSearchResponse response = indexer.searchFlat( request );
+
+ assertTrue( Files.exists(basePath.resolve( ".indexer" )) );
+ assertTrue( Files.exists(basePath.resolve(".index" )) );
+ assertEquals( 1, response.getTotalHitsCount());
+
+ Set<ArtifactInfo> results = response.getResults();
+
+ ArtifactInfo artifactInfo = results.iterator().next();
+ assertEquals( "org.apache.archiva", artifactInfo.getGroupId() );
+ assertEquals( "archiva-index-methods-jar-test", artifactInfo.getArtifactId() );
+ assertEquals( "test-repo", artifactInfo.getRepository() );
+
+ }
+
+ @Test
+ public void testUpdateArtifactInIndex()
+ throws Exception
+ {
+ Path basePath = repo.getLocalPath();
+ Path artifactFile = basePath.resolve(
+ "org/apache/archiva/archiva-index-methods-jar-test/1.0/archiva-index-methods-jar-test-1.0.jar" );
+
+ ArtifactIndexingTask task =
+ new ArtifactIndexingTask( repo, artifactFile, ArtifactIndexingTask.Action.ADD,
+ repo.getIndexingContext() );
+
+ indexingExecutor.executeTask( task );
+ indexingExecutor.executeTask( task );
+
+ BooleanQuery.Builder qb = new BooleanQuery.Builder();
+ qb.add( indexer.constructQuery( MAVEN.GROUP_ID, new StringSearchExpression( "org.apache.archiva" ) ),
+ BooleanClause.Occur.SHOULD );
+ qb.add(
+ indexer.constructQuery( MAVEN.ARTIFACT_ID, new StringSearchExpression( "archiva-index-methods-jar-test" ) ),
+ BooleanClause.Occur.SHOULD );
+
+ IndexingContext ctx = getIndexingContext();
+
+ IndexSearcher searcher = ctx.acquireIndexSearcher();
+ TopDocs topDocs = searcher.search( qb.build(), 10 );
+
+ //searcher.close();
+ ctx.releaseIndexSearcher( searcher );
+
+ assertTrue( Files.exists(basePath.resolve(".indexer" )) );
+ assertTrue( Files.exists(basePath.resolve(".index" )) );
+
+ // should only return 1 hit!
+ assertEquals( 1, topDocs.totalHits );
+ }
+
+ @Test
+ public void testRemoveArtifactFromIndex()
+ throws Exception
+ {
+ Path basePath = repo.getLocalPath();
+ Path artifactFile = basePath.resolve(
+ "org/apache/archiva/archiva-index-methods-jar-test/1.0/archiva-index-methods-jar-test-1.0.jar" );
+
+ ArtifactIndexingTask task =
+ new ArtifactIndexingTask( repo, artifactFile, ArtifactIndexingTask.Action.ADD,
+ repo.getIndexingContext() );
+
+ // add artifact to index
+ indexingExecutor.executeTask( task );
+
+ BooleanQuery.Builder qb = new BooleanQuery.Builder();
+ qb.add( indexer.constructQuery( MAVEN.GROUP_ID, new SourcedSearchExpression( "org.apache.archiva" ) ),
+ BooleanClause.Occur.SHOULD );
+ //q.add(
+ // indexer.constructQuery( MAVEN.ARTIFACT_ID, new SourcedSearchExpression( "archiva-index-methods-jar-test" ) ),
+ // Occur.SHOULD );
+
+ IndexingContext ctx = repo.getIndexingContext( ).getBaseContext( IndexingContext.class );
+ FlatSearchRequest flatSearchRequest =
+ new FlatSearchRequest( qb.build(), ctx );
+
+ FlatSearchResponse response = indexer.searchFlat( flatSearchRequest );
+
+ assertTrue( Files.exists(basePath.resolve(".indexer" )) );
+ assertTrue( Files.exists(basePath.resolve( ".index" )) );
+
+ // should return 1 hit
+ assertEquals( 1, response.getTotalHitsCount() );
+
+ // remove added artifact from index
+ task = new ArtifactIndexingTask( repo, artifactFile, ArtifactIndexingTask.Action.DELETE,
+ repo.getIndexingContext());
+ indexingExecutor.executeTask( task );
+
+ task = new ArtifactIndexingTask( repo, artifactFile, ArtifactIndexingTask.Action.FINISH,
+ repo.getIndexingContext() );
+ indexingExecutor.executeTask( task );
+
+ qb = new BooleanQuery.Builder();
+ qb.add( indexer.constructQuery( MAVEN.GROUP_ID, new SourcedSearchExpression( "org.apache.archiva" ) ),
+ BooleanClause.Occur.SHOULD );
+ qb.add( indexer.constructQuery( MAVEN.ARTIFACT_ID,
+ new SourcedSearchExpression( "archiva-index-methods-jar-test" ) ),
+ BooleanClause.Occur.SHOULD );
+
+ assertTrue( Files.exists(basePath.resolve( ".indexer" )) );
+ assertTrue( Files.exists(basePath.resolve(".index" )) );
+
+ flatSearchRequest = new FlatSearchRequest( qb.build(), getIndexingContext() );
+
+ response = indexer.searchFlat( flatSearchRequest );
+ // artifact should have been removed from the index!
+ assertEquals( 0, response.getTotalHitsCount() );//.totalHits );
+
+ // TODO: test it was removed from the packaged index also
+ }
+
+ @Test
+ public void testPackagedIndex()
+ throws Exception
+ {
+
+ Path basePath = repo.getLocalPath();
+ IndexCreationFeature icf = repo.getFeature( IndexCreationFeature.class ).get();
+ Path packedIndexDirectory = icf.getLocalPackedIndexPath();
+ Path indexerDirectory = icf.getLocalIndexPath();
+
+ for (Path dir : new Path[] { packedIndexDirectory, indexerDirectory }) {
+ Files.list(dir).filter(path -> path.getFileName().toString().startsWith("nexus-maven-repository-index"))
+ .forEach(path ->
+ {
+ try {
+ System.err.println("Deleting " + path);
+ Files.delete(path);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ });
+ }
+
+
+
+
+ Path artifactFile = basePath.resolve(
+ "org/apache/archiva/archiva-index-methods-jar-test/1.0/archiva-index-methods-jar-test-1.0.jar" );
+ ArtifactIndexingTask task =
+ new ArtifactIndexingTask( repo, artifactFile, ArtifactIndexingTask.Action.ADD,
+ repo.getIndexingContext() );
+ task.setExecuteOnEntireRepo( false );
+
+ indexingExecutor.executeTask( task );
+
+ task = new ArtifactIndexingTask( repo, null, ArtifactIndexingTask.Action.FINISH,
+ repo.getIndexingContext() );
+
+ task.setExecuteOnEntireRepo( false );
+
+ indexingExecutor.executeTask( task );
+
+ assertTrue( Files.exists(packedIndexDirectory) );
+ assertTrue( Files.exists(indexerDirectory) );
+
+ // test packed index file creation
+ //no more zip
+ //Assertions.assertThat(new File( indexerDirectory, "nexus-maven-repository-index.zip" )).exists();
+ Assertions.assertThat( Files.exists(packedIndexDirectory.resolve("nexus-maven-repository-index.properties" ) ));
+ Assertions.assertThat( Files.exists(packedIndexDirectory.resolve("nexus-maven-repository-index.gz" ) ));
+ assertFalse( Files.exists(packedIndexDirectory.resolve("nexus-maven-repository-index.1.gz" ) ));
+
+ // unpack .zip index
+ //unzipIndex( indexerDirectory.getPath(), destDir.getPath() );
+
+ DefaultIndexUpdater.FileFetcher fetcher = new DefaultIndexUpdater.FileFetcher( packedIndexDirectory.toFile() );
+ IndexUpdateRequest updateRequest = new IndexUpdateRequest( getIndexingContext(), fetcher );
+ //updateRequest.setLocalIndexCacheDir( indexerDirectory );
+ indexUpdater.fetchAndUpdateIndex( updateRequest );
+
+ BooleanQuery.Builder qb = new BooleanQuery.Builder();
+ qb.add( indexer.constructQuery( MAVEN.GROUP_ID, new StringSearchExpression( "org.apache.archiva" ) ),
+ BooleanClause.Occur.SHOULD );
+ qb.add(
+ indexer.constructQuery( MAVEN.ARTIFACT_ID, new StringSearchExpression( "archiva-index-methods-jar-test" ) ),
+ BooleanClause.Occur.SHOULD );
+
+ FlatSearchRequest request = new FlatSearchRequest( qb.build(), getIndexingContext() );
+ FlatSearchResponse response = indexer.searchFlat( request );
+
+ assertEquals( 1, response.getTotalHitsCount() );
+ Set<ArtifactInfo> results = response.getResults();
+
+ ArtifactInfo artifactInfo = results.iterator().next();
+ assertEquals( "org.apache.archiva", artifactInfo.getGroupId() );
+ assertEquals( "archiva-index-methods-jar-test", artifactInfo.getArtifactId() );
+ assertEquals( "test-repo", artifactInfo.getRepository() );
+
+
+ }
+
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/java/org/apache/archiva/scheduler/indexing/maven/DownloadRemoteIndexTaskTest.java b/archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/java/org/apache/archiva/scheduler/indexing/maven/DownloadRemoteIndexTaskTest.java
new file mode 100644
index 000000000..01921e45d
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/java/org/apache/archiva/scheduler/indexing/maven/DownloadRemoteIndexTaskTest.java
@@ -0,0 +1,187 @@
+package org.apache.archiva.scheduler.indexing.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.archiva.admin.model.beans.RemoteRepository;
+import org.apache.archiva.admin.model.remote.RemoteRepositoryAdmin;
+import org.apache.archiva.common.utils.FileUtils;
+import org.apache.archiva.repository.RepositoryRegistry;
+import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
+import org.apache.maven.index.FlatSearchRequest;
+import org.apache.maven.index.FlatSearchResponse;
+import org.apache.maven.index.Indexer;
+import org.apache.maven.index.MAVEN;
+import org.apache.maven.index.context.IndexingContext;
+import org.apache.maven.index.expr.StringSearchExpression;
+import org.apache.maven.index_shaded.lucene.search.BooleanClause;
+import org.apache.maven.index_shaded.lucene.search.BooleanQuery;
+import org.assertj.core.api.Assertions;
+import org.eclipse.jetty.server.HttpConnectionFactory;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.ServerConnector;
+import org.eclipse.jetty.servlet.DefaultServlet;
+import org.eclipse.jetty.servlet.ServletContextHandler;
+import org.eclipse.jetty.servlet.ServletHolder;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
+import org.springframework.test.context.ContextConfiguration;
+
+import javax.inject.Inject;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.Locale;
+import java.util.concurrent.TimeUnit;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * @author Olivier Lamy
+ */
+@RunWith( ArchivaSpringJUnit4ClassRunner.class )
+@ContextConfiguration( locations = { "classpath*:/META-INF/spring-context.xml", "classpath*:/spring-context.xml" } )
+public class DownloadRemoteIndexTaskTest
+{
+
+ private Server server;
+ private ServerConnector serverConnector;
+
+ private int port;
+
+ private Logger log = LoggerFactory.getLogger( getClass() );
+
+ @Inject
+ RemoteRepositoryAdmin remoteRepositoryAdmin;
+
+ @Inject
+ DefaultDownloadRemoteIndexScheduler downloadRemoteIndexScheduler;
+
+ @Inject
+ Indexer indexer;
+
+ @Inject
+ RepositoryRegistry repositoryRegistry;
+
+ @Before
+ public void initialize()
+ throws Exception
+ {
+ Path cfgFile = Paths.get("target/appserver-base/conf/archiva.xml");
+ if (Files.exists(cfgFile)) {
+ Files.delete(cfgFile);
+ }
+ try {
+ remoteRepositoryAdmin.deleteRemoteRepository("test-repo-re", null);
+ } catch (Exception e) {
+ // Ignore
+ }
+ server = new Server( );
+ serverConnector = new ServerConnector( server, new HttpConnectionFactory());
+ server.addConnector( serverConnector );
+ createContext( server, Paths.get( "src/test/" ) );
+ this.server.start();
+ this.port = serverConnector.getLocalPort();
+ log.info( "start server on port {}", this.port );
+ }
+
+ protected void createContext( Server server, Path repositoryDirectory )
+ throws IOException
+ {
+ ServletContextHandler context = new ServletContextHandler();
+ context.setResourceBase( repositoryDirectory.toAbsolutePath().toString() );
+ context.setContextPath( "/" );
+ ServletHolder sh = new ServletHolder( DefaultServlet.class );
+ context.addServlet( sh, "/" );
+ server.setHandler( context );
+
+ }
+
+ @After
+ public void tearDown()
+ throws Exception
+ {
+ if (server!=null) {
+ server.stop();
+ }
+ Path cfgFile = Paths.get("target/appserver-base/conf/archiva.xml");
+ if (Files.exists(cfgFile)) {
+ Files.delete(cfgFile);
+ }
+ }
+
+ @Test
+ public void downloadAndMergeRemoteIndexInEmptyIndex()
+ throws Exception
+ {
+ RemoteRepository remoteRepository = getRemoteRepository();
+
+ remoteRepositoryAdmin.addRemoteRepository( remoteRepository, null );
+
+ downloadRemoteIndexScheduler.startup();
+
+ downloadRemoteIndexScheduler.scheduleDownloadRemote( "test-repo-re", true, true );
+
+ ( (ThreadPoolTaskScheduler) downloadRemoteIndexScheduler.getTaskScheduler() ).getScheduledExecutor().awaitTermination(
+ 10, TimeUnit.SECONDS );
+
+ remoteRepositoryAdmin.deleteRemoteRepository( "test-repo-re", null );
+
+ // search
+ BooleanQuery.Builder iQuery = new BooleanQuery.Builder();
+ iQuery.add( indexer.constructQuery( MAVEN.GROUP_ID, new StringSearchExpression( "commons-logging" ) ),
+ BooleanClause.Occur.SHOULD );
+
+ remoteRepositoryAdmin.addRemoteRepository(remoteRepository, null);
+ FlatSearchRequest rq = new FlatSearchRequest( iQuery.build() );
+ rq.setContexts(
+ Arrays.asList( repositoryRegistry.getRemoteRepository(remoteRepository.getId()).getIndexingContext().getBaseContext(IndexingContext.class) ) );
+
+ FlatSearchResponse response = indexer.searchFlat(rq);
+
+ log.info( "returned hit count:{}", response.getReturnedHitsCount() );
+ Assertions.assertThat( response.getReturnedHitsCount() ).isEqualTo( 8 );
+ }
+
+
+ protected RemoteRepository getRemoteRepository() throws IOException
+ {
+ RemoteRepository remoteRepository = new RemoteRepository( Locale.getDefault());
+ Path indexDirectory =
+ Paths.get( FileUtils.getBasedir(), "target/index/test-" + Long.toString( System.currentTimeMillis() ) );
+ Files.createDirectories( indexDirectory );
+ indexDirectory.toFile().deleteOnExit();
+
+ remoteRepository.setName( "foo" );
+ remoteRepository.setIndexDirectory( indexDirectory.toAbsolutePath().toString() );
+ remoteRepository.setDownloadRemoteIndex( true );
+ remoteRepository.setId( "test-repo-re" );
+ remoteRepository.setUrl( "http://localhost:" + port );
+ remoteRepository.setRemoteIndexUrl( "http://localhost:" + port + "/index-updates/" );
+
+ return remoteRepository;
+ }
+
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/resources/log4j2-test.xml b/archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/resources/log4j2-test.xml
new file mode 100644
index 000000000..c7f86dd6b
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/resources/log4j2-test.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.
+ -->
+
+
+<configuration>
+ <appenders>
+ <Console name="console" target="SYSTEM_OUT">
+ <PatternLayout pattern="%d [%t] %-5p %c %x - %m%n"/>
+ </Console>
+ </appenders>
+ <loggers>
+
+ <logger name="org.springframework" level="error"/>
+
+ <logger name="org.apache.archiva.scheduler.indexing" level="info"/>
+ <!--
+ <logger name="org.apache.http" level="debug"/>
+ -->
+ <root level="info">
+ <appender-ref ref="console"/>
+ </root>
+ </loggers>
+</configuration>
+
+
diff --git a/archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/resources/spring-context.xml b/archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/resources/spring-context.xml
new file mode 100644
index 000000000..3c9ef40d1
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/resources/spring-context.xml
@@ -0,0 +1,99 @@
+<?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.
+ -->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"
+ default-lazy-init="true">
+
+ <context:component-scan base-package="org.apache.archiva.repository.content.maven2,org.apache.archiva.indexer.maven" />
+
+ <bean name="scheduler" class="org.apache.archiva.redback.components.scheduler.DefaultScheduler">
+ <property name="properties">
+ <props>
+ <prop key="org.quartz.scheduler.instanceName">scheduler1</prop>
+ <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
+ <prop key="org.quartz.threadPool.threadCount">2</prop>
+ <prop key="org.quartz.threadPool.threadPriority">4</prop>
+ <prop key="org.quartz.jobStore.class">org.quartz.simpl.RAMJobStore</prop>
+ </props>
+ </property>
+ </bean>
+
+
+ <!-- wire up more basic configuration so it doesn't overwrite any config files -->
+ <bean name="archivaConfiguration#default" class="org.apache.archiva.configuration.DefaultArchivaConfiguration">
+ <property name="registry" ref="registry#default"/>
+ </bean>
+
+ <alias name="archivaConfiguration#default" alias="archivaConfiguration"/>
+
+ <bean name="registry#default" class="org.apache.archiva.redback.components.registry.commons.CommonsConfigurationRegistry">
+ <property name="properties">
+ <value>
+ <![CDATA[
+ <configuration>
+ <system/>
+ <xml fileName="${appserver.base}/conf/archiva.xml" config-forceCreate="true"
+ config-optional="true"
+ config-name="org.apache.archiva.base" config-at="org.apache.archiva"/>
+ </configuration>
+ ]]>
+ </value>
+ </property>
+ </bean>
+
+ <alias name="userConfiguration#redback" alias="userConfiguration#default"/>
+
+ <!-- ***
+ JPA settings
+ *** -->
+ <bean name="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
+ <property name="jpaVendorAdapter" >
+ <bean class="org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter" />
+ </property>
+ <property name="persistenceXmlLocation" value="classpath:META-INF/persistence-hsqldb.xml" />
+ <property name="jpaPropertyMap">
+ <map>
+ <entry key="openjpa.ConnectionURL" value="jdbc:hsqldb:mem:redback_database" />
+ <entry key="openjpa.ConnectionDriverName" value="org.hsqldb.jdbcDriver" />
+ <entry key="openjpa.ConnectionUserName" value="sa" />
+ <entry key="openjpa.ConnectionPassword" value="" />
+ <entry key="openjpa.Log" value="${openjpa.Log:DefaultLevel=INFO,Runtime=ERROR,Tool=ERROR,SQL=ERROR,Schema=ERROR,MetaData=ERROR}" />
+ <entry key="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)" />
+ <entry key="openjpa.jdbc.MappingDefaults"
+ value="ForeignKeyDeleteAction=restrict,JoinForeignKeyDeleteAction=restrict"/>
+ </map>
+ </property>
+
+ </bean>
+
+ <bean name="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" >
+ <property name="entityManagerFactory" ref="entityManagerFactory" />
+ </bean>
+
+ <tx:annotation-driven />
+ <!-- ***
+ End of JPA settings
+ *** -->
+
+</beans> \ No newline at end of file
diff --git a/archiva-modules/archiva-maven/pom.xml b/archiva-modules/archiva-maven/pom.xml
index 38580ee99..1dbd32ebe 100644
--- a/archiva-modules/archiva-maven/pom.xml
+++ b/archiva-modules/archiva-maven/pom.xml
@@ -40,5 +40,8 @@
<module>archiva-maven-model</module>
<module>archiva-maven-metadata</module>
<module>archiva-maven-indexer</module>
+ <module>archiva-maven-scheduler</module>
+ <module>archiva-maven-repository</module>
+ <module>archiva-maven-proxy</module>
</modules>
</project>