return new File(new File(userHome, DOT_M2_DIR), MavenConstants.SETTINGS_XML);
}
- @Nullable
+ @NotNull
public static File resolveLocalRepository(@Nullable String mavenHome, @Nullable String userSettings, @Nullable String override) {
+ File result = doResolveLocalRepository(mavenHome, userSettings, override);
+ try {
+ return result.getCanonicalFile();
+ }
+ catch (IOException e) {
+ return result;
+ }
+ }
+
+ @NotNull
+ private static File doResolveLocalRepository(String mavenHome, String userSettings, String override) {
if (!StringUtil.isEmpty(override)) {
return new File(override);
}
FileInputStream is = new FileInputStream(file);
try {
JDOMReader reader = new JDOMReader(is);
- return reader.getChildText(reader.getRootElement(), LOCAL_REPOSITORY_TAG);
+ return expandProperties(reader.getChildText(reader.getRootElement(), LOCAL_REPOSITORY_TAG));
}
finally {
is.close();
}
}
+ private static String expandProperties(String text) {
+ if (StringUtil.isEmptyOrSpaces(text)) return text;
+ Properties props = collectSystemProperties();
+ for (Map.Entry<Object, Object> each : props.entrySet()) {
+ text = text.replace("${" + each.getKey() + "}", (CharSequence)each.getValue());
+ }
+ return text;
+ }
+
public static List<String> getBasicPhasesList() {
return Arrays.asList(basicPhases);
}
if (!Comparing.equal(this.localRepository, localRepository)) {
this.localRepository = localRepository;
- myEffectiveLocalRepositoryCache = null;
- firePathChanged();
+ localRepositoryChanged();
}
}
}
+ public void localRepositoryChanged() {
+ myEffectiveLocalRepositoryCache = null;
+ firePathChanged();
+ }
+
@NotNull
public String getMavenHome() {
return mavenHome;
scheduleUpdateAll(true, false);
}
+ private void onSettingsXmlChange() {
+ myGeneralSettings.localRepositoryChanged();
+ // onSettingsChange() will be called indirectly by pathsChanged listener on GeneralSettings object
+ }
+
private class MyRootChangesListener implements ModuleRootListener {
public void beforeRootsChange(ModuleRootEvent event) {
}
// can not be started since the window has already been closed.
if (areFileSetsInitialised()) {
if (settingsHaveChanged) {
- onSettingsChange();
+ onSettingsXmlChange();
}
else {
filesToUpdate.removeAll(filesToRemove);
<keyboard-shortcut first-keystroke="DELETE" keymap="$default"/>
</action>
- <action id="Maven.OpenProfilesXml"
- class="org.jetbrains.idea.maven.project.actions.OpenOrCreateProfilesXmlAction"
- text="Open profiles.xml"
- description="Open profiles.xml for selected projects"/>
-
<action id="Maven.OpenSettingsXml"
class="org.jetbrains.idea.maven.project.actions.OpenOrCreateSettingsXmlAction"
text="Open settings.xml"
description="Open Maven settings.xml"/>
+ <action id="Maven.OpenProfilesXml"
+ class="org.jetbrains.idea.maven.project.actions.OpenOrCreateProfilesXmlAction"
+ text="Open profiles.xml"
+ description="Open profiles.xml for selected projects"/>
+
<action id="Maven.IgnoreProjects"
class="org.jetbrains.idea.maven.project.actions.ToggleIgnoredProjectsAction"
text="_Ignore Projects"
<reference id="Maven.IgnoreProjects"/>
<reference id="Maven.RemoveManagedFiles"/>
<separator/>
- <reference id="Maven.OpenProfilesXml"/>
<reference id="Maven.OpenSettingsXml"/>
+ <reference id="Maven.OpenProfilesXml"/>
<separator/>
</group>
+++ /dev/null
-/*
- * 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 org.jetbrains.idea.maven.MavenImportingTestCase;
-
-public class MavenProjectsManagerSettingsXmlTest extends MavenImportingTestCase {
- public void testUpdatingProjectsOnSettingsXmlCreationAndDeletion() throws Exception {
- deleteSettingsXml();
- initProjectsManager(true);
- createProjectPom("<groupId>test</groupId>" +
- "<artifactId>project</artifactId>" +
- "<version>1</version>");
-
- importProject();
- assertUnorderedElementsAreEqual(myProjectsTree.getAvailableProfiles());
-
- updateSettingsXml("<profiles>" +
- " <profile>" +
- " <id>one</id>" +
- " </profile>" +
- "</profiles>");
- waitForReadingCompletion();
- assertUnorderedElementsAreEqual(myProjectsTree.getAvailableProfiles(), "one");
-
- deleteSettingsXml();
- waitForReadingCompletion();
- assertUnorderedElementsAreEqual(myProjectsTree.getAvailableProfiles());
- }
-}
\ No newline at end of file
assertUnorderedElementsAreEqual(childNode.getSources(), FileUtil.toSystemDependentName(getProjectPath() + "/m/value1"));
}
+ public void testUpdatingProjectsOnSettingsXmlCreationAndDeletion() throws Exception {
+ deleteSettingsXml();
+ createProjectPom("<groupId>test</groupId>" +
+ "<artifactId>project</artifactId>" +
+ "<version>1</version>");
+
+ importProject();
+ assertUnorderedElementsAreEqual(myProjectsTree.getAvailableProfiles());
+
+ updateSettingsXml("<profiles>" +
+ " <profile>" +
+ " <id>one</id>" +
+ " </profile>" +
+ "</profiles>");
+ waitForReadingCompletion();
+ assertUnorderedElementsAreEqual(myProjectsTree.getAvailableProfiles(), "one");
+
+ deleteSettingsXml();
+ waitForReadingCompletion();
+ assertUnorderedElementsAreEqual(myProjectsTree.getAvailableProfiles());
+ }
+
+ public void testUpdatingMavenPathsWhenSettingsChanges() throws Exception {
+ createProjectPom("<groupId>test</groupId>" +
+ "<artifactId>project</artifactId>" +
+ "<version>1</version>");
+
+ File repo1 = new File(myDir, "localRepo1");
+ updateSettingsXml("<localRepository>" + repo1.getPath() + "</localRepository>");
+
+ waitForReadingCompletion();
+ assertEquals(repo1, getMavenGeneralSettings().getEffectiveLocalRepository());
+
+ File repo2 = new File(myDir, "localRepo2");
+ updateSettingsXml("<localRepository>" + repo2.getPath() + "</localRepository>");
+
+ waitForReadingCompletion();
+ assertEquals(repo2, getMavenGeneralSettings().getEffectiveLocalRepository());
+ }
+
+ public void testResolvingEnvVariableInRepositoryPath() throws Exception {
+ String temp = System.getenv("TMP");
+ updateSettingsXml("<localRepository>${env.TEMP}/tmpRepo</localRepository>");
+
+ File repo = new File(temp + "/tmpRepo").getCanonicalFile();
+ assertEquals(repo.getPath(), getMavenGeneralSettings().getEffectiveLocalRepository().getPath());
+
+ 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",
+ "jar://" + FileUtil.toSystemIndependentName(repo.getPath()) + "/junit/junit/4.0/junit-4.0.jar!/");
+ }
+
public void testUpdatingProjectsOnProfilesXmlChange() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +