stdlib please org jre7 jdk7 instead compiler java maven kotlin

please - ¿Cómo compilas el proyecto Java+Kotlin usando Maven?



kotlin stdlib jre7 is deprecated please use kotlin stdlib jdk7 instead (3)

Estoy tratando de compilar un proyecto maven que tiene clases de Kotlin que hacen referencia a clases de Java. Aquí hay una parte de mi padre POM:

... <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-stdlib</artifactId> <version>${kotlin.version}</version> </dependency> ... <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>${compiler-plugin-version}</version> <configuration> <source>${java-version}</source> <target>${java-version}</target> <encoding>${project.build.sourceEncoding}</encoding> </configuration> </plugin> <plugin> <artifactId>kotlin-maven-plugin</artifactId> <groupId>org.jetbrains.kotlin</groupId> <version>${kotlin.plugin.version}</version> <executions> <execution> <id>compile</id> <phase>process-sources</phase> <goals> <goal>compile</goal> </goals> </execution> <execution> <id>test-compile</id> <phase>process-test-sources</phase> <goals> <goal>test-compile</goal> </goals> </execution> </executions> <configuration> <scanForAnnotations>false</scanForAnnotations> </configuration> </plugin>

Y partes relacionadas del niño POM:

<dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-stdlib</artifactId> </dependency> ... <plugin> <artifactId>kotlin-maven-plugin</artifactId> <groupId>org.jetbrains.kotlin</groupId> <configuration> <sourceDirs> <source>${project.basedir}/src/main/kotlin</source> </sourceDirs> </configuration> </plugin>

Y la clase de Kotlin:

Stateless open class DummyServiceImpl : DummyService { PersistenceContext(unitName = Consts.UNIT_NAME) private val em: EntityManager? = null override fun get(id: Long?): Dummy { return em!!.find<Dummy>(javaClass<Dummy>(), id) } override fun sayHi(): String { return "Dummy service says /"Hi!/"." } }

DummyService clases DummyService y Consts son clases Java que residen en el mismo módulo que DummyServiceImpl . Entonces, cuando compilo el módulo que contiene DummyServiceImpl con Maven, es así:

[error] C:/somepath/service/DummyServiceImpl.kt: (14, 31) Unresolved reference: DummyService [error] C:/somepath/service/DummyServiceImpl.kt: (16, 35) Unresolved reference: Consts

Si cambio la phase ejecución del complemento de Kotlin a compile entonces predeciblemente fallará si hay referencias de Java a clases de Kotlin:

[ERROR] /C:/somepath/service/impl/DummyServiceClientImpl.java:[5,27] cannot find symbol [ERROR] symbol: class DummyServiceImpl

Entonces, ¿qué se puede hacer al respecto? Tenga en cuenta que la construcción con la make IDEA va perfectamente bien.


Asegúrese de tener esta declaración en <build> de su pom.xml

<plugins> <plugin> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-plugin</artifactId> <version>${kotlin.version}</version> <executions> <execution> <id>compile</id> <phase>process-sources</phase> <goals> <goal>compile</goal> </goals> <configuration> <sourceDirs> <source>src/main/java</source> <source>src/main/kotlin</source> <source>src/main/resources</source> </sourceDirs> </configuration> </execution> <execution> <id>test-compile</id> <phase>process-test-sources</phase> <goals> <goal>test-compile</goal> </goals> <configuration> <sourceDirs> <source>src/test/java</source> <source>src/test/kotlin</source> <source>src/test/resources</source> </sourceDirs> </configuration> </execution> </executions> </plugin> </plugins>

Asegúrese de que todas las carpetas (3x en src / main y 3x en src / test) mencionadas en la configuración realmente existan, incluso si no contienen ninguna clase / recurso. Todavía puedes ajustar la configuración una vez que te funcione.

También preste atención a usar exactamente el mismo orden que mencioné anteriormente para que el compilador compile primero el código Java.


Referido de las aplicaciones de demostración de Kotlin + java.

Tienes que ejecutar mvn kotlin:compile antes del mvn package . mvn kotlin:compile compilará los archivos Kotlin en archivos de clase.

<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>com.wffweb</groupId> <artifactId>kotlinminimalproductionsample</artifactId> <version>0.0.1</version> <packaging>war</packaging> <!-- To package as war:- mvn clean kotlin:compile package --> <properties> <maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <kotlin.version>1.2.21</kotlin.version> </properties> <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.websocket</groupId> <artifactId>javax.websocket-api</artifactId> <version>1.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.webfirmframework</groupId> <artifactId>wffweb</artifactId> <version>RELEASE</version> </dependency> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-stdlib-jdk8</artifactId> <version>${kotlin.version}</version> </dependency> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-test</artifactId> <version>${kotlin.version}</version> <scope>test</scope> </dependency> </dependencies> <build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> </includes> </resource> </resources> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.4.0</version> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-plugin</artifactId> <version>${kotlin.version}</version> <executions> <execution> <id>compile</id> <phase>compile</phase> <goals> <goal>compile</goal> </goals> </execution> <execution> <id>test-compile</id> <phase>test-compile</phase> <goals> <goal>test-compile</goal> </goals> </execution> </executions> <configuration> <jvmTarget>1.8</jvmTarget> </configuration> </plugin> </plugins> </build> </project>


Terminé usando la siguiente configuración para mezclar el código fuente de Java y Kotlin:

<build> <sourceDirectory>${project.basedir}/src/main/java</sourceDirectory> <testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory> <plugins> <plugin> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-plugin</artifactId> <version>${kotlin.version}</version> <executions> <execution> <id>compile</id> <phase>compile</phase> <goals> <goal>compile</goal> </goals> <configuration> <sourceDirs> <source>src/main/kotlin</source> </sourceDirs> </configuration> </execution> <execution> <id>test-compile</id> <phase>test-compile</phase> <goals> <goal>test-compile</goal> </goals> <configuration> <sourceDirs> <source>src/test/kotlin</source> </sourceDirs> </configuration> </execution> </executions> </plugin> </plugins> </build>