Я пытаюсь использовать maven-resources-plugin для фильтрации, используя цель копирования ресурсов, и столкнулся с следующей ошибкой:
Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:2.5:copy-resources (default-cli) on project bar: The parameters 'resources', 'outputDirectory' for goal org.apache.maven.plugins:maven-resources-plugin:2.5:copy-resources are missing or invalid
Чтобы изолировать проблему, я создал очень простой pom.xml, скопированный довольно почти дословно из http://maven.apache.org/plugins/maven-resources-plugin/examples/copy-resources.html, запустил его и получил та же ошибка.
Я вызываю его
mvn resources:copy-resources
Есть идеи? Вот тест pom.xml.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>foo</groupId>
<artifactId>bar</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<executions>
<execution>
<id>copy-resources</id>
<!-- here the phase you need -->
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/extra-resources</outputDirectory>
<resources>
<resource>
<directory>src/non-packaged-resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Ответ 1
Основная проблема, с которой вы столкнулись, заключается в том, что вы вызываете цель плагина напрямую, используя
mvn resources:copy-resources
который не обязательно создает выходной каталог. Вместо этого назовите правильную фазу жизненного цикла Maven.
mvn process-resources
Полный список фаз жизненного цикла просто запускает команду mvn без каких-либо изменений.
В целом почти всегда лучше ссылаться на фазу жизненного цикла, а не на цель напрямую, поскольку она гарантирует выполнение любых предварительных условий (например, не скомпилировать тестовые классы перед тестируемыми классами).
Ответ 2
Проверьте, отвечает ли вам ответ @bmargulies. Вы можете обратиться к этим примерам.
В любом случае вам не нужно использовать <pluginManagement>
для достижения этого. <pluginManagement>
используется в многомодульных сценариях для облегчения наследования конфигураций plugin
.
Вам нужно переместить configuration
из элемента execution
. Работает следующий фрагмент.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>foo</groupId>
<artifactId>bar</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<configuration>
<outputDirectory>${basedir}/target/extra-resources</outputDirectory>
<resources>
<resource>
<directory>src/non-packaged-resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
<executions>
<execution>
<id>copy-resources</id>
<!-- here the phase you need -->
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Ответ 3
Просто удалите выполнение и их конфигурацию. Как правило, вы можете определить ресурсы в <build> > <resources>
соответственно <build> > <testResources>
(см http://maven.apache.org/plugins/maven-resources-plugin/examples/resource-directory.html) непосредственно не в конфигурации плагина, используя process-(test-)resources
жизненного цикла по умолчанию process-(test-)resources
которые автоматически copy-(test-)resources.
, Да, это плохой пример на их странице!