Плагин Ant для Maven на основе нескольких скриптов сборки: не удается найти зависимость

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


person Hebus Nimbus    schedule 08.03.2012    source источник
comment
Работает ли он автономно, т.е. если вы запустите ant -f A.build.xml hello   -  person Raghuram    schedule 09.03.2012
comment
Да, я получаю желаемый результат (это зависимость и привет, Вольрд).   -  person Hebus Nimbus    schedule 10.03.2012


Ответы (1)


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

person tdrury    schedule 09.03.2012
comment
Изменение импорта, как было предложено, сработало, но только при запуске из базового каталога (‹root› в приведенном выше примере). - person Hebus Nimbus; 10.03.2012
comment
При запуске из другого каталога, скажем ‹root2›, я получаю: [ОШИБКА] Не удалось выполнить цель org.myproject.plugins: hello-plugin: 1.0-SNAPSHOT: hello (default-cli) при тестировании проекта: Не удалось выполнить: Выполнение сценария Ant: A.build.xml [привет]: не удалось выполнить синтаксический анализ. Не удается найти ‹root2› /src/main/scripts/C.build.xml, импортированный из C: \ DOCUME ~ 1 \ joanes \ LOCALS ~ 1 \ Temp \ plexus-ant-component4838685001229146307.build.xml - ›[Справка 1] - person Hebus Nimbus; 10.03.2012
comment
По сути, $ {basedir} разрешается в текущий каталог :( - person Hebus Nimbus; 10.03.2012
comment
Ага. Я держусь подальше от плагина antrun из-за этого и проблем с разрешением зависимостей. Извини, я ничем не мог больше помочь. - person tdrury; 10.03.2012
comment
Я зарегистрировал ошибку против Maven, это MNG-5263. Если у кого-нибудь есть обходной путь, это было бы здорово! - person Hebus Nimbus; 22.03.2012