Код Scala, использующий статический метод в интерфейсе, выдает ошибку Статические методы в интерфейсе требуют -target:jvm-1.8

У меня есть код, который использует библиотеку java cron-utils, которая использует статические методы в интерфейсе (хотя я установил цель и источник на 1.8 в pom ниже) а при компиляции выдает эту ошибку

Static methods in interface require -target:jvm-1.8 для части, где используется статический метод из интерфейса ExecutionTime.forCron(cron)

Это код в библиотеке, где статический метод определен в интерфейсе.

public interface ExecutionTime {

    /**
     * Creates execution time for given Cron.
     *
     * @param cron - Cron instance
     * @return ExecutionTime instance
     */
    public static ExecutionTime forCron(final Cron cron) 

Я использовал это так в своем коде

def getInterval(schedule: String): Long = {
  val parser = new CronParser(CronDefinitionBuilder.instanceDefinitionFor(CronType.UNIX))
  val cron = parser.parse(schedule)
  val currDateTime = ZonedDateTime.parse(ZonedDateTime.now().toString)
  val next = ExecutionTime.forCron(cron).nextExecution(currDateTime).get().toInstant
  val prev = ExecutionTime.forCron(cron).lastExecution(currDateTime).get().toInstant
  Duration.between(prev, next).toMillis
}

Я установил Java 1.8 в качестве источника и цели в pom

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.5.1</version>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <compilerArgs>
            <recompileMode>incremental</recompileMode>
            <args>conf:cat=other-match-analysis:error</args>
        </compilerArgs>
    </configuration>
    <executions>
        <execution>
            <phase>compile</phase>
            <goals>
                <goal>compile</goal>
            </goals>
        </execution>
    </executions>
</plugin>

У меня есть плагин scala, подобный этому

<plugin>
    <groupId>net.alchim31.maven</groupId>
    <artifactId>scala-maven-plugin</artifactId>
    <version>4.5.6</version>
    <executions>
        <execution>
            <goals>
                <goal>compile</goal>
                <goal>testCompile</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Тем не менее выдает ту же ошибку, говорящую static methods in interface require -target:jvm-1.8

Я пытался использовать более старые версии библиотеки, что дает мне еще много неизбежных ошибок.

Любая помощь в определении того, как я могу установить цель на java 1.8, приветствуется.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
21
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вместо этого я создал класс Java и использовал библиотеку CronUtils, а затем использовал класс Java в scala.

import com.cronutils.model.Cron;
import com.cronutils.model.CronType;
import com.cronutils.model.definition.CronDefinitionBuilder;
import com.cronutils.model.time.ExecutionTime;
import com.cronutils.parser.CronParser;

import java.time.Duration;
import java.time.Instant;
import java.time.ZonedDateTime;

public class CronUtil  {
    public Long getInterval(String schedule ) {
        CronParser parser = new CronParser(CronDefinitionBuilder.instanceDefinitionFor(CronType.UNIX));
        Cron cron = parser.parse(schedule);
        ZonedDateTime currDateTime = ZonedDateTime.parse(ZonedDateTime.now().toString());
        Instant next = ExecutionTime.forCron(cron).nextExecution(currDateTime).get().toInstant();
        Instant prev = ExecutionTime.forCron(cron).lastExecution(currDateTime).get().toInstant();
        return Duration.between(prev, next).toMillis();
    }
}  

Наконец-то использовал его в scala без ошибок

val interval = new CronUtil().getInterval(schedule)

Другие вопросы по теме