2017-09-30 90 views
5

Używanie immutables-library działa dobrze z Javą 9 dopóki nie dodaję module-info.java do projektu, Immutables*.java nie będzie już generowane.Immutables nie generują kodu z java 9 z modułami

Do modułu-info dodaję "wymaga wartości" zgodnie z sugestią IntelliJ.

Co ja brakuje, czy jest to numer immutables-library lub coś innego, co muszę skonfigurować, aby javac znaleźć przetwarzanie adnotacji.

ja pomocą maven z maven-compiler-plugin:3.7.0 skonfigurowany do docelowego/źródło = 9.

+0

Możesz udostępnić próbkę projektu, nad którym pracujesz. Jakie błędy w logowaniu, jeśli widzisz podczas kompilacji itp? – nullpointer

+0

Sure https://github.com/LarsKrogJensen/jigsaw-immutables –

+0

Nie ma błędów podczas kompilacji, ale nie generuje on żadnego ImmutableSome.java, tak jak w przypadku usunięcia modułów-info.java –

Odpowiedz

5

Problemem jest to, że masz nie został skonfigurowany jako część niezmienna procesor adnotacji, które powinny być wykonane tak:

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

Oprócz wskazówek dotyczących kodowania, który po prostu może być ustalona poprzez zdefiniowanie kodowania tak:

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

Jeśli budować poprzez powyższej konfiguracji dostaniesz wszystko, co jest potrzebne:

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

Niż dużo - teraz maven generuje źródło. Chociaż nigdy nie musiałem w ten sposób mówić mavenowi - zawsze wybierało to procesor adnotacji ze ścieżki klasycznej. Myślę, że to się poprawi. Drobnym problemem jest to, że Intellij nie bierze tej konfiguracji. –

+0

Jeśli używasz JDK 9, może to być inna historia. Ale nie jestem pewien ... – khmarbaise

+5

Sprawdziłem to ponownie. I masz rację. Istnieje zmiana zachowania między JDK 8 i JDK 9 ... Zapisano w [wydanie] (https://issues.apache.org/jira/browse/MCOMPILER-310). – khmarbaise