blob: e048df4faa99344f2f74b1c3f44e2ef738305c35 [file] [log] [blame]
/*
* Copyright 2000-2012 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.application.AccessToken;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.Result;
import com.intellij.openapi.application.WriteAction;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.roots.*;
import com.intellij.openapi.roots.impl.libraries.ProjectLibraryTable;
import com.intellij.openapi.roots.libraries.Library;
import com.intellij.openapi.roots.libraries.LibraryTable;
import com.intellij.openapi.roots.libraries.LibraryTablesRegistrar;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.idea.maven.MavenCustomRepositoryHelper;
import org.jetbrains.idea.maven.MavenImportingTestCase;
import org.jetbrains.idea.maven.model.MavenId;
import org.jetbrains.idea.maven.project.MavenProject;
import java.io.File;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class DependenciesImportingTest extends MavenImportingTestCase {
public void testLibraryDependency() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>junit</groupId>" +
" <artifactId>junit</artifactId>" +
" <version>4.0</version>" +
" </dependency>" +
"</dependencies>");
assertModules("project");
assertModuleLibDep("project", "Maven: junit:junit:4.0",
"jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0.jar!/",
"jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0-sources.jar!/",
"jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0-javadoc.jar!/");
}
public void testSystemDependency() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>junit</groupId>" +
" <artifactId>junit</artifactId>" +
" <version>4.0</version>" +
" <scope>system</scope>" +
" <systemPath>" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0.jar</systemPath>" +
" </dependency>" +
"</dependencies>");
assertModules("project");
assertModuleLibDep("project", "Maven: junit:junit:4.0",
Arrays.asList("jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0.jar!/"),
Collections.<String>emptyList(), Collections.<String>emptyList());
}
public void testTestJarDependencies() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>junit</groupId>" +
" <artifactId>junit</artifactId>" +
" <version>4.0</version>" +
" <type>test-jar</type>" +
" </dependency>" +
"</dependencies>");
assertModules("project");
assertModuleLibDep("project", "Maven: junit:junit:test-jar:tests:4.0",
"jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0-tests.jar!/",
"jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0-test-sources.jar!/",
"jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0-test-javadoc.jar!/");
}
public void testDependencyWithClassifier() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>junit</groupId>" +
" <artifactId>junit</artifactId>" +
" <version>4.0</version>" +
" <classifier>bar</classifier>" +
" </dependency>" +
"</dependencies>");
assertModules("project");
assertModuleLibDep("project", "Maven: junit:junit:bar:4.0",
"jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0-bar.jar!/",
"jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0-sources.jar!/",
"jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0-javadoc.jar!/");
}
public void testSystemDependencyWithoutPath() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>junit</groupId>" +
" <artifactId>junit</artifactId>" +
" <version>4.0</version>" +
" <scope>system</scope>" +
" </dependency>" +
"</dependencies>");
assertModules("project");
assertModuleLibDeps("project"); // dependency was not added due to reported pom model problem.
}
public void testPreservingDependenciesOrder() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>B</groupId>" +
" <artifactId>B</artifactId>" +
" <version>2</version>" +
" </dependency>" +
" <dependency>" +
" <groupId>A</groupId>" +
" <artifactId>A</artifactId>" +
" <version>1</version>" +
" </dependency>" +
"</dependencies>");
assertModules("project");
assertModuleLibDeps("project", "Maven: B:B:2", "Maven: A:A:1");
}
public void testDoNotResetDependenciesIfProjectIsInvalid() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>group</groupId>" +
" <artifactId>lib</artifactId>" +
" <version>1</version>" +
" </dependency>" +
"</dependencies>");
importProject();
assertModuleLibDeps("project", "Maven: group:lib:1");
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version" + // incomplete tag
"<dependencies>" +
" <dependency>" +
" <groupId>group</groupId>" +
" <artifactId>lib</artifactId>" +
" <version>1</version>" +
" </dependency>" +
"</dependencies>");
importProject();
assertModuleLibDeps("project", "Maven: group:lib:1");
}
public void testInterModuleDependencies() throws Exception {
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>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>m2</artifactId>" +
" <version>1</version>" +
" </dependency>" +
"</dependencies>");
createModulePom("m2", "<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>");
importProject();
assertModules("project", "m1", "m2");
assertModuleModuleDeps("m1", "m2");
}
public void testInterModuleDependenciesWithClassifier() throws Exception {
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>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>m2</artifactId>" +
" <version>1</version>" +
" <classifier>client</classifier>" +
" </dependency>" +
"</dependencies>");
createModulePom("m2", "<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>");
importProject();
assertModuleModuleDeps("m1", "m2");
assertModuleLibDep("m1", "Maven: test:m2:client:1",
"jar://" + getRepositoryPath() + "/test/m2/1/m2-1-client.jar!/",
"jar://" + getRepositoryPath() + "/test/m2/1/m2-1-sources.jar!/",
"jar://" + getRepositoryPath() + "/test/m2/1/m2-1-javadoc.jar!/");
}
public void testDoNotAddInterModuleDependenciesFoUnsupportedDependencyType() throws Exception {
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>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>m2</artifactId>" +
" <version>1</version>" +
" <type>xxx</type>" +
" </dependency>" +
"</dependencies>");
createModulePom("m2", "<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>");
importProject();
assertModules("project", "m1", "m2");
assertModuleModuleDeps("m1");
}
public void testInterModuleDependenciesWithoutModuleVersions() throws Exception {
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>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>m2</artifactId>" +
" <version>1</version>" +
" </dependency>" +
"</dependencies>");
createModulePom("m2", "<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>project</artifactId>" +
" <version>1</version>" +
"</parent>");
importProject();
assertModules("project", "m1", "m2");
assertModuleModuleDeps("m1", "m2");
}
public void testInterModuleDependenciesWithVersionRanges() throws Exception {
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>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>m2</artifactId>" +
" <version>[1, 2]</version>" +
" </dependency>" +
"</dependencies>");
createModulePom("m2", "<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>");
importProject();
assertModules("project", "m1", "m2");
assertModuleModuleDeps("m1", "m2");
}
public void testInterModuleDependenciesWithLatestVersion() throws Exception {
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>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>m2</artifactId>" +
" <version>LATEST</version>" +
" </dependency>" +
"</dependencies>");
createModulePom("m2", "<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>");
importProject();
assertModules("project", "m1", "m2");
assertModuleModuleDeps("m1", "m2");
assertModuleLibDeps("m1");
MavenProject p = myProjectsTree.findProject(new MavenId("test", "m1", "1"));
assertEquals(new MavenId("test", "m2", "1"), p.getDependencies().get(0).getMavenId());
}
public void testInterModuleDependenciesWithLatestVersionAreBeingSetupForSnapshots() throws Exception {
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>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>m2</artifactId>" +
" <version>LATEST</version>" +
" </dependency>" +
"</dependencies>");
createModulePom("m2", "<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1-SNAPSHOT</version>");
importProject();
assertModules("project", "m1", "m2");
assertModuleModuleDeps("m1", "m2");
assertModuleLibDeps("m1");
MavenProject p = myProjectsTree.findProject(new MavenId("test", "m1", "1"));
assertEquals(new MavenId("test", "m2", "1-SNAPSHOT"), p.getDependencies().get(0).getMavenId());
}
public void testInterModuleDependenciesWithReleaseVersion() throws Exception {
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>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>m2</artifactId>" +
" <version>RELEASE</version>" +
" </dependency>" +
"</dependencies>");
createModulePom("m2", "<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>");
importProject();
assertModules("project", "m1", "m2");
assertModuleModuleDeps("m1", "m2");
assertModuleLibDeps("m1");
MavenProject p = myProjectsTree.findProject(new MavenId("test", "m1", "1"));
assertEquals(new MavenId("test", "m2", "1"), p.getDependencies().get(0).getMavenId());
}
public void testInterModuleDependenciesWithReleaseVersionAreNotBeingSetupForSnapshotDependencies() throws Exception {
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>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>m2</artifactId>" +
" <version>RELEASE</version>" +
" </dependency>" +
"</dependencies>");
createModulePom("m2", "<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1-SNAPSHOT</version>");
importProject();
assertModules("project", "m1", "m2");
assertModuleModuleDeps("m1");
assertModuleLibDeps("m1", "Maven: test:m2:RELEASE");
}
public void testInterSnapshotModuleDependenciesWithSnapshotVersionRanges() throws Exception {
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>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>m2</artifactId>" +
" <version>[, 1-SNAPSHOT]</version>" +
" </dependency>" +
"</dependencies>");
createModulePom("m2", "<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1-SNAPSHOT</version>");
importProject();
assertModules("project", "m1", "m2");
assertModuleModuleDeps("m1", "m2");
}
public void testInterSnapshotModuleDependenciesWithVersionRanges() throws Exception {
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>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>m2</artifactId>" +
" <version>[, 2]</version>" +
" </dependency>" +
"</dependencies>");
createModulePom("m2", "<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1-SNAPSHOT</version>");
importProject();
assertModules("project", "m1", "m2");
assertModuleModuleDeps("m1", "m2");
}
public void testInterModuleDependenciesWithoutModuleGroup() throws Exception {
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>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>m2</artifactId>" +
" <version>1</version>" +
" </dependency>" +
"</dependencies>");
createModulePom("m2", "<artifactId>m2</artifactId>" +
"<version>1</version>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>project</artifactId>" +
" <version>1</version>" +
"</parent>");
importProject();
assertModules("project", "m1", "m2");
assertModuleModuleDeps("m1", "m2");
}
public void testInterModuleDependenciesIfThereArePropertiesInArtifactHeader() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<packaging>pom</packaging>" +
"<version>1</version>" +
"<properties>" +
" <module2Name>m2</module2Name>" +
"</properties>" +
"<modules>" +
" <module>m1</module>" +
" <module>m2</module>" +
"</modules>");
createModulePom("m1", "<groupId>test</groupId>" +
"<artifactId>m1</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>m2</artifactId>" +
" <version>1</version>" +
" </dependency>" +
"</dependencies>");
createModulePom("m2", "<groupId>test</groupId>" +
"<artifactId>${module2Name}</artifactId>" +
"<version>${project.parent.version}</version>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>project</artifactId>" +
" <version>1</version>" +
"</parent>");
importProject();
assertModules("project", "m1", "m2");
assertModuleModuleDeps("m1", "m2");
}
public void testInterModuleDependenciesIfThereArePropertiesInArtifactHeaderDefinedInParent() throws Exception {
createProjectPom("<groupId>${groupProp}</groupId>" +
"<artifactId>parent</artifactId>" +
"<version>${versionProp}</version>" +
"<packaging>pom</packaging>" +
"<properties>" +
" <groupProp>test</groupProp>" +
" <versionProp>1</versionProp>" +
"</properties>" +
"<modules>" +
" <module>m1</module>" +
" <module>m2</module>" +
"</modules>");
createModulePom("m1",
"<parent>" +
" <groupId>${groupProp}</groupId>" +
" <artifactId>parent</artifactId>" +
" <version>${versionProp}</version>" +
"</parent>" +
"<artifactId>m1</artifactId>" +
"<dependencies>" +
" <dependency>" +
" <groupId>${groupProp}</groupId>" +
" <artifactId>m2</artifactId>" +
" <version>${versionProp}</version>" +
" </dependency>" +
"</dependencies>");
createModulePom("m2",
"<parent>" +
" <groupId>${groupProp}</groupId>" +
" <artifactId>parent</artifactId>" +
" <version>${versionProp}</version>" +
"</parent>" +
"<artifactId>m2</artifactId>");
importProject();
assertModules("parent", "m1", "m2");
assertModuleModuleDeps("m1", "m2");
}
public void testDependencyOnSelf() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>project</artifactId>" +
" <version>1</version>" +
" </dependency>" +
"</dependencies>");
assertModuleModuleDeps("project");
}
public void testDependencyOnSelfWithPomPackaging() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>project</artifactId>" +
" <version>1</version>" +
" </dependency>" +
"</dependencies>");
assertModuleModuleDeps("project");
}
public void testIntermoduleDependencyOnTheSameModuleWithDifferentTypes() throws Exception {
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>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>m2</artifactId>" +
" <version>1</version>" +
" </dependency>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>m2</artifactId>" +
" <version>1</version>" +
" <type>test-jar</type>" +
" </dependency>" +
"</dependencies>");
createModulePom("m2", "<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>");
importProject();
assertModules("project", "m1", "m2");
assertModuleModuleDeps("m1", "m2", "m2");
}
public void testDependencyScopes() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>foo1</artifactId>" +
" <version>1</version>" +
" </dependency>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>foo2</artifactId>" +
" <version>1</version>" +
" <scope>runtime</scope>" +
" </dependency>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>foo3</artifactId>" +
" <version>1</version>" +
" <scope>test</scope>" +
" </dependency>" +
"</dependencies>");
assertModuleLibDepScope("project", "Maven: test:foo1:1", DependencyScope.COMPILE);
assertModuleLibDepScope("project", "Maven: test:foo2:1", DependencyScope.RUNTIME);
assertModuleLibDepScope("project", "Maven: test:foo3:1", DependencyScope.TEST);
}
public void testModuleDependencyScopes() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<packaging>pom</packaging>" +
"<version>1</version>" +
"<modules>" +
" <module>m1</module>" +
" <module>m2</module>" +
" <module>m3</module>" +
" <module>m4</module>" +
"</modules>");
createModulePom("m1", "<groupId>test</groupId>" +
"<artifactId>m1</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>m2</artifactId>" +
" <version>1</version>" +
" </dependency>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>m3</artifactId>" +
" <version>1</version>" +
" <scope>runtime</scope>" +
" </dependency>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>m4</artifactId>" +
" <version>1</version>" +
" <scope>test</scope>" +
" </dependency>" +
"</dependencies>");
createModulePom("m2", "<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>");
createModulePom("m3", "<groupId>test</groupId>" +
"<artifactId>m3</artifactId>" +
"<version>1</version>");
createModulePom("m4", "<groupId>test</groupId>" +
"<artifactId>m4</artifactId>" +
"<version>1</version>");
importProject();
assertModules("project", "m1", "m2", "m3", "m4");
assertModuleModuleDepScope("m1", "m2", DependencyScope.COMPILE);
assertModuleModuleDepScope("m1", "m3", DependencyScope.RUNTIME);
assertModuleModuleDepScope("m1", "m4", DependencyScope.TEST);
}
public void testDependenciesAreNotExported() throws Exception {
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>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>m2</artifactId>" +
" <version>1</version>" +
" </dependency>" +
" <dependency>" +
" <groupId>lib</groupId>" +
" <artifactId>lib</artifactId>" +
" <version>1</version>" +
" </dependency>" +
"</dependencies>");
createModulePom("m2", "<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>");
importProject();
assertExportedDeps("m1");
}
public void testTransitiveDependencies() throws Exception {
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>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>m2</artifactId>" +
" <version>1</version>" +
" </dependency>" +
"</dependencies>");
createModulePom("m2", "<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>group</groupId>" +
" <artifactId>id</artifactId>" +
" <version>1</version>" +
" </dependency>" +
"</dependencies>");
importProject();
resolveDependenciesAndImport();
assertModules("project", "m1", "m2");
assertModuleLibDeps("m2", "Maven: group:id:1");
assertModuleLibDeps("m1", "Maven: group:id:1");
}
public void testTransitiveLibraryDependencyVersionResolution() throws Exception {
// this test hanles the case when the particular dependency list cause embedder set
// the versionRange for the xml-apis:xml-apis:1.0.b2 artifact to null.
// see http://jira.codehaus.org/browse/MNG-3386
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>dom4j</groupId>" +
" <artifactId>dom4j</artifactId>" +
" <version>1.6.1</version>" +
" <scope>runtime</scope>" +
" </dependency>" +
" <dependency>" +
" <groupId>org.apache.ws.commons.util</groupId>" +
" <artifactId>ws-commons-util</artifactId>" +
" <version>1.0.2</version>" +
" </dependency>" +
"</dependencies>");
resolveDependenciesAndImport();
assertModules("project");
assertModuleLibDep("project", "Maven: xml-apis:xml-apis:1.0.b2");
}
public void testExclusionOfTransitiveDependencies() throws Exception {
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>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>m2</artifactId>" +
" <version>1</version>" +
" <exclusions>" +
" <exclusion>" +
" <groupId>group</groupId>" +
" <artifactId>id</artifactId>" +
" </exclusion>" +
" </exclusions>" +
" </dependency>" +
"</dependencies>");
createModulePom("m2", "<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>group</groupId>" +
" <artifactId>id</artifactId>" +
" <version>1</version>" +
" </dependency>" +
"</dependencies>");
importProject();
assertModuleLibDeps("m2", "Maven: group:id:1");
assertModuleModuleDeps("m1", "m2");
assertModuleLibDeps("m1");
}
public void testDependencyWithEnvironmentProperty() throws Exception {
String javaHome = FileUtil.toSystemIndependentName(System.getProperty("java.home"));
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>direct-system-dependency</groupId>" +
" <artifactId>direct-system-dependency</artifactId>" +
" <version>1.0</version>" +
" <scope>system</scope>" +
" <systemPath>${java.home}/lib/tools.jar</systemPath>" +
" </dependency>" +
"</dependencies>");
assertModules("project");
assertModuleLibDep("project",
"Maven: direct-system-dependency:direct-system-dependency:1.0",
"jar://" + javaHome + "/lib/tools.jar!/");
}
public void testDependencyWithEnvironmentENVProperty() throws Exception {
String envDir = FileUtil.toSystemIndependentName(System.getenv(getEnvVar()));
if (envDir.endsWith("/")) envDir = envDir.substring(0, envDir.length() - 1);
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>direct-system-dependency</groupId>" +
" <artifactId>direct-system-dependency</artifactId>" +
" <version>1.0</version>" +
" <scope>system</scope>" +
" <systemPath>${env." + getEnvVar() + "}/lib/tools.jar</systemPath>" +
" </dependency>" +
"</dependencies>");
assertModules("project");
assertModuleLibDep("project",
"Maven: direct-system-dependency:direct-system-dependency:1.0",
"jar://" + envDir + "/lib/tools.jar!/");
}
public void testDependencyWithVersionRangeOnModule() throws Exception {
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>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>m2</artifactId>" +
" <version>[1, 3]</version>" +
" </dependency>" +
"</dependencies>");
createModulePom("m2", "<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>2</version>");
importProject();
assertModules("project", "m1", "m2");
if (ignore()) return;
assertModuleModuleDeps("m1", "m2");
assertModuleLibDeps("m1");
}
public void testPropertiesInInheritedDependencies() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<dependencies>" +
" <dependency>" +
" <groupId>group</groupId>" +
" <artifactId>lib</artifactId>" +
" <version>${project.version}</version>" +
" </dependency>" +
"</dependencies>" +
"<modules>" +
" <module>m</module>" +
"</modules>");
createModulePom("m", "<groupId>test</groupId>" +
"<artifactId>m</artifactId>" +
"<version>2</version>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>project</artifactId>" +
" <version>1</version>" +
"</parent>");
importProject();
assertModuleLibDep("m", "Maven: group:lib:2");
}
public void testPropertyInTheModuleDependency() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<properties>" +
" <dep-version>1.2.3</dep-version>" +
"</properties>" +
"<modules>" +
" <module>m</module>" +
"</modules>"
);
createModulePom("m", "<groupId>test</groupId>" +
"<artifactId>m</artifactId>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>project</artifactId>" +
" <version>1</version>" +
"</parent>" +
"<dependencies>" +
" <dependency>" +
" <groupId>group</groupId>" +
" <artifactId>id</artifactId>" +
" <version>${dep-version}</version>" +
" </dependency>" +
"</dependencies>");
importProject();
assertModules("project", "m");
assertModuleLibDeps("m", "Maven: group:id:1.2.3");
}
public void testManagedModuleDependency() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<dependencyManagement>" +
" <dependencies>" +
" <dependency>" +
" <groupId>group</groupId>" +
" <artifactId>id</artifactId>" +
" <version>1</version>" +
" </dependency>" +
" </dependencies>" +
"</dependencyManagement>" +
"<modules>" +
" <module>m</module>" +
"</modules>");
createModulePom("m", "<groupId>test</groupId>" +
"<artifactId>m</artifactId>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>project</artifactId>" +
" <version>1</version>" +
"</parent>" +
"<dependencies>" +
" <dependency>" +
" <groupId>group</groupId>" +
" <artifactId>id</artifactId>" +
" </dependency>" +
"</dependencies>");
importProject();
assertModuleLibDeps("m", "Maven: group:id:1");
}
public void testPropertyInTheManagedModuleDependencyVersion() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<properties>" +
" <dep-version>1</dep-version>" +
"</properties>" +
"<dependencyManagement>" +
" <dependencies>" +
" <dependency>" +
" <groupId>group</groupId>" +
" <artifactId>id</artifactId>" +
" <version>${dep-version}</version>" +
" </dependency>" +
" </dependencies>" +
"</dependencyManagement>" +
"<modules>" +
" <module>m</module>" +
"</modules>");
createModulePom("m", "<groupId>test</groupId>" +
"<artifactId>m</artifactId>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>project</artifactId>" +
" <version>1</version>" +
"</parent>" +
"<dependencies>" +
" <dependency>" +
" <groupId>group</groupId>" +
" <artifactId>id</artifactId>" +
" </dependency>" +
"</dependencies>");
importProject();
assertModules("project", "m");
assertModuleLibDeps("m", "Maven: group:id:1");
}
public void testPomTypeDependency() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>junit</groupId>" +
" <artifactId>junit</artifactId>" +
" <version>4.0</version>" +
" <type>pom</type>" +
" </dependency>" +
"</dependencies>");
importProject(); // shouldn't throw any exception
}
public void testPropertyInTheManagedModuleDependencyVersionOfPomType() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<properties>" +
" <version>1</version>" +
"</properties>" +
"<dependencyManagement>" +
" <dependencies>" +
" <dependency>" +
" <groupId>xxx</groupId>" +
" <artifactId>yyy</artifactId>" +
" <version>${version}</version>" +
" <type>pom</type>" +
" </dependency>" +
" </dependencies>" +
"</dependencyManagement>" +
"<modules>" +
" <module>m</module>" +
"</modules>");
createModulePom("m", "<groupId>test</groupId>" +
"<artifactId>m</artifactId>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>project</artifactId>" +
" <version>1</version>" +
"</parent>" +
"<dependencies>" +
" <dependency>" +
" <groupId>xxx</groupId>" +
" <artifactId>yyy</artifactId>" +
" <type>pom</type>" +
" </dependency>" +
"</dependencies>");
importProject();
assertModules("project", "m");
assertModuleLibDeps("m");
if (ignore()) return;
MavenProject root = myProjectsTree.getRootProjects().get(0);
List<MavenProject> modules = myProjectsTree.getModules(root);
assertOrderedElementsAreEqual(root.getProblems());
assertOrderedElementsAreEqual(modules.get(0).getProblems(),
"Unresolved dependency: xxx:yyy:pom:1:compile");
}
public void testResolvingFromRepositoriesIfSeveral() throws Exception {
MavenCustomRepositoryHelper fixture = new MavenCustomRepositoryHelper(myDir, "local1");
setRepositoryPath(fixture.getTestDataPath("local1"));
removeFromLocalRepository("junit");
File file = fixture.getTestData("local1/junit/junit/4.0/junit-4.0.pom");
assertFalse(file.exists());
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
" <repositories>" +
" <repository>" +
" <id>foo</id>" +
" <url>http://foo.bar</url>" +
" </repository>" +
" </repositories>" +
"<dependencies>" +
" <dependency>" +
" <groupId>junit</groupId>" +
" <artifactId>junit</artifactId>" +
" <version>4.0</version>" +
" </dependency>" +
"</dependencies>");
assertTrue(file.exists());
}
public void testUsingMirrors() throws Exception {
setRepositoryPath(myDir.getPath() + "/repo");
String mirrorPath = FileUtil.toSystemIndependentName(myDir.getPath() + "/mirror");
updateSettingsXmlFully("<settings>" +
" <mirrors>" +
" <mirror>" +
" <id>foo</id>" +
" <url>file://" + mirrorPath + "</url>" +
" <mirrorOf>*</mirrorOf>" +
" </mirror>" +
" </mirrors>" +
"</settings>");
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>junit</groupId>" +
" <artifactId>junit</artifactId>" +
" <version>4.0</version>" +
" </dependency>" +
"</dependencies>");
assertFalse(new File(getRepositoryFile(), "junit").exists());
assertTrue(myProjectsTree.findProject(myProjectPom).hasUnresolvedArtifacts());
}
public void testCanResolveDependenciesWhenExtensionPluginNotFound() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>junit</groupId>" +
" <artifactId>junit</artifactId>" +
" <version>4.0</version>" +
" </dependency>" +
"</dependencies>" +
"<build>" +
" <plugins>" +
" <plugin>" +
" <groupId>xxx</groupId>" +
" <artifactId>yyy</artifactId>" +
" <version>1</version>" +
" <extensions>true</extensions>" +
" </plugin>" +
" </plugins>" +
"</build>");
assertModuleLibDep("project", "Maven: junit:junit:4.0");
}
public void testDoNotRemoveLibrariesOnImportIfProjectWasNotChanged() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>junit</groupId>" +
" <artifactId>junit</artifactId>" +
" <version>4.0</version>" +
" </dependency>" +
"</dependencies>");
assertProjectLibraries("Maven: junit:junit:4.0");
assertModuleLibDeps("project", "Maven: junit:junit:4.0");
myProjectsManager.importProjects();
assertProjectLibraries("Maven: junit:junit:4.0");
assertModuleLibDeps("project", "Maven: junit:junit:4.0");
}
public void testDoNotCreateSameLibraryTwice() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>junit</groupId>" +
" <artifactId>junit</artifactId>" +
" <version>4.0</version>" +
" </dependency>" +
"</dependencies>");
importProject();
assertProjectLibraries("Maven: junit:junit:4.0");
assertModuleLibDeps("project", "Maven: junit:junit:4.0");
}
public void testCreateSeparateLibraryForDifferentArtifactTypeAndClassifier() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>junit</groupId>" +
" <artifactId>junit</artifactId>" +
" <version>4.0</version>" +
" </dependency>" +
" <dependency>" +
" <groupId>junit</groupId>" +
" <artifactId>junit</artifactId>" +
" <version>4.0</version>" +
" <type>test-jar</type>" +
" </dependency>" +
" <dependency>" +
" <groupId>junit</groupId>" +
" <artifactId>junit</artifactId>" +
" <version>4.0</version>" +
" <classifier>jdk5</classifier>" +
" </dependency>" +
"</dependencies>");
assertProjectLibraries("Maven: junit:junit:4.0",
"Maven: junit:junit:test-jar:tests:4.0",
"Maven: junit:junit:jdk5:4.0");
assertModuleLibDeps("project",
"Maven: junit:junit:4.0",
"Maven: junit:junit:test-jar:tests:4.0",
"Maven: junit:junit:jdk5:4.0");
}
public void testDoNotResetUserLibraryDependencies() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>junit</groupId>" +
" <artifactId>junit</artifactId>" +
" <version>4.0</version>" +
" </dependency>" +
"</dependencies>");
assertProjectLibraries("Maven: junit:junit:4.0");
assertModuleLibDeps("project", "Maven: junit:junit:4.0");
createAndAddProjectLibrary("project", "My Library");
assertProjectLibraries("Maven: junit:junit:4.0", "My Library");
assertModuleLibDeps("project", "Maven: junit:junit:4.0", "My Library");
importProject();
assertProjectLibraries("Maven: junit:junit:4.0", "My Library");
// todo should keep deps' order
assertModuleLibDeps("project", "My Library", "Maven: junit:junit:4.0");
}
public void testDoNotResetUserModuleDependencies() throws Exception {
VirtualFile m1 = createModulePom("m1",
"<groupId>test</groupId>" +
"<artifactId>m1</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>m2</artifactId>" +
" <version>1</version>" +
" </dependency>" +
"</dependencies>");
VirtualFile m2 = createModulePom("m2",
"<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>");
importProjects(m1, m2);
assertModuleModuleDeps("m1", "m2");
final Module module = createModule("my-module");
ModuleRootModificationUtil.addDependency(getModule("m1"), module);
assertModuleModuleDeps("m1", "m2", "my-module");
importProjects(m1, m2);
assertModuleModuleDeps("m1", "my-module", "m2");
}
public void testRemoveUnnecessaryMavenizedModuleDepsOnRepomport() throws Exception {
VirtualFile m1 = createModulePom("m1",
"<groupId>test</groupId>" +
"<artifactId>m1</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>m2</artifactId>" +
" <version>1</version>" +
" </dependency>" +
"</dependencies>");
VirtualFile m2 = createModulePom("m2",
"<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>");
importProjects(m1, m2);
assertModuleModuleDeps("m1", "m2");
createModulePom("m1", "<groupId>test</groupId>" +
"<artifactId>m1</artifactId>" +
"<version>1</version>");
importProjects(m1, m2);
assertModuleModuleDeps("m1");
}
public void testDoNotResetCustomRootEntries() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>junit</groupId>" +
" <artifactId>junit</artifactId>" +
" <version>4.0</version>" +
" </dependency>" +
"</dependencies>");
assertProjectLibraries("Maven: junit:junit:4.0");
assertModuleLibDeps("project", "Maven: junit:junit:4.0");
addLibraryRoot("Maven: junit:junit:4.0", OrderRootType.CLASSES, "file://foo.classes");
addLibraryRoot("Maven: junit:junit:4.0", OrderRootType.SOURCES, "file://foo.sources");
addLibraryRoot("Maven: junit:junit:4.0", JavadocOrderRootType.getInstance(), "file://foo.javadoc");
addLibraryRoot("Maven: junit:junit:4.0", OrderRootType.SOURCES, "jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0-sources.jar!/aaa");
addLibraryRoot("Maven: junit:junit:4.0", JavadocOrderRootType.getInstance(), "jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0-javadoc.jar!/bbb");
assertModuleLibDep("project", "Maven: junit:junit:4.0",
Arrays.asList("jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0.jar!/", "file://foo.classes"),
Arrays.asList("jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0-sources.jar!/",
"file://foo.sources",
"jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0-sources.jar!/aaa"),
Arrays.asList("jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0-javadoc.jar!/",
"file://foo.javadoc",
"jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0-javadoc.jar!/bbb"));
scheduleResolveAll();
resolveDependenciesAndImport();
assertModuleLibDep("project", "Maven: junit:junit:4.0",
Arrays.asList("jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0.jar!/", "file://foo.classes"),
Arrays.asList("jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0-sources.jar!/", "file://foo.sources", "jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0-sources.jar!/aaa"),
Arrays.asList("jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0-javadoc.jar!/", "file://foo.javadoc", "jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0-javadoc.jar!/bbb"));
}
public void testDifferentSystemDependenciesWithSameId() throws Exception {
createModulePom("m1", "<groupId>test</groupId>" +
"<artifactId>m1</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>xxx</groupId>" +
" <artifactId>yyy</artifactId>" +
" <version>1</version>" +
" <scope>system</scope>" +
" <systemPath>" + getRoot() + "/m1/foo.jar</systemPath>" +
" </dependency>" +
"</dependencies>");
createModulePom("m2", "<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>xxx</groupId>" +
" <artifactId>yyy</artifactId>" +
" <version>1</version>" +
" <scope>system</scope>" +
" <systemPath>" + getRoot() + "/m2/foo.jar</systemPath>" +
" </dependency>" +
"</dependencies>");
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m1</module>" +
" <module>m2</module>" +
"</modules>");
// assertProjectLibraries("Maven: xxx:yyy:1");
assertModuleLibDep("m1", "Maven: xxx:yyy:1", "jar://" + getRoot() + "/m1/foo.jar!/");
assertModuleLibDep("m2", "Maven: xxx:yyy:1", "jar://" + getRoot() + "/m2/foo.jar!/");
}
public void testUpdateRootEntriesWithActualPath() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>junit</groupId>" +
" <artifactId>junit</artifactId>" +
" <version>4.0</version>" +
" </dependency>" +
"</dependencies>");
assertProjectLibraries("Maven: junit:junit:4.0");
assertModuleLibDeps("project", "Maven: junit:junit:4.0");
assertModuleLibDep("project", "Maven: junit:junit:4.0",
"jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0.jar!/",
"jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0-sources.jar!/",
"jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0-javadoc.jar!/");
setRepositoryPath(new File(myDir, "__repo").getPath());
myProjectsManager.getEmbeddersManager().reset(); // to recognize repository change
scheduleResolveAll();
resolveDependenciesAndImport();
assertModuleLibDep("project", "Maven: junit:junit:4.0",
"jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0.jar!/",
"jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0-sources.jar!/",
"jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0-javadoc.jar!/");
}
public void testUpdateRootEntriesWithActualPathForDependenciesWithClassifiers() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>org.testng</groupId>" +
" <artifactId>testng</artifactId>" +
" <version>5.8</version>" +
" <classifier>jdk15</classifier>" +
" </dependency>" +
"</dependencies>");
assertModuleLibDeps("project", "Maven: org.testng:testng:jdk15:5.8", "Maven: junit:junit:3.8.1");
assertModuleLibDep("project", "Maven: org.testng:testng:jdk15:5.8",
"jar://" + getRepositoryPath() + "/org/testng/testng/5.8/testng-5.8-jdk15.jar!/",
"jar://" + getRepositoryPath() + "/org/testng/testng/5.8/testng-5.8-sources.jar!/",
"jar://" + getRepositoryPath() + "/org/testng/testng/5.8/testng-5.8-javadoc.jar!/");
setRepositoryPath(new File(myDir, "__repo").getPath());
myProjectsManager.getEmbeddersManager().reset(); // to recognize repository change
scheduleResolveAll();
resolveDependenciesAndImport();
assertModuleLibDep("project", "Maven: org.testng:testng:jdk15:5.8",
"jar://" + getRepositoryPath() + "/org/testng/testng/5.8/testng-5.8-jdk15.jar!/",
"jar://" + getRepositoryPath() + "/org/testng/testng/5.8/testng-5.8-sources.jar!/",
"jar://" + getRepositoryPath() + "/org/testng/testng/5.8/testng-5.8-javadoc.jar!/");
}
public void testDoNotPopulateSameRootEntriesOnEveryImport() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>junit</groupId>" +
" <artifactId>junit</artifactId>" +
" <version>4.0</version>" +
" </dependency>" +
"</dependencies>");
assertModuleLibDep("project", "Maven: junit:junit:4.0",
Arrays.asList("jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0.jar!/"),
Arrays.asList("jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0-sources.jar!/"),
Arrays.asList("jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0-javadoc.jar!/"));
scheduleResolveAll();
resolveDependenciesAndImport();
scheduleResolveAll();
resolveDependenciesAndImport();
assertModuleLibDep("project", "Maven: junit:junit:4.0",
Arrays.asList("jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0.jar!/"),
Arrays.asList("jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0-sources.jar!/"),
Arrays.asList("jar://" + getRepositoryPath() + "/junit/junit/4.0/junit-4.0-javadoc.jar!/"));
}
public void testDoNotPopulateSameRootEntriesOnEveryImportForSystemLibraries() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>xxx</groupId>" +
" <artifactId>yyy</artifactId>" +
" <version>1</version>" +
" <scope>system</scope>" +
" <systemPath>" + getRoot() + "/foo/bar.jar</systemPath>" +
" </dependency>" +
"</dependencies>");
assertModuleLibDep("project", "Maven: xxx:yyy:1",
Arrays.asList("jar://" + getRoot() + "/foo/bar.jar!/"),
Collections.<String>emptyList(),
Collections.<String>emptyList());
scheduleResolveAll();
resolveDependenciesAndImport();
scheduleResolveAll();
resolveDependenciesAndImport();
assertModuleLibDep("project", "Maven: xxx:yyy:1",
Arrays.asList("jar://" + getRoot() + "/foo/bar.jar!/"),
Collections.<String>emptyList(),
Collections.<String>emptyList());
}
public void testRemovingPreviousSystemPathForForSystemLibraries() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>xxx</groupId>" +
" <artifactId>yyy</artifactId>" +
" <version>1</version>" +
" <scope>system</scope>" +
" <systemPath>" + getRoot() + "/foo/bar.jar</systemPath>" +
" </dependency>" +
"</dependencies>");
assertModuleLibDep("project", "Maven: xxx:yyy:1",
Arrays.asList("jar://" + getRoot() + "/foo/bar.jar!/"),
Collections.<String>emptyList(),
Collections.<String>emptyList());
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>xxx</groupId>" +
" <artifactId>yyy</artifactId>" +
" <version>1</version>" +
" <scope>system</scope>" +
" <systemPath>" + getRoot() + "/foo/xxx.jar</systemPath>" +
" </dependency>" +
"</dependencies>");
scheduleResolveAll();
resolveDependenciesAndImport();
assertModuleLibDep("project", "Maven: xxx:yyy:1",
Arrays.asList("jar://" + getRoot() + "/foo/xxx.jar!/"),
Collections.<String>emptyList(),
Collections.<String>emptyList());
}
public void testRemovingUnusedLibraries() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m1</module>" +
" <module>m2</module>" +
"</modules>");
createModulePom("m1", "<groupId>test</groupId>" +
"<artifactId>m1</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>group</groupId>" +
" <artifactId>lib1</artifactId>" +
" <version>1</version>" +
" </dependency>" +
" <dependency>" +
" <groupId>group</groupId>" +
" <artifactId>lib2</artifactId>" +
" <version>1</version>" +
" </dependency>" +
"</dependencies>");
createModulePom("m2", "<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>group</groupId>" +
" <artifactId>lib2</artifactId>" +
" <version>1</version>" +
" </dependency>" +
" <dependency>" +
" <groupId>group</groupId>" +
" <artifactId>lib3</artifactId>" +
" <version>1</version>" +
" </dependency>" +
" <dependency>" +
" <groupId>group</groupId>" +
" <artifactId>lib4</artifactId>" +
" <version>1</version>" +
" </dependency>" +
"</dependencies>");
importProject();
assertProjectLibraries("Maven: group:lib1:1",
"Maven: group:lib2:1",
"Maven: group:lib3:1",
"Maven: group:lib4:1");
createModulePom("m1", "<groupId>test</groupId>" +
"<artifactId>m1</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>group</groupId>" +
" <artifactId>lib2</artifactId>" +
" <version>1</version>" +
" </dependency>" +
"</dependencies>");
createModulePom("m2", "<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>group</groupId>" +
" <artifactId>lib3</artifactId>" +
" <version>1</version>" +
" </dependency>" +
"</dependencies>");
importProject();
assertProjectLibraries("Maven: group:lib2:1",
"Maven: group:lib3:1");
}
public void testDoNoRemoveUnusedLibraryIfItWasChanged() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>group</groupId>" +
" <artifactId>lib1</artifactId>" +
" <version>1</version>" +
" </dependency>" +
" <dependency>" +
" <groupId>group</groupId>" +
" <artifactId>lib2</artifactId>" +
" <version>1</version>" +
" </dependency>" +
" <dependency>" +
" <groupId>group</groupId>" +
" <artifactId>lib3</artifactId>" +
" <version>1</version>" +
" </dependency>" +
"</dependencies>");
assertProjectLibraries("Maven: group:lib1:1",
"Maven: group:lib2:1",
"Maven: group:lib3:1");
addLibraryRoot("Maven: group:lib1:1", JavadocOrderRootType.getInstance(), "file://foo.bar");
clearLibraryRoots("Maven: group:lib2:1", JavadocOrderRootType.getInstance());
addLibraryRoot("Maven: group:lib2:1", JavadocOrderRootType.getInstance(), "file://foo.baz");
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>");
assertProjectLibraries("Maven: group:lib1:1",
"Maven: group:lib2:1");
}
public void testDoNoRemoveUserProjectLibraries() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>");
createAndAddProjectLibrary("project", "lib");
assertProjectLibraries("lib");
addLibraryRoot("lib", OrderRootType.CLASSES, "file://" + getRepositoryPath() + "/foo/bar.jar!/");
assertModuleLibDeps("project", "lib");
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>");
assertProjectLibraries("lib");
assertModuleLibDeps("project", "lib");
}
public void testDoNoRemoveUnusedUserProjectLibraries() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>");
createProjectLibrary("lib");
addLibraryRoot("lib", OrderRootType.CLASSES, "file://" + getRepositoryPath() + "/foo/bar.jar!/");
assertProjectLibraries("lib");
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>");
assertProjectLibraries("lib");
}
public void testRemovingUnusedLibrariesIfProjectRemoved() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m1</module>" +
" <module>m2</module>" +
"</modules>");
createModulePom("m1", "<groupId>test</groupId>" +
"<artifactId>m1</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>group</groupId>" +
" <artifactId>lib1</artifactId>" +
" <version>1</version>" +
" </dependency>" +
"</dependencies>");
createModulePom("m2", "<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>group</groupId>" +
" <artifactId>lib2</artifactId>" +
" <version>1</version>" +
" </dependency>" +
"</dependencies>");
importProject();
assertProjectLibraries("Maven: group:lib1:1",
"Maven: group:lib2:1");
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m1</module>" +
"</modules>");
configConfirmationForYesAnswer();
readProjects(Arrays.asList(myProjectPom));
resolveDependenciesAndImport();
assertProjectLibraries("Maven: group:lib1:1");
}
public void testRemovingUnusedLibraryWithClassifier() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>group</groupId>" +
" <artifactId>lib1</artifactId>" +
" <version>1</version>" +
" <classifier>tests</classifier>" +
" </dependency>" +
" <dependency>" +
" <groupId>group</groupId>" +
" <artifactId>lib2</artifactId>" +
" <version>1</version>" +
" <type>test-jar</type>" +
" <classifier>tests</classifier>" +
" </dependency>" +
"</dependencies>");
assertProjectLibraries("Maven: group:lib1:tests:1",
"Maven: group:lib2:test-jar:tests:1");
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>");
assertProjectLibraries();
}
private Library createProjectLibrary(final String libraryName) {
AccessToken accessToken = WriteAction.start();
try {
return ProjectLibraryTable.getInstance(myProject).createLibrary(libraryName);
}
finally {
accessToken.finish();
}
}
private void createAndAddProjectLibrary(final String moduleName, final String libraryName) {
ApplicationManager.getApplication().runWriteAction(new Runnable() {
public void run() {
Library lib = createProjectLibrary(libraryName);
ModuleRootModificationUtil.addDependency(getModule(moduleName), lib);
}
});
}
private void clearLibraryRoots(final String libraryName, final OrderRootType... types) {
ApplicationManager.getApplication().runWriteAction(new Runnable() {
public void run() {
Library lib = ProjectLibraryTable.getInstance(myProject).getLibraryByName(libraryName);
Library.ModifiableModel model = lib.getModifiableModel();
for (OrderRootType eachType : types) {
for (String each : model.getUrls(eachType)) {
model.removeRoot(each, eachType);
}
}
model.commit();
}
});
}
private void addLibraryRoot(final String libraryName, final OrderRootType type, final String path) {
ApplicationManager.getApplication().runWriteAction(new Runnable() {
public void run() {
Library lib = ProjectLibraryTable.getInstance(myProject).getLibraryByName(libraryName);
Library.ModifiableModel model = lib.getModifiableModel();
model.addRoot(path, type);
model.commit();
}
});
}
public void testEjbDependenciesInJarProject() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>foo</groupId>" +
" <artifactId>foo</artifactId>" +
" <version>1</version>" +
" <type>ejb</type>" +
" </dependency>" +
" <dependency>" +
" <groupId>foo</groupId>" +
" <artifactId>bar</artifactId>" +
" <version>1</version>" +
" <type>ejb-client</type>" +
" </dependency>" +
"</dependencies>");
assertModules("project");
assertModuleLibDeps("project", "Maven: foo:foo:ejb:1", "Maven: foo:bar:ejb-client:client:1");
}
public void testDoNotFailOnAbsentAppLibrary() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>");
ApplicationManager.getApplication().runWriteAction(new Runnable() {
public void run() {
LibraryTable appTable = LibraryTablesRegistrar.getInstance().getLibraryTable();
Library lib = appTable.createLibrary("foo");
ModuleRootModificationUtil.addDependency(getModule("project"), lib);
appTable.removeLibrary(lib);
}
});
importProject(); // should not fail;
}
public void testDoNotFailToConfigureUnresolvedVersionRangeDependencies() throws Exception {
// should not throw NPE when accessing CustomArtifact.getPath();
MavenCustomRepositoryHelper helper = new MavenCustomRepositoryHelper(myDir, "local1");
String repoPath = helper.getTestDataPath("local1");
setRepositoryPath(repoPath);
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>junit</groupId>" +
" <artifactId>junit</artifactId>" +
" <version>[3.8.1,3.8.2]</version>" +
" </dependency>" +
" <dependency>" +
" <groupId>org.apache.maven.errortest</groupId>" +
" <artifactId>dep</artifactId>" +
" <version>1</version>" +
" <type>pom</type>" +
" </dependency>" +
"</dependencies>" +
"<repositories>" +
" <repository>" +
" <id>central</id>" +
" <url>file://localhost/${basedir}/repo</url>" +
" </repository>" +
"</repositories>");
assertModuleLibDeps("project", "Maven: junit:junit:3.8.2");
assertModuleLibDep("project", "Maven: junit:junit:3.8.2",
"jar://" + repoPath + "/junit/junit/3.8.2/junit-3.8.2.jar!/");
}
//public void testVersionRangeDoesntBreakIndirectDependency() throws Exception {
// createProjectPom("<groupId>test</groupId>" +
// "<artifactId>project</artifactId>" +
// "<version>1</version>" +
// "<packaging>pom</packaging>" +
//
// "<modules>" +
// " <module>m1</module>" +
// " <module>m2</module>" +
// "</modules>");
//
// createModulePom("m1", "<groupId>test</groupId>" +
// "<artifactId>m1</artifactId>" +
// "<version>1</version>" +
//
// "<dependencies>" +
// " <dependency>" +
// " <groupId>asm</groupId>" +
// " <artifactId>asm</artifactId>" +
// " <version>2.2.3</version>" +
// " </dependency>" +
// "</dependencies>");
//
// createModulePom("m2", "<groupId>test</groupId>" +
// "<artifactId>m2</artifactId>" +
// "<version>1</version>" +
//
// "<dependencies>" +
// " <dependency>" +
// " <groupId>test</groupId>" +
// " <artifactId>m1</artifactId>" +
// " <version>1</version>" +
// " </dependency>" +
// " <dependency>" +
// " <groupId>asm</groupId>" +
// " <artifactId>asm</artifactId>" +
// " <version>[2.2.3]</version>" +
// " </dependency>" +
// "</dependencies>");
//
// importProject();
//
// assertModuleModuleDeps("m2", "m1");
// assertModuleLibDeps("m1", "Maven: asm:asm:2.2.3");
// assertModuleLibDeps("m2", "Maven: asm:asm:2.2.3");
//}
//
public void testVersionRangeInDependencyManagementDoesntBreakIndirectDependency() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m</module>" +
"</modules>" +
" <dependencyManagement>\n" +
" <dependencies>\n" +
" <dependency>\n" +
" <artifactId>asm</artifactId>\n" +
" <groupId>asm</groupId>\n" +
" <version>[2.2.1]</version>\n" +
" <scope>runtime</scope>\n" +
" </dependency>\n" +
" <dependency>\n" +
" <artifactId>asm-attrs</artifactId>\n" +
" <groupId>asm</groupId>\n" +
" <version>[2.2.1]</version>\n" +
" <scope>runtime</scope>\n" +
" </dependency>\n" +
" </dependencies>\n" +
" </dependencyManagement>");
createModulePom("m", "<groupId>test</groupId>" +
"<artifactId>m</artifactId>" +
"<version>1</version>" +
"" +
" <parent>\n" +
" <groupId>test</groupId>\n" +
" <artifactId>project</artifactId>\n" +
" <version>1</version>\n" +
" </parent>" +
"<dependencies>" +
" <dependency>" +
" <artifactId>asm-attrs</artifactId>\n" +
" <groupId>asm</groupId>\n" +
" <scope>test</scope>" +
" </dependency>" +
"</dependencies>");
importProject();
assertModuleLibDeps("m", "Maven: asm:asm-attrs:2.2.1", "Maven: asm:asm:2.2.1");
}
public void testDependencyToIgnoredProject() throws Exception {
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>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>m2</artifactId>" +
" <version>2</version>" +
" </dependency>" +
"</dependencies>");
VirtualFile m2 = createModulePom("m2", "<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>2</version>");
importProject();
assertModules("project", "m1", "m2");
assertModuleModuleDeps("m1", "m2");
configConfirmationForYesAnswer();
myProjectsManager.setIgnoredFilesPaths(Collections.singletonList(m2.getPath()));
myProjectsManager.forceUpdateProjects(myProjectsManager.getProjects());
importProject();
assertModules("project", "m1");
assertModuleLibDeps("m1", "Maven: test:m2:2");
assertModuleLibDep("m1", "Maven: test:m2:2",
"jar://" + getRepositoryPath() + "/test/m2/2/m2-2.jar!/",
"jar://" + getRepositoryPath() + "/test/m2/2/m2-2-sources.jar!/",
"jar://" + getRepositoryPath() + "/test/m2/2/m2-2-javadoc.jar!/");
}
public void testSaveJdkPosition() throws Exception {
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>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>m2</artifactId>" +
" <version>1</version>" +
" </dependency>" +
" <dependency>" +
" <groupId>junit</groupId>" +
" <artifactId>junit</artifactId>" +
" <version>4.0</version>" +
" </dependency>" +
"</dependencies>");
createModulePom("m2", "<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>");
importProject();
new WriteAction() {
@Override
protected void run(Result result) throws Throwable {
ModifiableRootModel rootModel = ModuleRootManager.getInstance(getModule("m1")).getModifiableModel();
OrderEntry[] orderEntries = rootModel.getOrderEntries().clone();
assert orderEntries.length == 4;
assert orderEntries[0] instanceof JdkOrderEntry;
assert orderEntries[1] instanceof ModuleSourceOrderEntry;
assert ((ModuleOrderEntry)orderEntries[2]).getModuleName().equals("m2");
assert "Maven: junit:junit:4.0".equals(((LibraryOrderEntry)orderEntries[3]).getLibraryName());
rootModel.rearrangeOrderEntries(new OrderEntry[]{orderEntries[2], orderEntries[3], orderEntries[0], orderEntries[1]});
rootModel.commit();
}
}.execute();
resolveDependenciesAndImport();
// JDK position was saved
OrderEntry[] orderEntries = ModuleRootManager.getInstance(getModule("m1")).getOrderEntries();
assert orderEntries.length == 4;
assert ((ModuleOrderEntry)orderEntries[0]).getModuleName().equals("m2");
assert "Maven: junit:junit:4.0".equals(((LibraryOrderEntry)orderEntries[1]).getLibraryName());
assert orderEntries[2] instanceof JdkOrderEntry;
assert orderEntries[3] instanceof ModuleSourceOrderEntry;
}
public void testSaveJdkPositionSystemDependency() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>m1</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>systemDep</artifactId>" +
" <version>1</version>" +
" <scope>system</scope>" +
" <systemPath>${java.home}/lib/rt.jar</systemPath>" +
" </dependency>" +
" <dependency>" +
" <groupId>junit</groupId>" +
" <artifactId>junit</artifactId>" +
" <version>4.0</version>" +
" </dependency>" +
"</dependencies>");
importProject();
new WriteAction() {
@Override
protected void run(Result result) throws Throwable {
ModifiableRootModel rootModel = ModuleRootManager.getInstance(getModule("m1")).getModifiableModel();
OrderEntry[] orderEntries = rootModel.getOrderEntries().clone();
assert orderEntries.length == 4;
assert orderEntries[0] instanceof JdkOrderEntry;
assert orderEntries[1] instanceof ModuleSourceOrderEntry;
assert "Maven: test:systemDep:1".equals(((LibraryOrderEntry)orderEntries[2]).getLibraryName());
assert "Maven: junit:junit:4.0".equals(((LibraryOrderEntry)orderEntries[3]).getLibraryName());
rootModel.rearrangeOrderEntries(new OrderEntry[]{orderEntries[2], orderEntries[3], orderEntries[0], orderEntries[1]});
rootModel.commit();
}
}.execute();
resolveDependenciesAndImport();
// JDK position was saved
OrderEntry[] orderEntries = ModuleRootManager.getInstance(getModule("m1")).getOrderEntries();
assert orderEntries.length == 4;
assert "Maven: test:systemDep:1".equals(((LibraryOrderEntry)orderEntries[0]).getLibraryName());
assert "Maven: junit:junit:4.0".equals(((LibraryOrderEntry)orderEntries[1]).getLibraryName());
assert orderEntries[2] instanceof JdkOrderEntry;
assert orderEntries[3] instanceof ModuleSourceOrderEntry;
}
}