2017-09-30 7 views
5

L'utilisation de immutables-library fonctionne très bien avec Java 9 jusqu'à ce que j'ajoute un module-info.java au projet, Immutables*.java ne sera plus généré.Immutables ne génèrent pas de code avec Java 9 avec des modules

Pour le module-info, j'ajoute 'requires value' comme suggéré par IntelliJ.

Qu'est-ce qui me manque, est-ce un problème immutables-library ou quelque chose d'autre que j'ai besoin de mettre en place pour javac pour trouver le traitement des annotations.

J'utilise maven avec le maven-compiler-plugin:3.7.0 configuré pour cible/source = 9.

+0

Pourriez-vous partager un exemple du projet sur lequel vous travaillez? Quel genre d'erreurs dans le journal si vous en voyez pendant la construction etc? – nullpointer

+0

Bien sûr https://github.com/LarsKrogJensen/jigsaw-immutables –

+0

Il n'y a pas d'erreurs lors de la compilation, mais il ne génère pas de ImmutableSome.java comme il le fait si je supprime les modules-info.java –

Répondre

5

Le problème que vous avez est que vous n'avez pas configuré la partie Immuable comme un processeur d'annotation qui devrait être fait comme ceci:

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

Outre des indications sur le codage qui peut simplement être fixés en définissant l'encodage comme ceci:

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

Si vous construisez via la configuration ci-dessus, vous obtiendrez toutes les choses dont vous avez besoin:

. 
├── 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 
+0

Thanx a alot - maintenant maven génère la source. Bien que je n'ai jamais eu à le dire à Maven - il a toujours pris le processeur d'annotation du classpath. Je suppose que cela va être amélioré. Un problème mineur est que Intellij ne prend pas cette configuration. –

+0

Si vous utilisez JDK 9, il se peut que ce soit une histoire différente. Mais je ne suis pas sûr de ... – khmarbaise

+5

J'ai revérifié cela. Et tu as raison. Il y a un changement de comportement entre JDK 8 et JDK 9 ... Classé dans un [problème] (https://issues.apache.org/jira/browse/MCOMPILER-310). – khmarbaise