Thought I'd forward this to the dev list as well.
Begin forwarded message:
*From: *Jeff Smith <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>
*Date: *February 17, 2006 11:14:47 AM MST
*To: [EMAIL PROTECTED] <mailto:user@mojo.codehaus.org>
*Subject: **Re: [mojo-user] JBoss Plugin*
Here is the patch.
-jeff
---------------------------------------------------------------------
---
Index: src/main/java/org/codehaus/mojo/jboss/StartMojo.java
===================================================================
--- src/main/java/org/codehaus/mojo/jboss/StartMojo.java (revision
1497)
+++ src/main/java/org/codehaus/mojo/jboss/StartMojo.java (working
copy)
@@ -19,7 +19,7 @@
import org.apache.maven.plugin.MojoExecutionException;
/**
- * Starts JBoss in the background
+ * Starts JBoss
*
* @author <a href="mailto:[EMAIL PROTECTED]">Jeff Genender</a>
* @goal start
Index: src/main/java/org/codehaus/mojo/jboss/ConfigureJBossMojo.java
===================================================================
--- src/main/java/org/codehaus/mojo/jboss/ConfigureJBossMojo.java
(revision 0)
+++ src/main/java/org/codehaus/mojo/jboss/ConfigureJBossMojo.java
(revision 0)
@@ -0,0 +1,295 @@
+/*
+ * 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.codehaus.mojo.jboss;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.velocity.app.VelocityEngine;
+import org.apache.velocity.Template;
+import org.apache.velocity.VelocityContext;
+import
org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
+import org.codehaus.plexus.util.FileUtils;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.FileWriter;
+import java.util.Properties;
+
+/**
+ * ConfigureJBossMojo
+
+ * @goal configure
+ */
+public class ConfigureJBossMojo extends AbstractJBossMojo
+{
+ //CONSTANTS
+
+ private static final String SERVER_DIR_NAME = "server";
+
+ //STATIC VARIABLES
+
+ //INSTANCE VARIABLES
+
+ private File jbossHomeDir;
+
+ /**
+ * The directory for overrides to the conf diretory
+ * @parameter expression="${basedir}/jboss/conf"
+ */
+ private File confDir;
+
+ /**
+ * The directory for overrides to the lib diretory
+ * @parameter expression="${basedir}/jboss/lib"
+ */
+ private File libDir;
+
+ /**
+ * The directory for overrides to the deploy diretory
+ * @parameter expression="${basedir}/jboss/conf"
+ */
+ private File deployDir;
+
+ //CONSTRUCTING
+
+ /**
+ * Constructs a ConfigureJBossMojo.
+ */
+ public ConfigureJBossMojo() {
+ super();
+ }
+
+ //STATIC METHODS
+
+ //INITIALIZING
+
+ //MOJO
+
+ public void execute() throws MojoExecutionException,
MojoFailureException
+ {
+ checkConfig();
+ jbossHomeDir = new File(jbossHome);
+ checkJBossHome();
+
+ File serverDir = new File(outputDirectory.getAbsolutePath
() + File.separator + serverName);
+
+ checkOutputDirectory(serverDir);
+ copyBaseConfDir(serverDir);
+ copyBaseDeployDir(serverDir);
+ copyBaseLibDir(serverDir);
+ overlayConfDir(serverDir);
+ overlayDeployDir(serverDir);
+ overlayLibDir(serverDir);
+ buildBinDir(serverDir);
+ }
+
+ //ACCESSING
+
+ //COMPARING
+
+ //DISPLAYING
+
+ //UTILITY
+
+ private void checkJBossHome() throws MojoFailureException
+ {
+ if(!jbossHomeDir.exists())
+ {
+ throw new MojoFailureException("The jbossHome
specifed does not exist.");
+ }
+
+ File serverParentDir = new File
(jbossHomeDir.getAbsolutePath() + File.separator + SERVER_DIR_NAME);
+
+ if(!serverParentDir.exists())
+ {
+ throw new MojoFailureException
(jbossHomeDir.getAbsolutePath() + " does not appear to be a valid
jboss home");
+ }
+
+ File serverDir = new File(serverParentDir.getAbsolutePath
() + File.separator + serverName);
+
+ if(!serverDir.exists())
+ {
+ throw new MojoFailureException(serverName + " is not
a valid server in " + serverParentDir.getAbsolutePath());
+ }
+ }
+
+ private void checkOutputDirectory(File serverDir) throws
MojoFailureException
+ {
+ if(outputDirectory == null)
+ {
+ throw new MojoFailureException("I don't know how you
did it, but the outputDirectory is null");
+ }
+
+ if(!outputDirectory.exists())
+ {
+ outputDirectory.mkdirs();
+ }
+
+ if(!serverDir.exists())
+ {
+ serverDir.mkdir();
+ }
+ }
+
+ private void copyBaseConfDir(File serverDir) throws
MojoExecutionException
+ {
+ copyBaseDir(serverDir, "conf");
+ }
+
+ private void copyBaseLibDir(File serverDir) throws
MojoExecutionException
+ {
+ copyBaseDir(serverDir, "lib");
+ }
+
+ private void copyBaseDeployDir(File serverDir) throws
MojoExecutionException
+ {
+ copyBaseDir(serverDir, "deploy");
+ }
+
+ private void copyBaseDir(File serverDir, String dirName)
throws MojoExecutionException
+ {
+ File baseDir = new File(jbossHome + File.separator +
SERVER_DIR_NAME + File.separator + serverName + File.separator +
dirName);
+ File dir = new File(serverDir.getAbsolutePath() +
File.separator + dirName);
+ try
+ {
+ FileUtils.copyDirectoryStructure(baseDir, dir);
+ }
+ catch (IOException e)
+ {
+ throw new MojoExecutionException("Could Not Copy " +
dirName + " Dir", e);
+ }
+ }
+
+ private void overlayConfDir(File serverDir) throws
MojoExecutionException
+ {
+ overLayDir(serverDir, confDir, "conf");
+ }
+
+ private void overlayDeployDir(File serverDir) throws
MojoExecutionException
+ {
+ overLayDir(serverDir, deployDir, "deploy");
+ }
+
+ private void overlayLibDir(File serverDir) throws
MojoExecutionException
+ {
+ overLayDir(serverDir, libDir, "lib");
+ }
+
+ private void overLayDir(File serverDir, File overLayDir,
String dirName) throws MojoExecutionException
+ {
+ File baseDir = new File(serverDir + File.separator +
dirName);
+ if(overLayDir.exists())
+ {
+ try
+ {
+ FileUtils.copyDirectoryStructure(overLayDir,
baseDir);
+ }
+ catch(IOException e)
+ {
+ throw new MojoExecutionException("Could not
overlay " + dirName + "Dir", e);
+ }
+ }
+ }
+
+ private void buildBinDir(File serverDir) throws
MojoExecutionException
+ {
+ File binDir = new File(outputDirectory.getAbsolutePath()
+ File.separator + "bin");
+
+ if(!binDir.exists())
+ {
+ binDir.mkdirs();
+ }
+
+ VelocityEngine engine = new VelocityEngine();
+ Properties p = new Properties();
+ p.setProperty("resource.loader", "class");
+ p.setProperty("class.resource.loader.class",
ClasspathResourceLoader.class.getName() );
+ try {
+ engine.init(p);
+ } catch (Exception e) {
+ throw new MojoExecutionException("Problem creating
initting velcoity engine", e);
+ }
+
+ VelocityContext context = new VelocityContext();
+ context.put("jbossServerHome", serverDir.getAbsolutePath());
+ context.put("jbossHome", jbossHomeDir.getAbsolutePath());
+ context.put("serverName", serverName);
+
+ String osName = System.getProperty("os.name");
+
+ if (osName.startsWith("Windows"))
+ {
+ buildWindowsScripts(binDir, engine, context);
+ }
+ else
+ {
+ buildUnixScipts(binDir, engine, context);
+ }
+ }
+
+ private void buildUnixScipts(File binDir, VelocityEngine
engine, VelocityContext context) throws MojoExecutionException
+ {
+ File runScript = new File(binDir + File.separator +
"run.sh");
+ File shutdownScript = new File(binDir + File.separator +
"shutdown.sh");
+
+ try
+ {
+ Runtime runtime = Runtime.getRuntime();
+
+ Template runTemplate = engine.getTemplate("run.sh.vm");
+ FileWriter fileWriter = new FileWriter(runScript);
+ runTemplate.merge(context, fileWriter);
+ fileWriter.flush();
+
+ String command = "chmod 755 " +
runScript.getAbsolutePath();
+ Process process = runtime.exec(command);
+
+ Template shutdownTemplate = engine.getTemplate
("shutdown.sh.vm");
+ fileWriter = new FileWriter(shutdownScript);
+ shutdownTemplate.merge(context, fileWriter);
+ fileWriter.flush();
+
+ command = "chmod 755 " +
shutdownScript.getAbsolutePath();
+ process = runtime.exec(command);
+ }
+ catch(Exception e)
+ {
+ throw new MojoExecutionException("Problem generating
scripts", e);
+ }
+ }
+
+ private void buildWindowsScripts(File binDir, VelocityEngine
engine, VelocityContext context) throws MojoExecutionException
+ {
+ File runScript = new File(binDir + File.separator +
"run.sh");
+ File shutdownScript = new File(binDir + File.separator +
"shutdown.sh");
+
+ try
+ {
+ Template runTemplate = engine.getTemplate("run.bat.vm");
+ FileWriter fileWriter = new FileWriter(runScript);
+ runTemplate.merge(context, fileWriter);
+ fileWriter.flush();
+
+ Template shutdownTemplate = engine.getTemplate
("shutdown.bat.vm");
+ fileWriter = new FileWriter(shutdownScript);
+ shutdownTemplate.merge(context, fileWriter);
+ fileWriter.flush();
+ }
+ catch(Exception e)
+ {
+ throw new MojoExecutionException("Problem generating
scripts", e);
+ }
+ }
+}
+
Index: src/main/java/org/codehaus/mojo/jboss/AbstractJBossMojo.java
===================================================================
--- src/main/java/org/codehaus/mojo/jboss/AbstractJBossMojo.java
(revision 1497)
+++ src/main/java/org/codehaus/mojo/jboss/AbstractJBossMojo.java
(working copy)
@@ -21,6 +21,7 @@
import java.net.HttpURLConnection;
import java.net.URL;
+import java.io.File;
/**
* Created by IntelliJ IDEA.
@@ -40,6 +41,11 @@
protected String jbossHome;
/**
+ * @parameter expression="${project.build.directory}/jboss
+ */
+ protected File outputDirectory;
+
+ /**
* The server name
*
* @parameter expression="default"
@@ -62,10 +68,10 @@
Process p = null;
if (osName.startsWith("Windows")){
- String command[] = {"cmd.exe", "/C", "cd " +
jbossHome + "\\bin & " + fName + ".bat " + " " + params };
+ String command[] = {"cmd.exe", "/C", "cd " +
outputDirectory.getAbsolutePath() + "\\bin & " + fName + ".bat " +
" " + params };
p = runtime.exec(command);
} else {
- String command[] = {"sh", "-c", "cd " + jbossHome
+ "/bin; ./" + fName + ".sh " + " " + params};
+ String command[] = {"sh", "-c", "cd " +
outputDirectory.getAbsolutePath() + "/bin; ./" + fName + ".sh " +
" " + params};
p = runtime.exec(command);
}
Index: pom.xml
===================================================================
--- pom.xml (revision 1497)
+++ pom.xml (working copy)
@@ -23,10 +23,25 @@
<version>2.0</version>
</dependency>
<dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ <dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.3</version>
</dependency>
+ <dependency>
+ <groupId>velocity</groupId>
+ <artifactId>velocity</artifactId>
+ <version>1.4</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>1.1</version>
+ </dependency>
</dependencies>
<!--
<dependencies>
---------------------------------------------------------------------
---
On Feb 17, 2006, at 9:37 AM, Manfred Geiler wrote:
yes, definitive!
Thanks,
Manfred
On 2/17/06, Jeff Smith <[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>> wrote:
All,
I have modified the source for the maven 2 jboss plugin to work
more
like the maven 1.x plugin. I added a configure mojo that copies
the
contents of the specified server in your jboss home into the
target
directory. It can also overlay your own conf, lib an deploy stuff.
Basically just like the maven 1.x plugin. Is there any
interest in
this? If so I can submit a patch.
-jeff