Плагин Ant для Maven на основе нескольких сценариев сборки: не удается найти зависимость - PullRequest
0 голосов
/ 09 марта 2012

Я пытаюсь создать собственный плагин ant для Maven, основанный на нескольких сценариях сборки. В документации есть примечание об этом: 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>

На корневом уровне я запускаю "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. Есть ли способ изменить это? Каков рекомендуемый способ сделать это?

1 Ответ

0 голосов
/ 09 марта 2012

Попробуйте использовать: import file = "$ {basedir} /src/main/scripts/C.build.xml". Похоже, что maven переписывает или копирует ваш скрипт во временный каталог, а затем выполняет его там. Затем он пытается импортировать C.build.xml из этого каталога, потому что нет другой информации о пути для C.build.xml.

...