java - 不可变对象(immutable对象)不会使用带有模块的 Java 9 生成代码

标签 java maven java-9 java-platform-module-system immutables-library

使用 immutables-library在我将 module-info.java 添加到项目之前,Java 9 可以正常工作,将不再生成 Immutables*.java

我按照 IntelliJ 的建议在模块信息中添加“需要值”。

我缺少什么,是 immutables-library 问题还是我需要设置的其他内容,以便 javac 找到注释处理。

我正在使用 Maven,maven-compiler-plugin:3.7.0配置为 target/source = 9

最佳答案

您遇到的问题是您没有将 Immutable 部分配置为注解处理器,应该这样做:

<?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>example</groupId>
    <artifactId>jigsaw</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.immutables</groupId>
            <artifactId>value</artifactId>
            <version>2.5.6</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.7.0</version>
          <configuration>
            <source>9</source>
            <target>9</target>
            <annotationProcessorPaths>
              <dependency>
                  <groupId>org.immutables</groupId>
                  <artifactId>value</artifactId>
                  <version>2.5.6</version>
              </dependency>
            </annotationProcessorPaths>
          </configuration>
        </plugin>
      </plugins>
    </build>
</project>

除了可以通过像这样定义编码来简单修复的有关编码的提示:

<?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>example</groupId>
    <artifactId>jigsaw</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.immutables</groupId>
            <artifactId>value</artifactId>
            <version>2.5.6</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.7.0</version>
          <configuration>
            <source>9</source>
            <target>9</target>
            <annotationProcessorPaths>
              <dependency>
                  <groupId>org.immutables</groupId>
                  <artifactId>value</artifactId>
                  <version>2.5.6</version>
              </dependency>
            </annotationProcessorPaths>
          </configuration>
        </plugin>
      </plugins>
    </build>
</project>

如果您通过上述配置进行构建,您将获得所需的所有东西:

.
├── pom.xml
├── src
│   └── main
│       └── java
│           ├── example
│           │   └── Some.java
│           └── module-info.java
└── target
    ├── classes
    │   ├── example
    │   │   ├── ImmutableSome$1.class
    │   │   ├── ImmutableSome$Builder.class
    │   │   ├── ImmutableSome.class
    │   │   └── Some.class
    │   └── module-info.class
    ├── generated-sources
    │   └── annotations
    │       └── example
    │           └── ImmutableSome.java
    ├── jigsaw-1.0-SNAPSHOT.jar
    ├── maven-archiver
    │   └── pom.properties
    └── maven-status
        └── maven-compiler-plugin
            └── compile
                └── default-compile
                    ├── createdFiles.lst
                    └── inputFiles.lst

关于java - 不可变对象(immutable对象)不会使用带有模块的 Java 9 生成代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46500984/

相关文章:

java - 无法从 double 转换为类

java - Swagger Spring mvc 响应体

java - Mockito 不能模拟依赖于 Unmarshaller 的类

java - 异常 : Error creating bean with name 'richBean'

eclipse - 如何将 Maven 存储库 jar 添加到 Eclipse 构建路径?

javafx - 在 Java 9 或 10 中创建 FXML 成员的正确做法是什么?

maven - jooq-codegen-maven 插件和 JDK9 编译错误

java - 查询失败,错误代码为 13,服务器本地主机 :27017 上的错误消息为 'command find requires authentication'

java - 带有空格字符的凯撒密码保持不变

java - maven-checkstyle-plugin 中的变量 ${project.version} 来自子项目