Lev*_*and 3 java intellij-idea vaadin maven kotlin
我正在尝试在 Vaadin Framework (v 8.4.5) 下将一些 Kotlin 类添加到我现有的 Java 项目中。
我已经完全阅读了关于如何混合 java 和 Kotlin的教程,并且我已经在我现有的 Java 项目中成功创建了一个 Kotlin 类。
新的 Kotlin 类在我的项目中(出于隐私考虑,我已经删除了所有代码)
package it.projectName.utils
import it.projectName.otherClasses
class SecurityUtils (user: User) {
//various val and var, and of course the isCrypted calculated val
init {
if(!isCrypted){
//encrypt user password
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我在我的 Java 类中使用这个 Kotlin 类
import it.projectName.utils.SecurityUtils;
public class UserDao{
//[... other code ...]
SecurityUtils securityUtils = new SecurityUtils(user);
}
Run Code Online (Sandbox Code Playgroud)
一切都很好,我没有收到任何编译器错误。但是当我尝试使用 maven with 运行我的项目时jetty:run,它会抛出一个错误:
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /C:/pathToClass/UserDao.java:[9,36] cannot find symbol
symbol: class SecurityUtils
location: package it.projectName.utils
[INFO] 1 error
[INFO] -------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
他所指的那条线是 import it.projectName.utils.SecurityUtils;
我检查了我的pom.xml,一切看起来也很好:
<properties>
<kotlin.version>1.2.61</kotlin.version>
<kotlin.compiler.incremental>true</kotlin.compiler.incremental>
</properties>
<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>
<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>
<sourceDir>src/main/java</sourceDir>
<sourceDir>src/main/kotlin</sourceDir>
</sourceDirs>
</configuration>
</execution>
<execution>
<id>test-compile</id>
<phase>test-compile</phase>
<goals>
<goal>test-compile</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>src/main/java</sourceDir>
<sourceDir>src/main/kotlin</sourceDir>
</sourceDirs>
</configuration>
</execution>
</executions>
<configuration>
<jvmTarget>1.8</jvmTarget>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
我缺少什么?谢谢
我们必须在目录下为每个目录使用两个不同的源src/main目录。(我说的是 Maven 文件夹结构)。
例如,对于 Java,它是,src/main/java而对于 Kotlin,它就像src/main/kotlin.
根据此处的文档,在Compiling Kotlin 和 Java 源代码的主题下,JetBrains 提供了全面的 maven 插件来将上述每个目录声明为其对应的源目录。这样编译器就可以检测到这两个源目录,并且在构建过程中,能够将相应的二进制文件复制到类路径中。
这是 Maven 插件声明,
<build>
<plugins>
<plugin>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<version>${kotlin.version}</version>
<executions>
<execution>
<id>compile</id>
<goals> <goal>compile</goal> </goals>
<configuration>
<sourceDirs>
<sourceDir>${project.basedir}/src/main/kotlin</sourceDir>
<sourceDir>${project.basedir}/src/main/java</sourceDir>
</sourceDirs>
</configuration>
</execution>
<execution>
<id>test-compile</id>
<goals> <goal>test-compile</goal> </goals>
<configuration>
<sourceDirs>
<sourceDir>${project.basedir}/src/test/kotlin</sourceDir>
<sourceDir>${project.basedir}/src/test/java</sourceDir>
</sourceDirs>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<executions>
<!-- Replacing default-compile as it is treated specially by maven -->
<execution>
<id>default-compile</id>
<phase>none</phase>
</execution>
<!-- Replacing default-testCompile as it is treated specially by maven -->
<execution>
<id>default-testCompile</id>
<phase>none</phase>
</execution>
<execution>
<id>java-compile</id>
<phase>compile</phase>
<goals> <goal>compile</goal> </goals>
</execution>
<execution>
<id>java-test-compile</id>
<phase>test-compile</phase>
<goals> <goal>testCompile</goal> </goals>
</execution>
</executions>
</plugin>
</plugins>
Run Code Online (Sandbox Code Playgroud)
另外,我个人建议必须存在以下属性以提高构建过程的速度。
<properties>
<kotlin.compiler.incremental>true</kotlin.compiler.incremental>
</properties>
Run Code Online (Sandbox Code Playgroud)
即使您创建了一个带有模块的 Maven 项目,这个对我来说也很好用。
| 归档时间: |
|
| 查看次数: |
3573 次 |
| 最近记录: |