Browse Source

Add support for Weblogic's rmic.

PR: 959
Submitted by:	Takashi Okamoto <toraneko@kun.ne.jp>


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@268860 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 24 years ago
parent
commit
ff38a6188b
7 changed files with 172 additions and 14 deletions
  1. +1
    -1
      WHATSNEW
  2. +2
    -1
      docs/manual/CoreTasks/rmic.html
  3. +10
    -4
      src/main/org/apache/tools/ant/taskdefs/Rmic.java
  4. +21
    -7
      src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java
  5. +12
    -0
      src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapter.java
  6. +3
    -1
      src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java
  7. +123
    -0
      src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java

+ 1
- 1
WHATSNEW View File

@@ -15,7 +15,7 @@ Other changes:

* Ant now uses JAXP 1.1

* rmic now supports Kaffe's version of rmic.
* rmic now supports Kaffe's and Weblogic's version of rmic.

* new magic property build.rmic to chose the rmic implementation



+ 2
- 1
docs/manual/CoreTasks/rmic.html View File

@@ -28,10 +28,11 @@ supports all attributes of <code>&lt;fileset&gt;</code>
<code>&lt;include&gt;</code>, <code>&lt;exclude&gt;</code> and
<code>&lt;patternset&gt;</code> elements.</p>
<p>It is possible to use different compilers. This can be selected with the
&quot;build.rmic&quot; property. There are two choices:</p>
&quot;build.rmic&quot; property. There are three choices:</p>
<ul>
<li>sun (the standard compiler of the JDK)</li>
<li>kaffe (the standard compiler of <a href="http://www.kaffe.org" target="_top">Kaffe</a>)</li>
<li>weblogic</li>
</ul>
<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">


+ 10
- 4
src/main/org/apache/tools/ant/taskdefs/Rmic.java View File

@@ -401,7 +401,9 @@ public class Rmic extends MatchingTask {
// Move the generated source file to the base directory
if (null != sourceBase) {
for (int j = 0; j < fileCount; j++) {
moveGeneratedFile(baseDir, sourceBase, (String) compileList.elementAt(j));
moveGeneratedFile(baseDir, sourceBase,
(String) compileList.elementAt(j),
adapter);
}
}
compileList.removeAllElements();
@@ -412,9 +414,12 @@ public class Rmic extends MatchingTask {
*
* @exception org.apache.tools.ant.BuildException When error copying/removing files.
*/
private void moveGeneratedFile (File baseDir, File sourceBaseFile, String classname)
private void moveGeneratedFile (File baseDir, File sourceBaseFile,
String classname,
RmicAdapter adapter)
throws BuildException {
String stubFileName = classname.replace('.', File.separatorChar) + "_Stub.java";
String stubFileName = classname.replace('.', File.separatorChar)
+ adapter.getStubClassSuffix()+".java";
File oldStubFile = new File(baseDir, stubFileName);
File newStubFile = new File(sourceBaseFile, stubFileName);
try {
@@ -426,7 +431,8 @@ public class Rmic extends MatchingTask {
throw new BuildException(msg, ioe, location);
}
if (!"1.2".equals(stubVersion)) {
String skelFileName = classname.replace('.', '/') + "_Skel.java";
String skelFileName = classname.replace('.', File.separatorChar)
+ adapter.getSkelClassSuffix()+".java";
File oldSkelFile = new File(baseDir, skelFileName);
File newSkelFile = new File(sourceBaseFile, skelFileName);
try {


+ 21
- 7
src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java View File

@@ -76,21 +76,34 @@ import java.util.Vector;
public abstract class DefaultRmicAdapter implements RmicAdapter {

private Rmic attributes;
private FileNameMapper mapper;

public DefaultRmicAdapter() {
}

public void setRmic( Rmic attributes ) {
this.attributes = attributes;
mapper = new RmicFileNameMapper();
}

public Rmic getRmic() {
return attributes;
}

public String getStubClassSuffix() {
return "_Stub";
}

public String getSkelClassSuffix() {
return "_Skel";
}

/**
* This implementation maps *.class to *_Stub.class and - if
* stubversion is not 1.2 - to _Skel.class.
* This implementation maps *.class to *getStubClassSuffix().class and - if
* stubversion is not 1.2 - to *getSkelClassSuffix().class.
*/
public FileNameMapper getMapper() {
return new RmicFileNameMapper();
return mapper;
}

/**
@@ -297,13 +310,13 @@ public abstract class DefaultRmicAdapter implements RmicAdapter {
RmicFileNameMapper() {
stubMapper = new GlobPatternMapper();
stubMapper.setFrom("*.class");
stubMapper.setTo("*_Stub.class");
stubMapper.setTo("*"+getStubClassSuffix()+".class");

// no _Skel file in stub version 1.2
if (!"1.2".equals(attributes.getStubVersion())) {
skelMapper = new GlobPatternMapper();
skelMapper.setFrom("*.class");
skelMapper.setTo("*_Skel.class");
skelMapper.setTo("*"+getSkelClassSuffix()+".class");
}
}

@@ -319,8 +332,9 @@ public abstract class DefaultRmicAdapter implements RmicAdapter {
public String[] mapFileName(String name) {
String[] stubName = stubMapper.mapFileName(name);

if (stubName == null || name.endsWith("_Stub.class")
|| name.endsWith("_Skel.class")) {
if (stubName == null
|| name.endsWith(getStubClassSuffix()+".class")
|| name.endsWith(getSkelClassSuffix()+".class")) {
// Not a .class file
return null;
}


+ 12
- 0
src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapter.java View File

@@ -93,6 +93,18 @@ public interface RmicAdapter {
*/
public FileNameMapper getMapper();

/**
* Difference between original class file name and the generated
* stub class.
*/
public String getStubClassSuffix();

/**
* Difference between original class file name and the generated
* skel class.
*/
public String getSkelClassSuffix();

/**
* The CLASSPATH this rmic process will use.
*/


+ 3
- 1
src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java View File

@@ -110,8 +110,10 @@ public class RmicAdapterFactory {

if ( rmicType.equalsIgnoreCase("sun") ) {
return new SunRmic();
} if ( rmicType.equalsIgnoreCase("kaffe") ) {
} else if ( rmicType.equalsIgnoreCase("kaffe") ) {
return new KaffeRmic();
} else if ( rmicType.equalsIgnoreCase("weblogic") ) {
return new WLRmic();
}
return resolveClassName( rmicType );
}


+ 123
- 0
src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java View File

@@ -0,0 +1,123 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Ant", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/

package org.apache.tools.ant.taskdefs.rmic;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.LogOutputStream;
import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.Path;

import java.io.*;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

/**
* The implementation of the rmic for WebLogic
*
* @author Takashi Okamoto <tokamoto@rd.nttdata.co.jp>
*/
public class WLRmic extends DefaultRmicAdapter {

public boolean execute() throws BuildException {
getRmic().log("Using WebLogic rmic", Project.MSG_VERBOSE);
Commandline cmd = setupRmicCommand();

PrintStream err = System.err;
PrintStream out = System.out;

try {
PrintStream logstr =
new PrintStream(new LogOutputStream(getRmic(), Project.MSG_WARN));
System.setOut(logstr);
System.setErr(logstr);

// Create an instance of the rmic
Class c = Class.forName("weblogic.rmic");
Method doRmic = c.getMethod("main",
new Class [] { String[].class });
doRmic.invoke(null, new Object[] { cmd.getArguments() });
return true;
} catch (ClassNotFoundException ex) {
throw new BuildException("Cannot use WebLogic rmic, as it is not available"+
" A common solution is to set the environment variable"+
" CLASSPATH.", getRmic().getLocation() );
}
catch (Exception ex) {
if (ex instanceof BuildException) {
throw (BuildException) ex;
} else {
throw new BuildException("Error starting WebLogic rmic: ", ex, getRmic().getLocation());
}
} finally {
System.setErr(err);
System.setOut(out);
}
}

/**
* Get the suffix for the rmic stub classes
*/
public String getStubClassSuffix() {
return "_WLStub";
}

/**
* Get the suffix for the rmic skeleton classes
*/
public String getSkelClassSuffix() {
return "_WLSkel";
}
}

Loading…
Cancel
Save