web-dev-qa-db-ja.com

maven-plugin-plugin:descriptorゴールがファイルのandで失敗する

Mavenプラグインの開発中に、ビルドがエラーを出力します。

[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-plugin-plugin:3.3:descriptor (default-descriptor) on project default-method-demo: Execution default-descriptor of goal org.Apache.maven.plugins:maven-plugin-plugin:3.3:descriptor failed: syntax error @[8,1] in file:/full/path/to/project/default-method/src/main/Java/org/example/Iface.Java -> [Help 1]

ただし、ファイルIface.Javaはコンパイル可能です。

Iface.Java

package org.example;

public interface Iface {
    default String getString() {
        return "string";
    }
}

pom.xmlから

<packaging>maven-plugin</packaging>

<build>
    <plugins>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

<dependencies>
    <dependency>
        <groupId>org.Apache.maven</groupId>
        <artifactId>maven-plugin-api</artifactId>
        <version>3.0.5</version>
    </dependency>
    <dependency>
        <groupId>org.Apache.maven.plugin-tools</groupId>
        <artifactId>maven-plugin-annotations</artifactId>
        <version>3.4</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

何が問題の原因ですか?どうすれば修正できますか?

23
czerny

問題は、プラグイン記述子を生成するmaven-plugin-pluginが、デフォルトのメソッドでJava 8のインターフェースを解析することが困難であったことです。

新しいプラグインのバージョンをpom.xmlに明示的に記述することで修正できます。

<build>
    <plugins>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-plugin-plugin</artifactId>
            <version>3.4</version>
        </plugin>
        <!-- other plugins -->
    </plugins>
</build>

または、本体を実装クラスに移動してデフォルトのメソッドを回避するだけです。

関連バグ: MPLUGIN-272

45
czerny