Christoph Dittberner created MANTRUN-197:
--------------------------------------------

             Summary: Can't use ant import task in target xml
                 Key: MANTRUN-197
                 URL: https://issues.apache.org/jira/browse/MANTRUN-197
             Project: Maven Antrun Plugin
          Issue Type: Bug
    Affects Versions: 1.8
            Reporter: Christoph Dittberner


I want to externalize a macrodef to include it in different ant excecutions. 
But using the ant import task throws an exception because the import task has 
be defined *outside* of a target definition. There seems no way to specify 
markup outside of or before the autogenerated main target tag to include the 
import statement in the generated target/ant-run/build-main.xml.

example to illustrate the problem:


{code:title=src/ant/macrodef.xml|xml}
<?xml version="1.0" encoding="ISO-8859-1"?>
<project name="macrodef">
    <macrodef name="hello">
        <sequential>
            <echo>hello world.</echo>
        </sequential>
    </macrodef>
</project>
{code}

{code:title=pom.xml|xml}
...

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.8</version>
    <executions>
        <execution>
            <id>call-macrodef-1st</id>
            <phase>process-sources</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <target>
                    <import file="src/ant/macrodef.xml"/>
                    
                    <hello/>
                </target>
            </configuration>
        </execution>
        <execution>
            <id>call-macrodef-2nd</id>
            <phase>process-sources</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <target>
                    <import file="src/ant/macrodef.xml"/>
                    
                    <hello/>
                    <hello/>
                </target>
            </configuration>
        </execution>
    <executions>
    
    ...
    
</plugin>
...
{code}


{code:title=stacktrace}
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal 
org.apache.maven.plugins:maven-antrun-plugin:1.8:run 
(generate-launchers-server) on project project.build.dist: An Ant 
BuildException has occured: import only allowed as a top-level task
around Ant part ...<import 
file="n:\project.build.dist/src/ant/macrodef.xml"/>... @ 4:61 in 
n:\project.build.dist\target\antrun\build-main.xml
        at 
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)
        at 
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
        at 
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
        at 
org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
        at 
org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
        at 
org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
        at 
org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at 
org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
        at 
org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
        at 
org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
        at 
org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.MojoExecutionException: An Ant 
BuildException has occured: import only allowed as a top-level task
around Ant part ...<import 
file="n:\project.build.dist/src/ant/macrodef.xml"/>... @ 4:61 in 
n:\project.build.dist\target\antrun\build-main.xml
        at 
org.apache.maven.plugin.antrun.AntRunMojo.execute(AntRunMojo.java:342)
        at 
org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
        at 
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
        ... 20 more
Caused by: n:\project.build.dist\target\antrun\build-main.xml:4: import only 
allowed as a top-level task
        at org.apache.tools.ant.taskdefs.ImportTask.execute(ImportTask.java:133)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:293)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at 
org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
        at org.apache.tools.ant.Task.perform(Task.java:348)
        at org.apache.tools.ant.Target.execute(Target.java:435)
        at org.apache.tools.ant.Target.performTasks(Target.java:456)
        at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1405)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1376)
        at 
org.apache.maven.plugin.antrun.AntRunMojo.execute(AntRunMojo.java:313)
        ... 22 more
                
{code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to