У меня есть код, который использует библиотеку 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, приветствуется.
Вместо этого я создал класс 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)