Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Immutables don't generate code with java 9 with modules

Using immutables-library works fine with java 9 until I add a module-info.java to the project, Immutables*.java will no longer be generated.

To the module-info I add 'requires value' as suggested by IntelliJ.

What am I missing, is it a immutables-library issue or something else I need to set up in order for javac to find the annotation processing.

I am using maven with the maven-compiler-plugin:3.7.0configured for target/source = 9.

like image 396
Lars KJ Avatar asked Sep 30 '17 08:09

Lars KJ


1 Answers

The problem you have is that you haven't configured the Immutable part as a annotation processor which should be done like this:

<?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>

Apart from hints about encoding which simply can be fixed by defining the encoding like this:

<?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>

If you build via the above configuration you will get all the things you need:

.
├── 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
like image 99
khmarbaise Avatar answered Nov 07 '22 07:11

khmarbaise