gpt4 book ai didi

java - 如何使用 Maven 编译 Java+Kotlin 项目?

转载 作者:IT老高 更新时间:2023-10-28 13:28:47 33 4
gpt4 key购买 nike

我正在尝试编译具有引用 Java 类的 Kotlin 类的 maven 项目。这是我父 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>

以及子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>

还有 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!\"."
}
}

DummyServiceConsts 类是与 DummyServiceImpl 位于同一模块中的 Java 类。所以当我用 Maven 编译包含 DummyServiceImpl 的模块时,它是这样的:

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

如果我将 Kotlin 插件执行 phase 切换到 compile 则如果有 Java 对 Kotlin 类的引用,它会失败:

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

那么,该怎么办呢?请注意,使用 IDEA 的 make 进行构建非常顺利。

最佳答案

确保您在 <build> 中有此声明你的 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>

确保配置中提到的所有文件夹(src/main 中的 3x 和 src/test 中的 3x)实际上存在,即使它们不包含任何类/资源。一旦配置适合您,您仍然可以对其进行微调。

还要注意使用与我上面提到的完全相同的顺序让编译器先编译Java代码。

关于java - 如何使用 Maven 编译 Java+Kotlin 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29330311/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com