You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by ma...@apache.org on 2019/05/27 20:13:03 UTC
[netbeans] branch master updated: Interpret profiles and property
definitions from .mvn/maven.config when present
This is an automated email from the ASF dual-hosted git repository.
matthiasblaesing pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/master by this push:
new 5843ac5 Interpret profiles and property definitions from .mvn/maven.config when present
5843ac5 is described below
commit 5843ac53892acbd5b768c60ebf9c2e0d5ca53333
Author: Jesse Glick <jg...@apache.org>
AuthorDate: Mon May 27 16:12:52 2019 -0400
Interpret profiles and property definitions from .mvn/maven.config when present
---
.../netbeans/modules/maven/NbMavenProjectImpl.java | 7 ++-
.../maven/modelcache/MavenProjectCache.java | 45 +++++++++++++++-
.../modules/maven/NbMavenProjectImplTest.java | 62 ++++++++++++++++++++--
3 files changed, 109 insertions(+), 5 deletions(-)
diff --git a/java/maven/src/org/netbeans/modules/maven/NbMavenProjectImpl.java b/java/maven/src/org/netbeans/modules/maven/NbMavenProjectImpl.java
index fafa8d2..6acaab0 100644
--- a/java/maven/src/org/netbeans/modules/maven/NbMavenProjectImpl.java
+++ b/java/maven/src/org/netbeans/modules/maven/NbMavenProjectImpl.java
@@ -231,7 +231,12 @@ public final class NbMavenProjectImpl implements Project {
@Override
public File[] getFiles() {
File homeFile = FileUtil.normalizeFile(MavenCli.userMavenConfigurationHome);
- return new File[] {new File(projectFile.getParentFile(), "nb-configuration.xml"), projectFile, new File(homeFile, "settings.xml")}; //NOI18N
+ return new File[] {
+ new File(projectFile.getParentFile(), "nb-configuration.xml"), //NOI18N
+ projectFile,
+ new File(new File(projectFile.getParentFile(), ".mvn"), "maven.config"), //NOI18N
+ new File(homeFile, "settings.xml"), //NOI18N
+ };
}
});
problemReporter = new ProblemReporterImpl(this);
diff --git a/java/maven/src/org/netbeans/modules/maven/modelcache/MavenProjectCache.java b/java/maven/src/org/netbeans/modules/maven/modelcache/MavenProjectCache.java
index 364e0ec..9905a16 100644
--- a/java/maven/src/org/netbeans/modules/maven/modelcache/MavenProjectCache.java
+++ b/java/maven/src/org/netbeans/modules/maven/modelcache/MavenProjectCache.java
@@ -19,16 +19,20 @@
package org.netbeans.modules.maven.modelcache;
import java.io.File;
+import java.io.IOException;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.WeakHashMap;
+import java.util.function.BiConsumer;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.SwingUtilities;
@@ -146,8 +150,27 @@ public final class MavenProjectCache {
M2Configuration active = config.getActiveConfiguration();
MavenExecutionResult res = null;
try {
+ FileObject mavenConfig = projectDir.getFileObject(".mvn/maven.config");
+ List<String> mavenConfigOpts = Collections.emptyList();
+ if (mavenConfig != null && mavenConfig.isData()) {
+ mavenConfigOpts = Arrays.asList(mavenConfig.asText().split("\\s+"));
+ }
final MavenExecutionRequest req = projectEmbedder.createMavenExecutionRequest();
req.addActiveProfiles(active.getActivatedProfiles());
+ BiConsumer<String, String> addActiveProfiles = (opt, prefix) -> req.addActiveProfiles(Arrays.asList(opt.substring(prefix.length()).split(",")));
+ Iterator<String> optIt = mavenConfigOpts.iterator();
+ while (optIt.hasNext()) {
+ String opt = optIt.next();
+ // Could try to write/integrate a more general option parser here,
+ // but some options like -amd anyway violate GNU style.
+ if (opt.equals("-P") || opt.equals("--activate-profiles")) {
+ addActiveProfiles.accept(optIt.next(), "");
+ } else if (opt.startsWith("-P")) {
+ addActiveProfiles.accept(opt, "-P");
+ } else if (opt.startsWith("--activate-profiles=")) {
+ addActiveProfiles.accept(opt, "--activate-profiles=");
+ }
+ }
req.setPom(pomFile);
req.setNoSnapshotUpdates(true);
@@ -161,6 +184,26 @@ public final class MavenProjectCache {
req.setOffline(true);
//#238800 important to merge, not replace
Properties uprops = req.getUserProperties();
+ BiConsumer<String, String> setProperty = (opt, prefix) -> {
+ String value = opt.substring(prefix.length());
+ int equals = value.indexOf('=');
+ if (equals != -1) {
+ uprops.setProperty(value.substring(0, equals), value.substring(equals + 1));
+ } else {
+ uprops.setProperty(value, "true");
+ }
+ };
+ optIt = mavenConfigOpts.iterator();
+ while (optIt.hasNext()) {
+ String opt = optIt.next();
+ if (opt.equals("-D") || opt.equals("--define")) {
+ setProperty.accept(optIt.next(), "");
+ } else if (opt.startsWith("-D")) {
+ setProperty.accept(opt, "-D");
+ } else if (opt.startsWith("--define=")) {
+ setProperty.accept(opt, "--define=");
+ }
+ }
uprops.putAll(createUserPropsForProjectLoading(active.getProperties()));
req.setUserProperties(uprops);
res = projectEmbedder.readProjectWithDependencies(req, true);
@@ -215,7 +258,7 @@ public final class MavenProjectCache {
}
}
}
- } catch (RuntimeException exc) {
+ } catch (RuntimeException | IOException exc) {
//guard against exceptions that are not processed by the embedder
//#136184 NumberFormatException
LOG.log(Level.INFO, "Runtime exception thrown while loading maven project at " + pomFile, exc); //NOI18N
diff --git a/java/maven/test/unit/src/org/netbeans/modules/maven/NbMavenProjectImplTest.java b/java/maven/test/unit/src/org/netbeans/modules/maven/NbMavenProjectImplTest.java
index bb317c5..61dc1f5 100644
--- a/java/maven/test/unit/src/org/netbeans/modules/maven/NbMavenProjectImplTest.java
+++ b/java/maven/test/unit/src/org/netbeans/modules/maven/NbMavenProjectImplTest.java
@@ -19,13 +19,16 @@
package org.netbeans.modules.maven;
+import java.io.IOException;
import java.lang.ref.Reference;
import java.lang.ref.WeakReference;
import java.util.Collections;
import java.util.Set;
import java.util.TreeSet;
import java.util.logging.Level;
+import static junit.framework.TestCase.assertEquals;
import org.netbeans.api.annotations.common.SuppressWarnings;
+import org.netbeans.api.java.queries.SourceLevelQuery;
import org.netbeans.api.project.Project;
import org.netbeans.api.project.ProjectManager;
import org.netbeans.junit.NbTestCase;
@@ -44,8 +47,11 @@ public class NbMavenProjectImplTest extends NbTestCase {
super(name);
}
+ private FileObject wd;
+
protected @Override void setUp() throws Exception {
clearWorkDir();
+ wd = FileUtil.toFileObject(getWorkDir());
//synchronous reload of maven project asserts sanoty in some tests..
System.setProperty("test.reload.sync", "true");
}
@@ -63,7 +69,7 @@ public class NbMavenProjectImplTest extends NbTestCase {
assertLookupObject("[base, war]", "war");
assertLookupObject("[base]", "ear");
// Now test dynamic changes to packaging:
- FileObject pd = FileUtil.toFileObject(getWorkDir()).getFileObject("prj-war");
+ FileObject pd = wd.getFileObject("prj-war");
Project prj = ProjectManager.getDefault().findProject(pd);
((NbMavenProjectImpl) prj).attachUpdater();
TestFileUtils.writeFile(pd, "pom.xml", "<project><modelVersion>4.0.0</modelVersion>"
@@ -72,7 +78,6 @@ public class NbMavenProjectImplTest extends NbTestCase {
assertEquals("[base, jar]", prj.getLookup().lookup(I.class).m());
}
private void assertLookupObject(String result, String packaging) throws Exception {
- FileObject wd = FileUtil.toFileObject(getWorkDir());
FileObject pd = wd.createFolder("prj-" + packaging);
TestFileUtils.writeFile(pd, "pom.xml", "<project><modelVersion>4.0.0</modelVersion>"
+ "<groupId>test</groupId><artifactId>prj-" + packaging + "</artifactId>"
@@ -122,7 +127,6 @@ public class NbMavenProjectImplTest extends NbTestCase {
@RandomlyFails
public void testMemoryReleased() throws Exception {
TimedWeakReference.TIMEOUT = 0;
- FileObject wd = FileUtil.toFileObject(getWorkDir());
TestFileUtils.writeFile(wd, "pom.xml", "<project><modelVersion>4.0.0</modelVersion>"
+ "<groupId>g</groupId><artifactId>a</artifactId>"
+ "<version>0</version></project>");
@@ -140,4 +144,56 @@ public class NbMavenProjectImplTest extends NbTestCase {
assertGC("can release project after updater detached", r, Collections.singleton(wd));
}
+ public void testMavenConfig() throws Exception {
+ TestFileUtils.writeFile(wd, "pom.xml", "<project><modelVersion>4.0.0</modelVersion>"
+ + "<groupId>test</groupId><artifactId>prj</artifactId><version>1.0</version>"
+ + "<properties><java>1.5</java><testJava>1.5</testJava></properties>"
+ + "<build><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>2.1</version>"
+ + "<configuration><source>${java}</source><testSource>${testJava}</testSource></configuration></plugin></plugins></build>"
+ + "<profiles>"
+ + "<profile><id>new</id><properties><java>1.6</java></properties></profile>"
+ + "<profile><id>testNew</id><properties><testJava>1.6</testJava></properties></profile>"
+ + "<profile><id>java8</id><activation><property><name>java8</name><value>true</value></property></activation><properties><java>1.8</java></properties></profile>"
+ + "</profiles>"
+ + "</project>");
+ FileObject source = TestFileUtils.writeFile(wd, "src/main/java/p/C.java", "package p; class C {}");
+ FileObject test = TestFileUtils.writeFile(wd, "src/test/java/p/CTest.java", "package p; class CTest {}");
+ ((NbMavenProjectImpl) ProjectManager.getDefault().findProject(wd)).attachUpdater();
+ SourceLevelQuery.Result slqr = SourceLevelQuery.getSourceLevel2(source);
+ SourceLevelQuery.Result testSlqr = SourceLevelQuery.getSourceLevel2(test);
+ assertEquals("1.5", slqr.getSourceLevel());
+ assertEquals("1.5", testSlqr.getSourceLevel());
+ writeMavenConfig("-Pnew");
+ assertEquals("1.6", slqr.getSourceLevel());
+ writeMavenConfig("-P new");
+ assertEquals("1.6", slqr.getSourceLevel());
+ writeMavenConfig("--activate-profiles new");
+ assertEquals("1.6", slqr.getSourceLevel());
+ assertEquals("1.5", testSlqr.getSourceLevel());
+ writeMavenConfig("--activate-profiles=testNew");
+ assertEquals("1.5", slqr.getSourceLevel());
+ assertEquals("1.6", testSlqr.getSourceLevel());
+ writeMavenConfig("--activate-profiles new,testNew");
+ assertEquals("1.6", slqr.getSourceLevel());
+ assertEquals("1.6", testSlqr.getSourceLevel());
+ wd.getFileObject(".mvn/maven.config").delete();
+ assertEquals("1.5", slqr.getSourceLevel());
+ assertEquals("1.5", testSlqr.getSourceLevel());
+ writeMavenConfig("-Djava=1.7");
+ assertEquals("1.7", slqr.getSourceLevel());
+ writeMavenConfig("-D java=1.7");
+ assertEquals("1.7", slqr.getSourceLevel());
+ writeMavenConfig("--define java=1.6");
+ assertEquals("1.6", slqr.getSourceLevel());
+ writeMavenConfig("-Djava8");
+ assertEquals("1.8", slqr.getSourceLevel());
+ writeMavenConfig("-Djava8\n-PtestNew\n");
+ assertEquals("1.8", slqr.getSourceLevel());
+ assertEquals("1.6", testSlqr.getSourceLevel());
+ }
+ private void writeMavenConfig(String text) throws IOException, InterruptedException {
+ // Need the touch call, since NbMavenProjectImpl.Updater checks timestamps.
+ TestFileUtils.touch(TestFileUtils.writeFile(wd, ".mvn/maven.config", text), null);
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists