You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by en...@apache.org on 2020/10/21 12:21:43 UTC
[netbeans] branch delivery updated: Read mainClass configuration or
property.
This is an automated email from the ASF dual-hosted git repository.
entl pushed a commit to branch delivery
in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/delivery by this push:
new 3b2dabe Read mainClass configuration or property.
new 832de2c Merge pull request #2474 from entlicher/MavenMainClass_delivery
3b2dabe is described below
commit 3b2dabe6baf7154533b4183b0b44fd423ab04066
Author: Martin Entlicher <ma...@oracle.com>
AuthorDate: Tue Oct 20 15:58:58 2020 +0200
Read mainClass configuration or property.
---
.../modules/maven/runjar/RunJarPrereqChecker.java | 60 ++++++++-
.../maven/runjar/RunJarPrereqCheckerTest.java | 134 +++++++++++++++++++++
2 files changed, 193 insertions(+), 1 deletion(-)
diff --git a/java/maven/src/org/netbeans/modules/maven/runjar/RunJarPrereqChecker.java b/java/maven/src/org/netbeans/modules/maven/runjar/RunJarPrereqChecker.java
index 26b6196..b3f3b2c 100644
--- a/java/maven/src/org/netbeans/modules/maven/runjar/RunJarPrereqChecker.java
+++ b/java/maven/src/org/netbeans/modules/maven/runjar/RunJarPrereqChecker.java
@@ -24,9 +24,13 @@ import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.util.Properties;
import javax.swing.JButton;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.model.Plugin;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
import org.netbeans.api.java.project.JavaProjectConstants;
import org.netbeans.api.project.Project;
import org.netbeans.api.project.ProjectUtils;
@@ -57,6 +61,8 @@ import org.openide.util.NbBundle.Messages;
@ProjectServiceProvider(service=PrerequisitesChecker.class, projectType="org-netbeans-modules-maven/" + NbMavenProject.TYPE_JAR)
public class RunJarPrereqChecker implements PrerequisitesChecker {
+ private static final String[] MAIN_CLASS_PROPERTIES = {"mainClass", "exec.mainClass", "project.mainClass", "project.mainclass"}; // NOI18N
+
private String mainClass;
@Override public boolean checkRunConfig(RunConfig config) {
@@ -82,7 +88,7 @@ public class RunJarPrereqChecker implements PrerequisitesChecker {
if ((ActionProvider.COMMAND_RUN.equals(actionName) ||
ActionProvider.COMMAND_DEBUG.equals(actionName) ||
ActionProvider.COMMAND_PROFILE.equals(actionName))) {
- String mc = null;
+ String mc = findMainClass(config);
for (Map.Entry<? extends String,? extends String> entry : config.getProperties().entrySet()) {
if (entry.getValue().contains("${packageClassName}")) { //NOI18N
//show dialog to choose main class.
@@ -99,6 +105,58 @@ public class RunJarPrereqChecker implements PrerequisitesChecker {
return true;
}
+ private static String findMainClass(RunConfig config) {
+ // Read main class from the manifest property:
+ String mainClass = getConfiguration(config, "maven-jar-plugin", "archive", "manifest", "mainClass"); // NOI18N
+ if (mainClass != null) {
+ return mainClass;
+ }
+ // Read main class from exec-maven-plugin configuration:
+ mainClass = getConfiguration(config, "exec-maven-plugin", "mainClass"); // NOI18N
+ if (mainClass != null) {
+ return mainClass;
+ }
+ // Check pom's properties:
+ Properties properties = config.getMavenProject().getProperties();
+ for (String name : MAIN_CLASS_PROPERTIES) {
+ String mc = properties.getProperty(name);
+ if (mc != null) {
+ return mc;
+ }
+ }
+ return null;
+ }
+
+ private static Plugin findPlugin(RunConfig config, String name) {
+ List<Plugin> plugins = config.getMavenProject().getBuild().getPlugins();
+ for (Plugin p : plugins) {
+ if (name.equals(p.getArtifactId())) {
+ return p;
+ }
+ }
+ return null;
+ }
+
+ private static String getConfiguration(RunConfig config, String pluginId, String... configs) {
+ Plugin plugin = findPlugin(config, pluginId);
+ if (plugin != null) {
+ Xpp3Dom configuration = (Xpp3Dom) plugin.getConfiguration();
+ if (configuration != null) {
+ Xpp3Dom child = configuration;
+ for (String c : configs) {
+ child = child.getChild(c);
+ if (child == null) {
+ break;
+ }
+ }
+ if (child != null) {
+ return child.getValue();
+ }
+ }
+ }
+ return null;
+ }
+
@Messages({
"LBL_ChooseMainClass_Title=Select Main Class for Execution",
"LBL_ChooseMainClass_OK=Select Main Class"
diff --git a/java/maven/test/unit/src/org/netbeans/modules/maven/runjar/RunJarPrereqCheckerTest.java b/java/maven/test/unit/src/org/netbeans/modules/maven/runjar/RunJarPrereqCheckerTest.java
index a05f78e..9f4eafc 100644
--- a/java/maven/test/unit/src/org/netbeans/modules/maven/runjar/RunJarPrereqCheckerTest.java
+++ b/java/maven/test/unit/src/org/netbeans/modules/maven/runjar/RunJarPrereqCheckerTest.java
@@ -19,13 +19,19 @@
package org.netbeans.modules.maven.runjar;
+import java.io.IOException;
import java.io.StringReader;
+import java.util.Collections;
import org.netbeans.api.project.Project;
import org.netbeans.api.project.ProjectManager;
import org.netbeans.junit.NbTestCase;
+import org.netbeans.modules.maven.NbMavenProjectImpl;
+import org.netbeans.modules.maven.api.execute.RunConfig;
import org.netbeans.modules.maven.configurations.M2ConfigProvider;
+import org.netbeans.modules.maven.execute.ActionToGoalUtils;
import org.netbeans.modules.maven.execute.model.ActionToGoalMapping;
import org.netbeans.modules.maven.execute.model.io.xpp3.NetbeansBuildActionXpp3Reader;
+import org.netbeans.spi.project.ActionProvider;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.openide.filesystems.test.TestFileUtils;
@@ -63,4 +69,132 @@ public class RunJarPrereqCheckerTest extends NbTestCase {
assertEquals(1, mapping.getActions().size());
}
+ public void testMainClassManifest() throws Exception {
+ TestFileUtils.writeFile(d, "pom.xml",
+ "<project>\n" +
+ " <modelVersion>4.0.0</modelVersion>\n" +
+ " <groupId>testgrp</groupId>\n" +
+ " <artifactId>testart</artifactId>\n" +
+ " <version>1.0</version>\n" +
+ " <build>\n" +
+ " <plugins>\n" +
+ " <plugin>\n" +
+ " <groupId>org.apache.maven.plugins</groupId>\n" +
+ " <artifactId>maven-jar-plugin</artifactId>\n" +
+ " <configuration>\n" +
+ " <archive>\n" +
+ " <manifest>\n" +
+ " <mainClass>com.mycompany.Main2</mainClass>\n" +
+ " </manifest>\n" +
+ " </archive>\n" +
+ " </configuration>\n" +
+ " </plugin>\n" +
+ " </plugins>\n" +
+ " </build>" +
+ "</project>\n");
+ checkMainClass("com.mycompany.Main2");
+ }
+
+ public void testMainClassManifestProperty() throws Exception {
+ TestFileUtils.writeFile(d, "pom.xml",
+ "<project>\n" +
+ " <modelVersion>4.0.0</modelVersion>\n" +
+ " <groupId>testgrp</groupId>\n" +
+ " <artifactId>testart</artifactId>\n" +
+ " <version>1.0</version>\n" +
+ " <properties>\n" +
+ " <clazz>com.mycompany.Main1</clazz>\n" +
+ " </properties>\n" +
+ " <build>\n" +
+ " <plugins>\n" +
+ " <plugin>\n" +
+ " <groupId>org.apache.maven.plugins</groupId>\n" +
+ " <artifactId>maven-jar-plugin</artifactId>\n" +
+ " <configuration>\n" +
+ " <archive>\n" +
+ " <manifest>\n" +
+ " <mainClass>${clazz}</mainClass>\n" +
+ " </manifest>\n" +
+ " </archive>\n" +
+ " </configuration>\n" +
+ " </plugin>\n" +
+ " </plugins>\n" +
+ " </build>" +
+ "</project>\n");
+ checkMainClass("com.mycompany.Main1");
+ }
+
+ public void testMainClassExecConfig() throws Exception {
+ TestFileUtils.writeFile(d, "pom.xml",
+ "<project>\n" +
+ " <modelVersion>4.0.0</modelVersion>\n" +
+ " <groupId>testgrp</groupId>\n" +
+ " <artifactId>testart</artifactId>\n" +
+ " <version>1.0</version>\n" +
+ " <build>\n" +
+ " <plugins>\n" +
+ " <plugin>\n" +
+ " <groupId>org.codehaus.mojo</groupId>\n" +
+ " <artifactId>exec-maven-plugin</artifactId>\n" +
+ " <configuration>\n" +
+ " <mainClass>com.example.Main2</mainClass>\n" +
+ " </configuration>\n" +
+ " </plugin>\n" +
+ " </plugins>\n" +
+ " </build>" +
+ "</project>\n");
+ checkMainClass("com.example.Main2");
+ }
+
+ public void testMainClassExecProperty1() throws Exception {
+ TestFileUtils.writeFile(d, "pom.xml",
+ "<project>\n" +
+ " <modelVersion>4.0.0</modelVersion>\n" +
+ " <groupId>testgrp</groupId>\n" +
+ " <artifactId>testart</artifactId>\n" +
+ " <version>1.0</version>\n" +
+ " <properties>\n" +
+ " <mainClass>org.demo.Main2</mainClass>\n" +
+ " </properties>\n" +
+ "</project>\n");
+ checkMainClass("org.demo.Main2");
+ }
+
+ public void testMainClassExecProperty2() throws Exception {
+ TestFileUtils.writeFile(d, "pom.xml",
+ "<project>\n" +
+ " <modelVersion>4.0.0</modelVersion>\n" +
+ " <groupId>testgrp</groupId>\n" +
+ " <artifactId>testart</artifactId>\n" +
+ " <version>1.0</version>\n" +
+ " <properties>\n" +
+ " <exec.mainClass>org.demo.Main2</exec.mainClass>\n" +
+ " <exec.java.bin>${java.home}/bin/java</exec.java.bin>\n" +
+ " </properties>\n" +
+ "</project>\n");
+ checkMainClass("org.demo.Main2");
+ }
+
+ public void testMainClassExecProperty3() throws Exception {
+ TestFileUtils.writeFile(d, "pom.xml",
+ "<project>\n" +
+ " <modelVersion>4.0.0</modelVersion>\n" +
+ " <groupId>testgrp</groupId>\n" +
+ " <artifactId>testart</artifactId>\n" +
+ " <version>1.0</version>\n" +
+ " <properties>\n" +
+ " <project.mainclass>org.demo.Main2</project.mainclass>\n" +
+ " <exec.java.bin>${java.home}/bin/java</exec.java.bin>\n" +
+ " </properties>\n" +
+ "</project>\n");
+ checkMainClass("org.demo.Main2");
+ }
+
+ private void checkMainClass(String mainClass) throws IOException {
+ Project proj = ProjectManager.getDefault().findProject(d);
+ RunConfig rc = ActionToGoalUtils.createRunConfig(ActionProvider.COMMAND_RUN, proj.getLookup().lookup(NbMavenProjectImpl.class), proj.getLookup());
+ rc.addProperties(Collections.singletonMap("testMainClass", "${packageClassName}"));
+ new RunJarPrereqChecker().checkRunConfig(rc);
+ assertEquals(mainClass, rc.getProperties().get("testMainClass"));
+ }
}
---------------------------------------------------------------------
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