Обновление проекта Play Framework до Java 11 и не может найти правильные версии зависимостей - PullRequest
1 голос
/ 06 февраля 2020

Обновление существующего проекта maven с Java 8 до 11, и я изо всех сил пытаюсь найти правильную комбинацию зависимостей и версий плагинов. Один из модулей использует инфраструктуру воспроизведения со связанными зависимостями, вот что они установлены сейчас:

java: 11.0.5                    
scala: 2.12.8                   
sbt: 0.13.17                            
sbt-compiler-maven-plugin: 1.0.0        
sbtrun-maven-plugin: 1.0.1          
play: 2.6.21                    
play2-maven-plugin: 1.0.0-rc5
play2-provider-play26: 1.0.0-rc5        
akka: 2.5.27

Что дает мне следующую ошибку сборки:

[ERROR] Failed to execute goal com.google.code.play2-maven-plugin:play2-maven-plugin:1.0.0-rc5:enhance (default-play2-enhance) on project services: Execution default-play2-enhance of goal com.google.code.play2-maven-plugin:play2-maven-plugin:1.0.0-rc5:enhance failed: An API incompatibility was encountered while executing com.google.code.play2-maven-plugin:play2-maven-plugin:1.0.0-rc5:enhance: java.lang.NoSuchMethodError: 'scala.collection.mutable.ArrayOps scala.Predef$.byteArrayOps(byte[])'
[ERROR] -----------------------------------------------------
[ERROR] realm =    extension>com.google.code.play2-maven-plugin:play2-maven-plugin:1.0.0-rc5
[ERROR] strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy
...
...
...
[ERROR] Number of foreign imports: 1
[ERROR] import: Entry[import  from realm ClassRealm[maven.api, parent: null]]

Примечание : Я надеюсь сохранить akka до версии 2.5.x, поскольку 2.6.x требует большого количества изменений кода, но при необходимости go переходит на более высокую версию

<?xml version="1.0"?>
<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>
    <parent>
        <groupId>groupId</groupId>
        <artifactId>artifactId</artifactId>
        <version>version</version>
    </parent>
    <artifactId>artifactId</artifactId>
    <packaging>play2</packaging>
    <name>name</name>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <repositories>
        <repository>
            <id>typesafe</id>
            <url>http://repo.typesafe.com/typesafe/releases/</url>
        </repository>
    </repositories>
    <dependencies>
        <dependency>
            <groupId>com.typesafe.play</groupId>
            <artifactId>play_2.12</artifactId>
        </dependency>
        <dependency>
            <groupId>com.typesafe.play</groupId>
            <artifactId>play-test_2.12</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.typesafe.play</groupId>
            <artifactId>play-java_2.12</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.datatype</groupId>
            <artifactId>jackson-datatype-joda</artifactId>
        </dependency>
        <dependency>
          <groupId>com.typesafe.akka</groupId>
          <artifactId>akka-stream_2.12</artifactId>
        </dependency>
        <dependency>
            <groupId>org.easytesting</groupId>
            <artifactId>fest-assert-core</artifactId>
        </dependency>
    </dependencies>
    <build>
        <!-- Play source directory -->
        <sourceDirectory>${basedir}/app</sourceDirectory>
        <testSourceDirectory>${basedir}/test</testSourceDirectory>
        <resources>
            <resource>
                <directory>${basedir}/conf</directory>
            </resource>
            <resource>
                <directory>${basedir}/public</directory>
                <targetPath>public</targetPath>
            </resource>
            <resource>
                <directory>${basedir}/target/sbt/web/public/main</directory>
                <targetPath>public</targetPath>
            </resource>
        </resources>

        <plugins>
            <plugin>
                <groupId>com.google.code.play2-maven-plugin</groupId>
                <artifactId>play2-maven-plugin</artifactId>
                <version>1.0.0-rc5</version>
                <extensions>true</extensions>
                <configuration>
                    <mainLang>java</mainLang>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>com.google.code.play2-maven-plugin</groupId>
                        <artifactId>play2-provider-play27</artifactId>
                        <version>1.0.0-rc5</version>
                    </dependency>
                </dependencies>
                <executions>
                    <execution>
                        <id>default-play2-enhance</id>
                        <goals>
                            <goal>enhance</goal>
                        </goals>
                    </execution>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>dist</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>com.google.code.sbt-compiler-maven-plugin</groupId>
                <artifactId>sbt-compiler-maven-plugin</artifactId>
                <version>1.0.0</version>
            </plugin>

            <plugin>
                <groupId>com.google.code.sbtrun-maven-plugin</groupId>
                <artifactId>sbtrun-maven-plugin</artifactId>
                <version>1.0.1</version>
                <executions>
                    <execution>
                        <id>compile-assets</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <args>web-assets:assets</args>
                            <jvmArgs>-Dscala.version=2.12.8</jvmArgs>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                        <id>default-jar</id>
                        <configuration>
                            <archive>
                                <manifest>
                                    <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                                    <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                                </manifest>
                            </archive>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <version>1.12</version>
                <executions>
                    <execution>
                        <id>attach-artifacts</id>
                        <phase>package</phase>
                        <goals>
                            <goal>attach-artifact</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <!-- &lt;!&ndash; These empty tags keep IntelliJ quiet &ndash;&gt; -->
                    <name />
                    <regex />
                    <source />
                    <value />
                    <fileSet />
                    <artifacts>
                        <artifact>
                            <file>${project.build.directory}/service-${project.version}-dist.zip</file>
                            <type>zip</type>
                            <classifier>dist</classifier>
                        </artifact>
                    </artifacts>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <profiles>
        <profile>
            <id>eclipse</id> <!-- for M2Eclipse only -->

            <build>
                <directory>${project.basedir}/target-eclipse</directory>

                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <configuration>
                            <skipMain>true</skipMain>
                            <skip>true</skip>
                            <source>11</source>
                            <target>11</target>
                        </configuration>
                        <executions>
                            <execution>
                                <id>default-compile</id>
                                <goals><goal>compile</goal></goals>
                            </execution>
                            <execution>
                                <id>default-testCompile</id>
                                <goals><goal>testCompile</goal></goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>

Редактировать: Обновлены SBT и Scala версия, добавлен отредактированный пом

1 Ответ

2 голосов
/ 06 февраля 2020

Согласно scala документации https://docs.scala-lang.org/overviews/jdk-compatibility/overview.html

Ваша версия SBT не совместима с Java 11. Я бы порекомендовал обновить ее до sbt.version = 1.2.3 * 1006. *

Используемая вами версия Akka должна подойти, если вы не хотите обновляться до более высокой версии.

Обновление:

Я вижу, вы обновили версию sbt до 0.13.17, и вы пытались с более высоким, но вы должны забыть, что sbt 0.13 и придерживаться sbt 1.x, так как sbt 0.13 использует scala 2.10, а sbt 1.x scala 2.12.

Я также заметил, что у вас нет тега версии для maven-compiler-plugin. Если вы используете maven 3, он не сможет скомпилироваться из-за отсутствия этого тега, а поскольку это не так, я думаю, вы используете maven 2, который должен быть обновлен. Также вы должны добавить тег версии 3.8.0 в плагин maven-compiler-plugin.

Проверьте это руководство , чтобы увидеть, как правильно настроить этот плагин для java 11. Вы также должны проверить другие инструкции, чтобы увидеть, все ли правильно настроено.

...