【问题标题】:Ant plugin for Maven based on multiple build scripts: cannot find dependency基于多个构建脚本的 Maven Ant 插件:找不到依赖项
【发布时间】:2012-03-08 21:03:52
【问题描述】:

我正在尝试基于多个构建脚本为 Maven 创建一个自定义 ant 插件。文档中有一条关于它的说明:http://maven.apache.org/guides/plugin/guide-ant-plugin-development.html(请参阅“关于多个构建脚本的说明”),但我无法使其工作。

以下是脚本:

<root>\src\main\scripts\A.build.xml
-----------------------------------
<project>
    <import file="C.build.xml"/>
    <target name="hello" depends="dependency">
        <echo>Hello, World</echo>
    </target>
</project>

<root>\src\main\scripts\A.mojos.xml
-----------------------------------
<pluginMetadata>
    <mojos>
        <mojo>
            <goal>hello</goal>
            <call>hello</call>
        </mojo>
    </mojos>
</pluginMetadata>

<root>\src\main\scripts\B.build.xml
-----------------------------------
<project>
    <target name="hello">
        <echo>Hello, World</echo>
    </target>
</project>

<root>\src\main\scripts\B.mojos.xml
-----------------------------------
<pluginMetadata>
    <mojos>
        <mojo>
            <goal>hello2</goal>
            <call>hello</call>
        </mojo>
    </mojos>
</pluginMetadata>

<root>\src\main\scripts\C.build.xml
-----------------------------------
<project>
    <target name="dependency">
        <echo>This is the dependency</echo>
    </target>
</project>

<root>\pom.xml
--------------
<project>
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.myproject.plugins</groupId>
    <artifactId>hello-plugin</artifactId>
    <version>1.0-SNAPSHOT</version>

    <packaging>maven-plugin</packaging>

    <name>Hello Plugin</name>

    <dependencies>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-script-ant</artifactId>
            <version>2.2.1</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-plugin-plugin</artifactId>
                <version>2.9</version>

                <dependencies>
                    <dependency>
                        <groupId>org.apache.maven.plugin-tools</groupId>
                        <artifactId>maven-plugin-tools-ant</artifactId>
                        <version>2.9</version>
                    </dependency>
                </dependencies>

                <configuration>
                    <goalPrefix>hello</goalPrefix>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

在root级别,我运行“mvn clean install”,成功了。

然后我运行“mvn org.myproject.plugins:hello-plugin:hello2”,它也成功并产生“Hello, World”输出。

但是,当运行“mvn org.myproject.plugins:hello-plugin:hello”时,我得到了这个:

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Hello Plugin 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- hello-plugin:1.0-SNAPSHOT:hello (default-cli) @ hello-plugin ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.531s
[INFO] Finished at: Thu Mar 08 12:52:25 PST 2012
[INFO] Final Memory: 3M/15M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.myproject.plugins:hello-plugin:1.0-SNAPSHOT:hello (default-cli) on project hello-plug
in: Failed to execute: Executing Ant script: A.build.xml [hello]: Failed to parse. Cannot find C.build.xml imported from
 C:\DOCUME~1\joanes\LOCALS~1\Temp\plexus-ant-component9129296102162378706.build.xml -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

我的问题是如何做到这一点?通过查看错误,脚本在临时文件夹中执行,因此找不到导入的 C.build.xml。有没有办法改变它?完成此任务的推荐方法是什么?

【问题讨论】:

  • 它是否独立工作,即如果你运行ant -f A.build.xml hello
  • 是的,我得到了想要的输出(“这是一个依赖项”和“Hello, Wolrd”)。

标签: maven ant dependencies maven-plugin


【解决方案1】:

尝试使用:import file="${basedir}/src/main/scripts/C.build.xml"。看来 maven 正在重写或将您的脚本复制到临时目录,然后在那里执行它。然后它会尝试从该目录导入 C.build.xml,因为没有 C.build.xml 的其他路径信息。

【讨论】:

  • 按照建议更改导入有效,但前提是从基本目录(上例中的 )运行。
  • 当从另一个目录运行时,比如说 ,我得到:[错误] 无法执行目标 org.myproject.plugins:hello-plugin:1.0-SNAPSHOT:hello (default-cli)在项目测试中:执行失败:执行 Ant 脚本:A.build.xml [hello]:解析失败。找不到从 C:\DOCUME~1\joanes\LOCALS~1\Temp\plexus-ant-component4838685001229146307.build.xml 导入的 /src/main/scripts/C.build.xml -> [帮助 1]
  • 基本上,${basedir} 被解析到当前目录:(
  • 是的。对于这个和依赖解决问题,我远离 antrun 插件。抱歉,我无法提供更多帮助。
  • 我已经提交了一个针对 Maven 的错误,它是 MNG-5263。如果有人有任何解决方法,那就太好了!
猜你喜欢
  • 2017-05-04
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
  • 2017-10-28
  • 2017-08-14
  • 1970-01-01
  • 2012-04-22
  • 1970-01-01
相关资源
最近更新 更多