2017-09-30 23 views
5

immutables-library을 사용하면 module-info.java을 프로젝트에 추가 할 때까지 Java 9에서 잘 작동합니다. Immutables*.java은 더 이상 생성되지 않습니다.Immutables는 모듈이있는 Java 9 코드를 생성하지 않습니다

모듈 정보에 IntelliJ에서 제안한 '필수 값'을 추가합니다.

무엇이 누락 되었습니까? javac에 주석 처리 과정을 찾기 위해 설정해야하는 내용이 있습니까? immutables-library입니다.

I은 ​​타겟/소스 = 9 위해 구성된 maven-compiler-plugin:3.7.0와 받는다는를 사용하고있다.

+0

작업중인 프로젝트 샘플을 공유 할 수 있습니까? 빌드 중 볼 때 로그에 어떤 종류의 오류가 있습니까? – nullpointer

+0

확실 https://github.com/LarsKrogJensen/jigsaw-immutables –

+0

컴파일하는 동안 오류는 없지만 modules-info.java를 제거하면 ImmutableSome.java가 생성되지 않습니다. –

답변

5

당신이 가지고있는 문제는 다음과 같이 수행되어야 주석 프로세서와 불변의 일부를 구성하지 않은 것입니다 :

단순히 인코딩을 정의하여 고정 할 수 있습니다 인코딩에 대한 힌트에서 별도로
<?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> 

같은 :

. 
├── 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 
,536,913 : 위의 구성을 통해 구축 할 경우

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

당신은 당신이 필요로하는 모든 것을 얻을 것이다

+0

고맙습니다. - 이제 maven이 소스를 생성합니다. 이 방법으로 maven에게 말할 필요가 없었지만 classpath에서 주석 처리기를 선택했습니다. 나는 이것이 향상 될 것이라고 생각한다. 사소한 문제는 Intellij가이 구성을 선택하지 않는다는 것입니다. –

+0

JDK 9를 사용하는 경우에는 다른 이야기 일 수 있습니다. 그러나 확실하지 않습니다 ... – khmarbaise

+5

나는 이것을 다시 확인했습니다. 그리고 당신 말이 맞습니다. JDK 8과 JDK 9 사이의 동작이 변경되었습니다. [issue] (https://issues.apache.org/jira/browse/MCOMPILER-310)에 있습니다. – khmarbaise