blob: 544cacf64f5e964715d5837eb61499aded79e0ab [file] [log] [blame]
/*
* 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.project;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.idea.maven.MavenImportingTestCase;
import org.jetbrains.idea.maven.model.MavenArtifactNode;
import org.jetbrains.idea.maven.model.MavenPlugin;
import org.jetbrains.idea.maven.model.MavenRemoteRepository;
import org.jetbrains.idea.maven.utils.MavenJDOMUtil;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
public class MavenProjectTest extends MavenImportingTestCase {
public void testCollectingPlugins() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<build>" +
" <plugins>" +
" <plugin>" +
" <groupId>group1</groupId>" +
" <artifactId>id1</artifactId>" +
" <version>1</version>" +
" </plugin>" +
" <plugin>" +
" <groupId>group1</groupId>" +
" <artifactId>id2</artifactId>" +
" </plugin>" +
" <plugin>" +
" <groupId>group2</groupId>" +
" <artifactId>id1</artifactId>" +
" </plugin>" +
" </plugins>" +
"</build>");
assertModules("project");
assertDeclaredPlugins(p("group1", "id1"), p("group1", "id2"), p("group2", "id1"));
}
public void testPluginsContainDefaultPlugins() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<build>" +
" <plugins>" +
" <plugin>" +
" <groupId>group1</groupId>" +
" <artifactId>id1</artifactId>" +
" <version>1</version>" +
" </plugin>" +
" </plugins>" +
"</build>");
assertModules("project");
assertContain(p(getMavenProject().getPlugins()), p("group1", "id1"), p("org.apache.maven.plugins", "maven-compiler-plugin"));
}
public void testDefaultPluginsAsDeclared() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<build>" +
" <plugins>" +
" <plugin>" +
" <groupId>org.apache.maven.plugins</groupId>" +
" <artifactId>maven-compiler-plugin</artifactId>" +
" </plugin>" +
" </plugins>" +
"</build>");
assertModules("project");
assertDeclaredPlugins(p("org.apache.maven.plugins", "maven-compiler-plugin"));
}
public void testDoNotDuplicatePluginsFromBuildAndManagement() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<build>" +
" <plugins>" +
" <plugin>" +
" <groupId>org.apache.maven.plugins</groupId>" +
" <artifactId>maven-compiler-plugin</artifactId>" +
" </plugin>" +
" </plugins>" +
" <pluginManagement>" +
" <plugins>" +
" <plugin>" +
" <groupId>org.apache.maven.plugins</groupId>" +
" <artifactId>maven-compiler-plugin</artifactId>" +
" </plugin>" +
" </plugins>" +
" </pluginManagement>" +
"</build>");
assertModules("project");
assertDeclaredPlugins(p("org.apache.maven.plugins", "maven-compiler-plugin"));
}
public void testCollectingPluginsFromProfilesAlso() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<build>" +
" <plugins>" +
" <plugin>" +
" <groupId>group</groupId>" +
" <artifactId>id</artifactId>" +
" <version>1</version>" +
" </plugin>" +
" </plugins>" +
"</build>" +
"<profiles>" +
" <profile>" +
" <id>profile1</id>" +
" <build>" +
" <plugins>" +
" <plugin>" +
" <groupId>group1</groupId>" +
" <artifactId>id1</artifactId>" +
" </plugin>" +
" </plugins>" +
" </build>" +
" </profile>" +
" <profile>" +
" <id>profile2</id>" +
" <build>" +
" <plugins>" +
" <plugin>" +
" <groupId>group2</groupId>" +
" <artifactId>id2</artifactId>" +
" </plugin>" +
" </plugins>" +
" </build>" +
" </profile>" +
"</profiles>");
assertModules("project");
assertDeclaredPlugins(p("group", "id"));
importProjectWithProfiles("profile1");
assertDeclaredPlugins(p("group", "id"), p("group1", "id1"));
importProjectWithProfiles("profile2");
assertDeclaredPlugins(p("group", "id"), p("group2", "id2"));
importProjectWithProfiles("profile1", "profile2");
assertDeclaredPlugins(p("group", "id"), p("group1", "id1"), p("group2", "id2"));
}
public void testFindingPlugin() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<build>" +
" <plugins>" +
" <plugin>" +
" <groupId>group</groupId>" +
" <artifactId>id</artifactId>" +
" <version>1</version>" +
" </plugin>" +
" </plugins>" +
"</build>" +
"<profiles>" +
" <profile>" +
" <id>profile1</id>" +
" <build>" +
" <plugins>" +
" <plugin>" +
" <groupId>group1</groupId>" +
" <artifactId>id1</artifactId>" +
" </plugin>" +
" </plugins>" +
" </build>" +
" </profile>" +
" <profile>" +
" <id>profile2</id>" +
" <build>" +
" <plugins>" +
" <plugin>" +
" <groupId>group2</groupId>" +
" <artifactId>id2</artifactId>" +
" </plugin>" +
" </plugins>" +
" </build>" +
" </profile>" +
"</profiles>");
assertModules("project");
assertEquals(p("group", "id"), p(findPlugin("group", "id")));
assertNull(findPlugin("group1", "id1"));
importProjectWithProfiles("profile1");
assertEquals(p("group1", "id1"), p(findPlugin("group1", "id1")));
assertNull(findPlugin("group2", "id2"));
}
public void testFindingDefaultPlugin() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<build>" +
" <plugins>" +
" <plugin>" +
" <groupId>group</groupId>" +
" <artifactId>id</artifactId>" +
" <version>1</version>" +
" </plugin>" +
" </plugins>" +
"</build>");
assertModules("project");
assertNotNull(findPlugin("group", "id"));
assertNotNull(findPlugin("org.apache.maven.plugins", "maven-compiler-plugin"));
}
public void testFindingMavenGroupPluginWithDefaultPluginGroup() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<build>" +
" <plugins>" +
" <plugin>" +
" <artifactId>some.plugin.id</artifactId>" +
" </plugin>" +
" </plugins>" +
"</build>");
assertModules("project");
assertEquals(p("org.apache.maven.plugins", "some.plugin.id"),
p(findPlugin("org.apache.maven.plugins", "some.plugin.id")));
assertNull(findPlugin("some.other.group.id", "some.plugin.id"));
}
public void testPluginConfiguration() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<build>" +
" <plugins>" +
" <plugin>" +
" <groupId>group</groupId>" +
" <artifactId>id1</artifactId>" +
" <version>1</version>" +
" </plugin>" +
" <plugin>" +
" <groupId>group</groupId>" +
" <artifactId>id2</artifactId>" +
" <version>1</version>" +
" <configuration>" +
" </configuration>" +
" </plugin>" +
" <plugin>" +
" <groupId>group</groupId>" +
" <artifactId>id3</artifactId>" +
" <version>1</version>" +
" <configuration>" +
" <one>" +
" <two>foo</two>" +
" </one>" +
" </configuration>" +
" </plugin>" +
" </plugins>" +
"</build>");
assertNull(findPluginConfig("group", "id1", "one.two"));
assertNull(findPluginConfig("group", "id2", "one.two"));
assertEquals("foo", findPluginConfig("group", "id3", "one.two"));
assertNull(findPluginConfig("group", "id3", "one.two.three"));
}
public void testPluginGoalConfiguration() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<build>" +
" <plugins>" +
" <plugin>" +
" <groupId>group</groupId>" +
" <artifactId>id</artifactId>" +
" <version>1</version>" +
" <executions>" +
" <execution>" +
" <id>a</id>" +
" <goals>" +
" <goal>compile</goal>" +
" </goals>" +
" <configuration>" +
" <one>" +
" <two>a</two>" +
" </one>" +
" </configuration>" +
" </execution>" +
" <execution>" +
" <id>b</id>" +
" <goals>" +
" <goal>testCompile</goal>" +
" </goals>" +
" <configuration>" +
" <one>" +
" <two>b</two>" +
" </one>" +
" </configuration>" +
" </execution>" +
" </executions>" +
" </plugin>" +
" </plugins>" +
"</build>");
assertNull(findPluginGoalConfig("group", "id", "package", "one.two"));
assertEquals("a", findPluginGoalConfig("group", "id", "compile", "one.two"));
assertEquals("b", findPluginGoalConfig("group", "id", "testCompile", "one.two"));
}
public void testPluginConfigurationHasResolvedVariables() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<properties>" +
" <some.path>somePath</some.path>" +
"</properties>" +
"<build>" +
" <plugins>" +
" <plugin>" +
" <groupId>group</groupId>" +
" <artifactId>id</artifactId>" +
" <version>1</version>" +
" <configuration>" +
" <one>${some.path}</one>" +
" </configuration>" +
" </plugin>" +
" </plugins>" +
"</build>");
assertEquals("somePath", findPluginConfig("group", "id", "one"));
}
public void testPluginConfigurationWithStandardVariable() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<build>" +
" <plugins>" +
" <plugin>" +
" <groupId>group</groupId>" +
" <artifactId>id</artifactId>" +
" <version>1</version>" +
" <configuration>" +
" <one>${project.build.directory}</one>" +
" </configuration>" +
" </plugin>" +
" </plugins>" +
"</build>");
assertEquals(getProjectPath() + "/target",
FileUtil.toSystemIndependentName(findPluginConfig("group", "id", "one")));
}
public void testPluginConfigurationWithColons() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<build>" +
" <plugins>" +
" <plugin>" +
" <groupId>group</groupId>" +
" <artifactId>id</artifactId>" +
" <version>1</version>" +
" <configuration>" +
" <two:three>xxx</two:three>" +
" </configuration>" +
" </plugin>" +
" </plugins>" +
"</build>");
assertNull(findPluginConfig("group", "id", "two:three"));
}
public void testMergingPluginConfigurationFromBuildAndProfiles() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<profiles>" +
" <profile>" +
" <id>one</id>" +
" <build>" +
" <plugins>" +
" <plugin>" +
" <groupId>org.apache.maven.plugins</groupId>" +
" <artifactId>maven-compiler-plugin</artifactId>" +
" <configuration>" +
" <target>1.4</target>" +
" </configuration>" +
" </plugin>" +
" </plugins>" +
" </build>" +
" </profile>" +
" <profile>" +
" <id>two</id>" +
" <build>" +
" <plugins>" +
" <plugin>" +
" <groupId>org.apache.maven.plugins</groupId>" +
" <artifactId>maven-compiler-plugin</artifactId>" +
" <configuration>" +
" <source>1.4</source>" +
" </configuration>" +
" </plugin>" +
" </plugins>" +
" </build>" +
" </profile>" +
"</profiles>" +
"<build>" +
" <plugins>" +
" <plugin>" +
" <groupId>org.apache.maven.plugins</groupId>" +
" <artifactId>maven-compiler-plugin</artifactId>" +
" <configuration>" +
" <debug>true</debug>" +
" </configuration>" +
" </plugin>" +
" </plugins>" +
"</build>");
importProjectWithProfiles("one", "two");
MavenPlugin plugin = findPlugin("org.apache.maven.plugins", "maven-compiler-plugin");
assertEquals("1.4", plugin.getConfigurationElement().getChildText("source"));
assertEquals("1.4", plugin.getConfigurationElement().getChildText("target"));
assertEquals("true", plugin.getConfigurationElement().getChildText("debug"));
}
public void testCompilerPluginConfigurationFromProperties() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<properties>\n" +
" <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n" +
" <maven.compiler.source>1.7</maven.compiler.source>\n" +
" <maven.compiler.target>1.7</maven.compiler.target>\n" +
"</properties>");
importProject();
assertEquals("1.7", getMavenProject().getSourceLevel());
assertEquals("1.7", getMavenProject().getTargetLevel());
}
public void testCompilerPluginConfigurationFromPropertiesOverride() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<properties>\n" +
" <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n" +
" <maven.compiler.source>1.7</maven.compiler.source>\n" +
" <maven.compiler.target>1.7</maven.compiler.target>\n" +
"</properties>" +
"<build>" +
" <plugins>" +
" <plugin>" +
" <groupId>org.apache.maven.plugins</groupId>" +
" <artifactId>maven-compiler-plugin</artifactId>" +
" <configuration>" +
" <target>1.4</target>" +
" <source>1.4</source>" +
" </configuration>" +
" </plugin>" +
" </plugins>" +
"</build>");
importProject();
assertEquals("1.4", getMavenProject().getSourceLevel());
assertEquals("1.4", getMavenProject().getTargetLevel());
}
public void testMergingPluginConfigurationFromBuildProfilesAndPluginsManagement() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<profiles>" +
" <profile>" +
" <id>one</id>" +
" <build>" +
" <plugins>" +
" <plugin>" +
" <groupId>org.apache.maven.plugins</groupId>" +
" <artifactId>maven-compiler-plugin</artifactId>" +
" <configuration>" +
" <target>1.4</target>" +
" </configuration>" +
" </plugin>" +
" </plugins>" +
" </build>" +
" </profile>" +
"</profiles>" +
"<build>" +
" <plugins>" +
" <plugin>" +
" <groupId>org.apache.maven.plugins</groupId>" +
" <artifactId>maven-compiler-plugin</artifactId>" +
" <configuration>" +
" <debug>true</debug>" +
" </configuration>" +
" </plugin>" +
" </plugins>" +
" <pluginManagement>" +
" <plugins>" +
" <plugin>" +
" <groupId>org.apache.maven.plugins</groupId>" +
" <artifactId>maven-compiler-plugin</artifactId>" +
" <configuration>" +
" <source>1.4</source>" +
" </configuration>" +
" </plugin>" +
" </plugins>" +
" </pluginManagement>" +
"</build>");
importProjectWithProfiles("one");
MavenPlugin plugin = findPlugin("org.apache.maven.plugins", "maven-compiler-plugin");
assertEquals("1.4", plugin.getConfigurationElement().getChildText("source"));
assertEquals("1.4", plugin.getConfigurationElement().getChildText("target"));
assertEquals("true", plugin.getConfigurationElement().getChildText("debug"));
}
public void testDoesNotCollectProfilesWithoutId() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<profiles>" +
" <profile>" +
" <id>one</id>" +
" </profile>" +
" <profile>" +
" </profile>" +
"</profiles>");
assertOrderedElementsAreEqual(getMavenProject().getProfilesIds(), "one");
}
public void testCollectingRepositories() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<repositories>" +
" <repository>" +
" <id>one</id>" +
" <url>http://repository.one.com</url>" +
" </repository>" +
" <repository>" +
" <id>two</id>" +
" <url>http://repository.two.com</url>" +
" </repository>" +
"</repositories>");
List<MavenRemoteRepository> result = getMavenProject().getRemoteRepositories();
assertEquals(3, result.size());
assertEquals("one", result.get(0).getId());
assertEquals("two", result.get(1).getId());
assertEquals("central", result.get(2).getId());
}
public void testOverridingCentralRepository() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<repositories>" +
" <repository>" +
" <id>central</id>" +
" <url>http://my.repository.com</url>" +
" </repository>" +
"</repositories>");
List<MavenRemoteRepository> result = getMavenProject().getRemoteRepositories();
assertEquals(1, result.size());
assertEquals("central", result.get(0).getId());
assertEquals("http://my.repository.com", result.get(0).getUrl());
}
public void testCollectingRepositoriesFromParent() throws Exception {
VirtualFile m1 = createModulePom("p1",
"<groupId>test</groupId>" +
"<artifactId>p1</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<repositories>" +
" <repository>" +
" <id>one</id>" +
" <url>http://repository.one.com</url>" +
" </repository>" +
" <repository>" +
" <id>two</id>" +
" <url>http://repository.two.com</url>" +
" </repository>" +
"</repositories>");
VirtualFile m2 = createModulePom("p2",
"<groupId>test</groupId>" +
"<artifactId>p2</artifactId>" +
"<version>1</version>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>p1</artifactId>" +
" <version>1</version>" +
"</parent>");
importProjects(m1, m2);
List<MavenRemoteRepository> result = myProjectsTree.getRootProjects().get(0).getRemoteRepositories();
assertEquals(3, result.size());
assertEquals("one", result.get(0).getId());
assertEquals("two", result.get(1).getId());
assertEquals("central", result.get(2).getId());
result = myProjectsTree.getRootProjects().get(1).getRemoteRepositories();
assertEquals(3, result.size());
assertEquals("one", result.get(0).getId());
assertEquals("two", result.get(1).getId());
assertEquals("central", result.get(2).getId());
}
public void testMavenModelMap() throws Exception {
importProject("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<build>" +
" <finalName>foo</finalName>" +
" <plugins>" +
" <plugin>" +
" <groupId>group1</groupId>" +
" <artifactId>id1</artifactId>" +
" <version>1</version>" +
" </plugin>" +
" </plugins>" +
"</build>");
MavenProject p = getMavenProject();
Map<String,String> map = p.getModelMap();
assertEquals("test", map.get("groupId"));
assertEquals("foo", map.get("build.finalName"));
assertEquals(new File(p.getDirectory(), "target").toString(), map.get("build.directory"));
assertEquals(null, map.get("build.plugins"));
assertEquals(null, map.get("build.pluginMap"));
}
public void testDependenciesTree() throws Exception {
VirtualFile m1 = createModulePom("p1",
"<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>lib1</artifactId>" +
" <version>1</version>" +
" </dependency>" +
"</dependencies>");
VirtualFile m2 = createModulePom("p2",
"<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>junit</groupId>" +
" <artifactId>junit</artifactId>" +
" <version>4.0</version>" +
" </dependency>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>lib2</artifactId>" +
" <version>1</version>" +
" </dependency>" +
"</dependencies>");
importProjects(m1, m2);
resolveDependenciesAndImport();
assertDependenciesNodes(myProjectsTree.getRootProjects().get(0).getDependencyTree(),
"test:m2:jar:1->(junit:junit:jar:4.0->(),test:lib2:jar:1->()),test:lib1:jar:1->()");
}
public void testDependenciesTreeWithTypesAndClassifiers() throws Exception {
VirtualFile m1 = createModulePom("p1",
"<groupId>test</groupId>" +
"<artifactId>m1</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>m2</artifactId>" +
" <version>1</version>" +
" <type>pom</type>" +
" <classifier>test</classifier>" +
" </dependency>" +
"</dependencies>");
VirtualFile m2 = createModulePom("p2",
"<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>lib</artifactId>" +
" <version>1</version>" +
" </dependency>" +
"</dependencies>");
importProjects(m1, m2);
resolveDependenciesAndImport();
assertDependenciesNodes(myProjectsTree.getRootProjects().get(0).getDependencyTree(),
"test:m2:pom:test:1->(test:lib:jar:1->())");
}
public void testDependenciesTreeWithConflict() throws Exception {
VirtualFile m1 = createModulePom("p1",
"<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>lib</artifactId>" +
" <version>1</version>" +
" </dependency>" +
"</dependencies>");
VirtualFile m2 = createModulePom("p2",
"<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>lib</artifactId>" +
" <version>2</version>" +
" </dependency>" +
"</dependencies>");
importProjects(m1, m2);
resolveDependenciesAndImport();
List<MavenArtifactNode> nodes = myProjectsTree.getRootProjects().get(0).getDependencyTree();
assertDependenciesNodes(nodes,
"test:m2:jar:1->(test:lib:jar:2[CONFLICT:test:lib:jar:1]->())," +
"test:lib:jar:1->()");
assertSame(nodes.get(0).getDependencies().get(0).getRelatedArtifact(),
nodes.get(1).getArtifact());
}
public void testDependencyTreeDuplicates() throws Exception {
VirtualFile m1 = createModulePom("p1",
"<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>" +
" </dependency>" +
"</dependencies>");
VirtualFile m2 = createModulePom("p2",
"<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>lib</artifactId>" +
" <version>1</version>" +
" </dependency>" +
"</dependencies>");
VirtualFile m3 = createModulePom("p3",
"<groupId>test</groupId>" +
"<artifactId>m3</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>lib</artifactId>" +
" <version>1</version>" +
" </dependency>" +
"</dependencies>");
importProjects(m1, m2, m3);
resolveDependenciesAndImport();
List<MavenArtifactNode> nodes = myProjectsTree.findProject(m1).getDependencyTree();
assertDependenciesNodes(nodes, "test:m2:jar:1->(test:lib:jar:1->()),test:m3:jar:1->(test:lib:jar:1[DUPLICATE:test:lib:jar:1]->())");
assertSame(nodes.get(0).getDependencies().get(0).getArtifact(),
nodes.get(1).getDependencies().get(0).getRelatedArtifact());
}
protected void assertDependenciesNodes(List<MavenArtifactNode> nodes, String expected) {
assertEquals(expected, MavenArtifactNode.formatNodesList(nodes));
}
private String findPluginConfig(String groupId, String artifactId, String path) {
return MavenJDOMUtil.findChildValueByPath(getMavenProject().getPluginConfiguration(groupId, artifactId), path);
}
private String findPluginGoalConfig(String groupId, String artifactId, String goal, String path) {
return MavenJDOMUtil.findChildValueByPath(getMavenProject().getPluginGoalConfiguration(groupId, artifactId, goal), path);
}
private void assertDeclaredPlugins(PluginInfo... expected) {
assertUnorderedElementsAreEqual(p(getMavenProject().getDeclaredPlugins()), expected);
}
private MavenPlugin findPlugin(String groupId, String artifactId) {
return getMavenProject().findPlugin(groupId, artifactId);
}
private MavenProject getMavenProject() {
return myProjectsTree.getRootProjects().get(0);
}
private static PluginInfo p(String groupId, String artifactId) {
return new PluginInfo(groupId, artifactId);
}
private static PluginInfo p(MavenPlugin mavenPlugin) {
return new PluginInfo(mavenPlugin.getGroupId(), mavenPlugin.getArtifactId());
}
private List<PluginInfo> p(Collection<MavenPlugin> mavenPlugins) {
List<PluginInfo> res = new ArrayList<PluginInfo>(mavenPlugins.size());
for (MavenPlugin mavenPlugin : mavenPlugins) {
res.add(p(mavenPlugin));
}
return res;
}
private static class PluginInfo {
String groupId;
String artifactId;
private PluginInfo(String groupId, String artifactId) {
this.groupId = groupId;
this.artifactId = artifactId;
}
@Override
public String toString() {
return groupId + ":" + artifactId;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
PluginInfo info = (PluginInfo)o;
if (artifactId != null ? !artifactId.equals(info.artifactId) : info.artifactId != null) return false;
if (groupId != null ? !groupId.equals(info.groupId) : info.groupId != null) return false;
return true;
}
@Override
public int hashCode() {
int result = groupId != null ? groupId.hashCode() : 0;
result = 31 * result + (artifactId != null ? artifactId.hashCode() : 0);
return result;
}
}
}