java - 如何配置 moditect-maven-plugin 以在我的模块化应用程序中使用自动值库?

标签 java maven java-module auto-value moditect

我正在尝试构建一个模块化应用程序,并且我正在尝试使用 moditect-maven-plugin 来使用自动值库(不是模块化的)。

根据说明here ,我想出了以下 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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>org.example</groupId>
<artifactId>moditect-test</artifactId>
<version>1.0-SNAPSHOT</version>

<dependencies>
    <dependency>
        <groupId>com.google.auto.value</groupId>
        <artifactId>auto-value-annotations</artifactId>
        <version>${auto-value.version}</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <annotationProcessorPaths>
                    <path>
                        <groupId>com.google.auto.value</groupId>
                        <artifactId>auto-value</artifactId>
                        <version>${auto-value.version}</version>
                    </path>
                </annotationProcessorPaths>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.moditect</groupId>
            <artifactId>moditect-maven-plugin</artifactId>
            <version>1.0.0.Beta2</version>
            <executions>
                <execution>
                    <id>generate-module-info</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>generate-module-info</goal>
                    </goals>
                    <configuration>
                        <modules>
                            <module>
                                <artifact>
                                    <groupId>com.google.auto.value</groupId>
                                    <artifactId>auto-value-annotations</artifactId>
                                    <version>${auto-value.version}</version>
                                </artifact>
                                <moduleInfo>
                                    <name>com.google.auto.value.annotations</name>
                                    <exports>
                                        com.google.auto.value;
                                        *;
                                    </exports>
                                </moduleInfo>
                            </module>
                        </modules>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

<properties>
    <maven.compiler.source>13</maven.compiler.source>
    <maven.compiler.target>13</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <auto-value.version>1.7</auto-value.version>
</properties>

重要的部分是 moditect-maven-plugin 配置。由于我需要 com.google.auto.value.AutoValue 注释,因此我导出该包,然后为模块提供相关名称。

仅供引用,这是我在其中使用注释的类:

package com.example.moditect.test;

import com.google.auto.value.AutoValue;

@AutoValue
abstract class Animal {

    abstract String name();
    abstract int numberOfLegs();

    static Builder builder() {
        return new AutoValue_Animal.Builder();
    }

    @AutoValue.Builder
    abstract static class Builder {
        abstract Builder setName(String value);
        abstract Builder setNumberOfLegs(int value);
        abstract Animal build();
    }
}

...这是我的应用程序的 module-info.java 文件:

module com.example.moditect.test {
    requires com.google.auto.value.annotations;
}

但是,当我运行mvn clean install时,我收到找不到模块错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project moditect-test: Compilation failure
[ERROR] /home/someuser/development/workspace/moditect-test/src/main/java/module-info.java:[2,35] module not found: com.google.auto.value.annotations

看起来 moditect-maven-plugin 确实是根据我运行 mvn clean install 时输出的这些日志来工作的:

[INFO] --- moditect-maven-plugin:1.0.0.Beta2:generate-module-info (generate-module-info) @ moditect-test ---
writing to /home/someuser/development/workspace/moditect-test/target/moditect/auto.value.annotations/module-info.java
[INFO] Created module descriptor at /home/someuser/development/workspace/moditect-test/target/generated-sources/modules/com.google.auto.value.annotations/module-info.java

就其值(value)而言,这是此自动值库生成的模块信息(来自上面记录的位置):

module com.google.auto.value.annotations {
    exports com.google.auto.value;
    exports com.google.auto.value.extension.memoized;
}

所以我需要一些帮助来弄清楚我做错了什么。我假设我只是搞乱了 moditect-maven-plugin 的配置,但我不确定是怎么搞的。

最佳答案

我犯了一个愚蠢的错误,使用目标generate-module-info而不是add-module-info。只需将目标切换为正确的目标即可解决此问题。

关于java - 如何配置 moditect-maven-plugin 以在我的模块化应用程序中使用自动值库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59297061/

相关文章:

java - 复杂性: Conditional operator vs if-else

java - Eclipse Maven 更新抛出 SunCertPathBuilderException

java - 如何以编程方式选择 ClientRegistration

maven - Jenkins、Junit 和 Flaky 测试处理程序插件

maven - 如何在 Maven 原型(prototype)中提供自定义逻辑?

java - 如何为多个模块生成javadoc

使用身份验证 token 的 Java REST 服务

linux - 在 bash 脚本 (Linux) 中从 maven POM 读取属性

java - fatal error 编译无效标志 --module-path

java - 包与 Java 9 中的自动模块冲突