This is an automated email from the ASF dual-hosted git repository. lkishalmi pushed a commit to branch release122 in repository https://gitbox.apache.org/repos/asf/netbeans.git
commit 693cab3474e05de1fd15c0043571e705efda81d7 Author: Martin Entlicher <[email protected]> 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: [email protected] For additional commands, e-mail: [email protected] For further information about the NetBeans mailing lists, visit: https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists
