Hi all,

  I'm writing a maven plugin in java to wrap an Ant taskdef that we use in our 
build process.  I'm having some trouble accessing a resource in the jar that 
contains the taskdef.  The taskdef uses the following code to read the file:

-------------------------------- (snip) ----------------------------------------

   private static final String DEFAULT_TEMPLATE_FILE_NAME = "RB.template";

        .
        .
        .

        BufferedInputStream bis = new 
BufferedInputStream(getClass().getResourceAsStream(DEFAULT_TEMPLATE_FILE_NAME));
        if (bis == null)
          throw new 
BuildException(MessageFormat.format("CreateResourceBundleClasses task could not 
open RB template \"{0}\".",
                                                        new Object[] { 
DEFAULT_TEMPLATE_FILE_NAME }));
        BufferedOutputStream bos = new BufferedOutputStream(new 
FileOutputStream(file));
        byte bytes[] = new byte[Math.max(2048, bis.available())];

-------------------------------- (snip) ----------------------------------------

This works just great when the taskdef is run from Ant, but when I try to run 
it from my maven plugin, the taskdef code throws in the bis.available() method. 
 Here's stack trace:

-------------------------------- (snip) ----------------------------------------

org.apache.maven.plugin.PluginExecutionException: Error generating Resource 
Bundle code
        at org.apache.maven.plugin.rb.RBMojo.execute(RBMojo.java:142)
        at 
org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:432)
        at 
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeMojo(DefaultLifecycleExecutor.java:448)
        at 
org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:144)
        at org.apache.maven.DefaultMaven.processProject(DefaultMaven.java:212)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:136)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:233)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:303)
        at org.codehaus.classworlds.Launcher.launch(Launcher.java:243)
        at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:416)
        at org.codehaus.classworlds.Launcher.main(Launcher.java:363)
Caused by: java.io.IOException: Stream closed
        at 
com.sas.tools.ant.CreateResourceBundleClasses.createResourceBundles(CreateResourceBundleClasses.java:652)
        at 
com.sas.tools.ant.CreateResourceBundleClasses.execute(CreateResourceBundleClasses.java:503)
        at org.apache.maven.plugin.rb.RBMojo.execute(RBMojo.java:129)
        ... 14 more
Caused by: java.io.IOException: Stream closed
        at 
com.sas.tools.ant.CreateResourceBundleClasses.getDefaultTemplate(CreateResourceBundleClasses.java:460)
        at 
com.sas.tools.ant.CreateResourceBundleClasses.getTemplate(CreateResourceBundleClasses.java:426)
        at 
com.sas.tools.ant.CreateResourceBundleClasses.createResourceBundles(CreateResourceBundleClasses.java:580)
        ... 16 more
Caused by: java.io.IOException: Stream closed
        at java.io.BufferedInputStream.ensureOpen(BufferedInputStream.java:120)
        at java.io.BufferedInputStream.available(BufferedInputStream.java:336)
        at 
com.sas.tools.ant.CreateResourceBundleClasses.getDefaultTemplate(CreateResourceBundleClasses.java:449)
        ... 18 more
-------------------------------- (snip) ----------------------------------------

Note the IOException at the bottom that says "Stream closed".  I assume that 
the getResourceAsStream() method can't find the file, but I can't figure out 
why it doesn't find it in maven but does find it in ant.

BTW, here's the pertinent plugin code that wraps the ant taskdef:

-------------------------------- (snip) ----------------------------------------

                        // create a dummy ant project and target to wrap the 
task we're invoking
                        final class Creator extends CreateResourceBundleClasses 
{
                                public Creator() {
                                        project = new Project();
                                        project.init();
                                        taskType = "create";
                                        taskName = "create";
                                        target = new Target();
                                }       
                        }
                        
                        Creator creator = new Creator();
                        creator.execute();

-------------------------------- (snip) ----------------------------------------

Could this be a difference in classloaders between Ant and Maven? A security 
issue? I'm kind of stumped right now, so any help would be much appreciated!

Will

-----------------------------------------
Will Gwaltney
SAS Institute
[EMAIL PROTECTED]
919-531-9025
"Nothing is more impossible than to write a book that wins every reader's 
approval." - Miguel de Cervantes
-----------------------------------------



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to