Проблема с запуском тестов с включенными функциями предварительного просмотра - PullRequest
8 голосов
/ 22 марта 2019

Я пытаюсь перенести проект на Java 12 с --enable-preview.

Я добавил --enable-preview в настройках компилятора:

        <plugin>                                                            
            <artifactId>maven-compiler-plugin</artifactId>                  
            <version>3.8.0</version>                                        
            <configuration>                                                 
                <release>12</release>                          
                <compilerArgs>                                                                                  
                    <arg>--enable-preview</arg>                             
                </compilerArgs>                                                                      
            </configuration>                                                
        </plugin>                                                                                                                                         

А также добавил его в argLine для надёжности и безопасности:

<properties>                                                                                             
    <argLine>--enable-preview</argLine>                        
</properties> 

И сделать mvn clean verify результат в:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M3:test (default-test) on project lombok-jdk10: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M3:test failed: java.lang.UnsupportedClassVersionError: Preview features are not enabled for com/kirela/lombok/BarTest (class file version 56.65535). Try running with '--enable-preview' -> [Help 1]

Я также пытался добавить argLine напрямую в безошибочную / отказоустойчивую конфигурацию, но результат тот же.

Что мне здесь не хватает?

Это ошибка в безошибочной / отказоустойчивой работе?

EDIT2: конфигурация Surefire и failsafe:

        <plugin>                                                            
            <groupId>org.apache.maven.plugins</groupId>                     
            <artifactId>maven-surefire-plugin</artifactId>                  
            <version>3.0.0-M3</version>                                     
            <configuration>                                                 
                <forkCount>2</forkCount>                                    
            </configuration>                                                
        </plugin>                                                           
        <plugin>                                                            
            <groupId>org.apache.maven.plugins</groupId>                     
            <artifactId>maven-failsafe-plugin</artifactId>                  
            <version>3.0.0-M3</version>                                     
            <executions>                                                    
                <execution>                                                 
                    <goals>                                                 
                        <goal>integration-test</goal>                       
                        <goal>verify</goal>                                 
                    </goals>                                                
                </execution>                                                
            </executions>                                                   
            <configuration>                                                 
                <forkCount>2</forkCount>                                    
            </configuration>                                                                                                                              
        </plugin> 

EDIT3: Минимальный рабочий пример здесь: https://github.com/krzyk/lombok-jdk10-example

Проект завершается с --enable-preview, но работает, когда я его удаляю.

1 Ответ

4 голосов
/ 23 марта 2019

Существует два решения:

Добавить переменную среды --enable-preview к MAVEN_OPTS.

Объяснение сопровождающего верного огня :

ArgLine делает то, что должен, без каких-либо проблем.Плагин запускает фильтр JUnit, который, наконец, выбирает соответствующие классы для запуска в одной или нескольких JVM.Таким образом, двигатель JUnit работает дважды.Один раз в плагине JVM и второй в разветвленной JVM.

Из-за того, что классы скомпилированы с другой основной или вспомогательной версией (в байт-коде файлов * .class), чем версия среды выполнения Java, поддерживаемая в Maven, этоJRE терпит неудачу, потому что Java в Maven не понимает байт-код.Итак, любопытно, что одна и та же JVM (javac) создала две основные версии в зависимости от опции JVM, и java из той же JVM не понимает, что она несовместима для себя.Хотя версия в разветвленной JVM полностью подходит и понимает классы, скомпилированные javac, потому что javac и разветвленная JVM начинаются с одной и той же опции --enable-preview.Это та же самая ситуация, как если бы вы компилировали свои исходники с помощью Java 12 с помощью maven-compiler-plugin с использованием toolchain и запускали всю сборку Maven с помощью Java 11. Таким образом, классы будут скомпилированы с более высокой версией (в байт-коде), чем JRE могла быпонять в процессе Maven.

Мы хотим переработать провайдеров и выполнить фильтрацию внутри разветвленной JVM, но это очень сложное изменение и все еще сомнительное.

Проблема в том, чтоЯ использовал forkCount, похоже, что верный огонь не передает параметры JVM, запущенному в fork.

Удалите параметр forkCount из верной / отказоустойчивой конфигурации .

Это, конечно, приведет к тому, что тесты будут выполняться в одной JVM, поэтому, если вы хотите ускорить тесты с использованием вилок, они не будут работать сейчас.

...