Сборка плагина Maven при использовании Lambdas
Я написал maven plugin/mojo для создания некоторого кода. Плагин работает хорошо и построен в Java JDK 1.8.
Я вижу странный бит поведения: он строит, устанавливает и т.д. отлично, если я использую синтаксис pre-1.8, но как только я использую выражение Java 8 Lambda, я получаю следующую ошибку при выполнении mvn clean install
:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor (default-descriptor) on project my-maven-plugin: Execution default-descriptor of goal org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor failed: 13557 -> [Help 1]
Здесь мой pom:
<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>com.my.group.id</groupId>
<artifactId>my-maven-plugin</artifactId>
<packaging>maven-plugin</packaging>
<version>1.0-SNAPSHOT</version>
<name>My Maven Mojo</name>
<url>http://maven.apache.org</url>
<properties>
<org.springframework.version>4.0.1.RELEASE</org.springframework.version>
<joda-time.version>2.3</joda-time.version>
</properties>
<dependencies>
<!-- several dependencies -->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<!-- The following manual call to the maven-plugin plugin is necessary to get around a bug in maven 3.1.1.
If the build server gets updated to 3.2.2+ we can remove this -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-plugin-plugin</artifactId>
<version>3.2</version>
<configuration>
<!-- see http://jira.codehaus.org/browse/MNG-5346 -->
<skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
</configuration>
<executions>
<execution>
<id>mojo-descriptor</id>
<goals>
<goal>descriptor</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<distributionManagement>
<repository>
<id>inin-release</id>
<name>ININ Release Repository</name>
<url>http://nexus.infrastructure.inintca.com/nexus/content/repositories/inin-release</url>
</repository>
<snapshotRepository>
<id>inin-snapshot</id>
<name>ININ Snapshot Repository</name>
<url>http://nexus.infrastructure.inintca.com/nexus/content/repositories/inin-snapshot</url>
</snapshotRepository>
</distributionManagement>
</project>
Проблема возникает в этом случае, когда я пытаюсь использовать lambda для определения FileFilter
, а не для обычного анонимного внутреннего класса.
Это работает:
List<File> controllerFiles = Arrays.asList(packageDirFile.listFiles(new FileFilter()
{
@Override
public boolean accept(File file)
{
return file.isFile() && file.getName().endsWith(".java");
}
}));
Пока это вызывает вышеупомянутую ошибку:
List<File>
controllerFiles =
Arrays.asList(packageDirFile.listFiles(file -> file.isFile() &&
file.getName().endsWith(".java")));
Очевидно, что у меня есть обходное решение, это не критично, но лямбда намного чище, чем анонимный внутренний класс IMO, и учитывая, что я работаю на Java 8, я бы предпочел использовать его. У кого-нибудь есть подсказки, особенно учитывая, что я уже установил skipErrorNoDescriptorsFound в true?
Ответы
Ответ 1
В примечании к MPLUGIN-273 говорится, что lambdas работает, если сборка использует maven-plugin-plugin
версию 3.3. Отображаемое сообщение об ошибке ссылается на maven-plugin-plugin
version 3.2. Убедитесь, что вы используете правильную версию плагина и посмотрите, устраняет ли это проблему.
Ответ 2
Я только понял, что ответил на свой вопрос. В моем втором комментарии есть ссылка на проблему Maven Jira, в которой кто-то заметил, что повышение версии maven-plugin-plugin
до 3.3
из 3.2
устраняет проблему, и после ее попытки я обнаружил то же самое. Итак:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-plugin-plugin</artifactId>
<version>3.2</version>
...
</plugin>
становится
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-plugin-plugin</artifactId>
<version>3.3</version>
...
</plugin>
И проблема уходит.