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]