| /* |
| * Copyright 2000-2009 JetBrains s.r.o. |
| * |
| * 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. |
| */ |
| package org.jetbrains.idea.maven.importing; |
| |
| import com.intellij.openapi.util.io.FileUtil; |
| import com.intellij.openapi.vfs.VirtualFile; |
| import org.jetbrains.idea.maven.MavenImportingTestCase; |
| |
| import java.io.File; |
| import java.io.IOException; |
| |
| public class SnapshotDependenciesImportingTest extends MavenImportingTestCase { |
| private File remoteRepoDir; |
| |
| @Override |
| protected void setUp() throws Exception { |
| super.setUp(); |
| // disable local mirrors |
| updateSettingsXmlFully("<settings></settings>"); |
| } |
| |
| @Override |
| protected void setUpInWriteAction() throws Exception { |
| super.setUpInWriteAction(); |
| |
| remoteRepoDir = new File(myDir, "remote"); |
| remoteRepoDir.mkdirs(); |
| } |
| |
| public void testSnapshotVersionDependencyToModule() throws Exception { |
| performTestWithDependencyVersion("1-SNAPSHOT"); |
| } |
| |
| public void testSnapshotRangeDependencyToModule() throws Exception { |
| performTestWithDependencyVersion("SNAPSHOT"); |
| } |
| |
| private void performTestWithDependencyVersion(String version) throws Exception { |
| if (!hasMavenInstallation()) return; |
| |
| createProjectPom("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<packaging>pom</packaging>" + |
| "<version>1</version>" + |
| |
| "<modules>" + |
| " <module>m1</module>" + |
| " <module>m2</module>" + |
| "</modules>"); |
| |
| createModulePom("m1", "<groupId>test</groupId>" + |
| "<artifactId>m1</artifactId>" + |
| "<version>1</version>" + |
| |
| repositoriesSection() + |
| |
| "<dependencies>" + |
| " <dependency>" + |
| " <groupId>test</groupId>" + |
| " <artifactId>m2</artifactId>" + |
| " <version>" + version + "</version>" + |
| " </dependency>" + |
| "</dependencies>"); |
| |
| createModulePom("m2", "<groupId>test</groupId>" + |
| "<artifactId>m2</artifactId>" + |
| "<version>" + version + "</version>" + |
| |
| distributionManagementSection()); |
| |
| importProject(); |
| assertModules("project", "m1", "m2"); |
| assertModuleModuleDeps("m1", "m2"); |
| |
| // in order to force maven to resolve dependency into remote one we have to |
| // clean up local repository. |
| deploy("m2"); |
| removeFromLocalRepository("test"); |
| |
| importProject(); |
| |
| assertModules("project", "m1", "m2"); |
| assertModuleModuleDeps("m1", "m2"); |
| } |
| |
| public void testNamingLibraryTheSameWayRegardlessAvailableSnapshotVersion() throws Exception { |
| if (!hasMavenInstallation()) return; |
| |
| deployArtifact("test", "foo", "1-SNAPSHOT"); |
| |
| importProject("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>" + |
| |
| repositoriesSection() + |
| |
| "<dependencies>" + |
| " <dependency>" + |
| " <groupId>test</groupId>" + |
| " <artifactId>foo</artifactId>" + |
| " <version>1-SNAPSHOT</version>" + |
| " </dependency>" + |
| "</dependencies>"); |
| assertModuleLibDeps("project", "Maven: test:foo:1-SNAPSHOT"); |
| |
| removeFromLocalRepository("test"); |
| |
| importProject(); |
| assertModuleLibDeps("project", "Maven: test:foo:1-SNAPSHOT"); |
| } |
| |
| public void testAttachingCorrectJavaDocsAndSources() throws Exception { |
| if (!hasMavenInstallation()) return; |
| |
| deployArtifact("test", "foo", "1-SNAPSHOT", |
| "<build>" + |
| " <plugins>" + |
| " <plugin>" + |
| " <artifactId>maven-source-plugin</artifactId>" + |
| " <executions>" + |
| " <execution>" + |
| " <goals>" + |
| " <goal>jar</goal>" + |
| " </goals>" + |
| " </execution>" + |
| " </executions>" + |
| " </plugin>" + |
| " <plugin>" + |
| " <artifactId>maven-javadoc-plugin</artifactId>" + |
| " <executions>" + |
| " <execution>" + |
| " <goals>" + |
| " <goal>jar</goal>" + |
| " </goals>" + |
| " </execution>" + |
| " </executions>" + |
| " </plugin>" + |
| " </plugins>" + |
| "</build>"); |
| |
| removeFromLocalRepository("test"); |
| |
| importProject("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>" + |
| |
| repositoriesSection() + |
| |
| "<dependencies>" + |
| " <dependency>" + |
| " <groupId>test</groupId>" + |
| " <artifactId>foo</artifactId>" + |
| " <version>1-SNAPSHOT</version>" + |
| " </dependency>" + |
| "</dependencies>"); |
| assertModuleLibDeps("project", "Maven: test:foo:1-SNAPSHOT"); |
| |
| resolveDependenciesAndImport(); |
| downloadArtifacts(); |
| |
| assertModuleLibDep("project", |
| "Maven: test:foo:1-SNAPSHOT", |
| "jar://" + getRepositoryPath() + "/test/foo/1-SNAPSHOT/foo-1-SNAPSHOT.jar!/", |
| "jar://" + getRepositoryPath() + "/test/foo/1-SNAPSHOT/foo-1-SNAPSHOT-sources.jar!/", |
| "jar://" + getRepositoryPath() + "/test/foo/1-SNAPSHOT/foo-1-SNAPSHOT-javadoc.jar!/"); |
| |
| assertTrue(new File(getRepositoryFile(), "/test/foo/1-SNAPSHOT/foo-1-SNAPSHOT.jar").exists()); |
| assertTrue(new File(getRepositoryFile(), "/test/foo/1-SNAPSHOT/foo-1-SNAPSHOT-sources.jar").exists()); |
| assertTrue(new File(getRepositoryFile(), "/test/foo/1-SNAPSHOT/foo-1-SNAPSHOT-javadoc.jar").exists()); |
| } |
| |
| public void testCorrectlryUpdateRootEntriesWithActualPathForSnapshotDependencies() throws Exception { |
| if (!hasMavenInstallation()) return; |
| |
| deployArtifact("test", "foo", "1-SNAPSHOT", |
| "<build>" + |
| " <plugins>" + |
| " <plugin>" + |
| " <artifactId>maven-source-plugin</artifactId>" + |
| " <executions>" + |
| " <execution>" + |
| " <goals>" + |
| " <goal>jar</goal>" + |
| " </goals>" + |
| " </execution>" + |
| " </executions>" + |
| " </plugin>" + |
| " <plugin>" + |
| " <artifactId>maven-javadoc-plugin</artifactId>" + |
| " <executions>" + |
| " <execution>" + |
| " <goals>" + |
| " <goal>jar</goal>" + |
| " </goals>" + |
| " </execution>" + |
| " </executions>" + |
| " </plugin>" + |
| " </plugins>" + |
| "</build>"); |
| removeFromLocalRepository("test"); |
| |
| importProject("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>" + |
| |
| repositoriesSection() + |
| |
| "<dependencies>" + |
| " <dependency>" + |
| " <groupId>test</groupId>" + |
| " <artifactId>foo</artifactId>" + |
| " <version>1-SNAPSHOT</version>" + |
| " </dependency>" + |
| "</dependencies>"); |
| assertModuleLibDeps("project", "Maven: test:foo:1-SNAPSHOT"); |
| |
| resolveDependenciesAndImport(); |
| downloadArtifacts(); |
| |
| assertModuleLibDep("project", |
| "Maven: test:foo:1-SNAPSHOT", |
| "jar://" + getRepositoryPath() + "/test/foo/1-SNAPSHOT/foo-1-SNAPSHOT.jar!/", |
| "jar://" + getRepositoryPath() + "/test/foo/1-SNAPSHOT/foo-1-SNAPSHOT-sources.jar!/", |
| "jar://" + getRepositoryPath() + "/test/foo/1-SNAPSHOT/foo-1-SNAPSHOT-javadoc.jar!/"); |
| |
| |
| deployArtifact("test", "foo", "1-SNAPSHOT", |
| "<build>" + |
| " <plugins>" + |
| " <plugin>" + |
| " <artifactId>maven-source-plugin</artifactId>" + |
| " <executions>" + |
| " <execution>" + |
| " <goals>" + |
| " <goal>jar</goal>" + |
| " </goals>" + |
| " </execution>" + |
| " </executions>" + |
| " </plugin>" + |
| " <plugin>" + |
| " <artifactId>maven-javadoc-plugin</artifactId>" + |
| " <executions>" + |
| " <execution>" + |
| " <goals>" + |
| " <goal>jar</goal>" + |
| " </goals>" + |
| " </execution>" + |
| " </executions>" + |
| " </plugin>" + |
| " </plugins>" + |
| "</build>"); |
| removeFromLocalRepository("test"); |
| |
| scheduleResolveAll(); |
| resolveDependenciesAndImport(); |
| |
| assertModuleLibDep("project", |
| "Maven: test:foo:1-SNAPSHOT", |
| "jar://" + getRepositoryPath() + "/test/foo/1-SNAPSHOT/foo-1-SNAPSHOT.jar!/", |
| "jar://" + getRepositoryPath() + "/test/foo/1-SNAPSHOT/foo-1-SNAPSHOT-sources.jar!/", |
| "jar://" + getRepositoryPath() + "/test/foo/1-SNAPSHOT/foo-1-SNAPSHOT-javadoc.jar!/"); |
| } |
| |
| private void deployArtifact(String groupId, String artifactId, String version) throws IOException { |
| deployArtifact(groupId, artifactId, version, ""); |
| } |
| |
| private void deployArtifact(String groupId, String artifactId, String version, String tail) throws IOException { |
| String moduleName = "___" + artifactId; |
| |
| createProjectSubFile(moduleName + "/src/main/java/Foo.java", |
| "/**\n" + |
| " * some doc\n" + |
| " */\n" + |
| "public class Foo { }"); |
| |
| VirtualFile m = createModulePom(moduleName, |
| "<groupId>" + groupId + "</groupId>" + |
| "<artifactId>" + artifactId + "</artifactId>" + |
| "<version>" + version + "</version>" + |
| |
| distributionManagementSection() + |
| |
| tail); |
| |
| deploy(moduleName); |
| FileUtil.delete(new File(m.getParent().getPath())); |
| } |
| |
| private void deploy(String modulePath) { |
| executeGoal(modulePath, "deploy"); |
| } |
| |
| private String repositoriesSection() { |
| return "<repositories>" + |
| " <repository>" + |
| " <id>internal</id>" + |
| " <url>file:///" + FileUtil.toSystemIndependentName(remoteRepoDir.getPath()) + "</url>" + |
| " <snapshots>" + |
| " <enabled>true</enabled>" + |
| " <updatePolicy>always</updatePolicy>" + |
| " </snapshots>" + |
| " </repository>" + |
| "</repositories>"; |
| } |
| |
| private String distributionManagementSection() { |
| return "<distributionManagement>" + |
| " <snapshotRepository>" + |
| " <id>internal</id>" + |
| " <url>file:///" + FileUtil.toSystemIndependentName(remoteRepoDir.getPath()) + "</url>" + |
| " </snapshotRepository>" + |
| "</distributionManagement>"; |
| } |
| } |