使用Maven来开发Kotlin项目的详细指南

2,075 阅读2分钟

在开发Kotlin项目时,您可以使用Maven作为工具来构建应用程序。目前,只有Maven v3支持编译Kotlin代码。

在您的Kotlin项目中,pom.xml 文件的设置需要将kotlin-maven-plugin Maven插件作为依赖项。

本教程将帮助您学习如何在命令行中使用Maven编译Kotlin项目。

你可以在这里看到一个包含Kotlin-Maven模板的GitHub仓库。

首先,通过运行mvn -v 命令,确保Maven已经安装并可从命令行访问。

下面是我电脑上的一个输出示例:

$ mvn -v
Apache Maven 3.8.4 (9b656c72d54e5bacbed989b64718c159fe39b537)
Maven home: /opt/homebrew/Cellar/maven/3.8.4/libexec
Java version: 17.0.1, vendor: Homebrew
OS name: "mac os x", version: "11.5.2", arch: "aarch64", family: "mac"

安装好Maven后,创建一个pom.xml 文件,并添加必要的Maven项目细节,如<artifactId><packaging>

此外,你还需要添加<properties> 标签,指定你的Kotlin和Java语言版本:

<artifactId>KotlinMaven</artifactId>
<groupId>com.kotlin.maven</groupId>
<version>1.0</version>
<packaging>jar</packaging>
<name>KotlinMaven</name>
<properties>
<java.version>1.8</java.version>
<kotlin.version>1.2.51</kotlin.version>
</properties>

接下来,您需要将Kotlin标准库作为依赖项添加到您的项目中:

<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jdk8</artifactId>
<version>1.5.10</version>
</dependency>
</dependencies>

一旦你有了这个依赖关系,在你的pom.xml 文件中的kotlin-maven-plugin ,添加到<build> 标签。

看一下下面的XML部分:

<build>
<plugins>
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>1.5.10</version>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>${project.basedir}/src/main/java</sourceDir>
<sourceDir>${project.basedir}/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>${project.basedir}/src/test/java</sourceDir>
<sourceDir>${project.basedir}/src/test/kotlin</sourceDir>
</sourceDirs>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

上面的kotlin-maven-plugin 规范允许你从指定的<sourceDirs> 部分同时编译Java和Kotlin源代码。

pom.xml 准备好后,你需要写几行代码来测试构建。

首先,在你的项目中创建新的文件夹和文件,并使它们看起来如下:

├── pom.xml
├── src
├── main
├── Main.java
├── java
│ └── JavaClass.java
└── kotlin
└── KotlinClass.kt

Main.java 文件内,写一个Main 类,根据提供给main() 函数的参数,生成不同的输出。

该文件的代码如下所示:

public class Main {
static final String JAVA = "java";
static final String KOTLIN = "kotlin";
public static void main(String[] args) {
String language = args[0];
switch (language) {
case JAVA:
new JavaClass().callOutput();
break;
case KOTLIN:
new KotlinClass().callOutput();
break;
default:
System.out.println("Hello World");
break;
}
}
}

main() 函数将根据你执行程序时提供的参数,从JavaClassKotlinClass 实例中调用callOutput() 方法。

接下来,在JavaClass.java 文件中创建一个callOutput() 方法,如下所示:

public class JavaClass {
public void callOutput() {
System.out.println("This output is from JavaClass");
}
}

然后,在KotlinClass.kt 文件中再写一个:

class KotlinClass {
fun callOutput() {
println("This output is from KotlinClass")
}
}

现在,您已经有了可供访问的类,您的Kotlin Maven项目现在可以编译了。

您需要从源代码中创建一个.jar 文件。为此,在根目录下运行mvn package 命令:

$ mvn package
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.953 s
[INFO] Finished at: 2019-11-24T13:05:10+01:00
[INFO] ------------------------------------------------------------------------

它会花点时间下载依赖项并编译jar 文件。

一旦你看到构建成功的输出,应该会生成一个target/ 文件夹,里面有一个KotlinMaven-1.0.jar 文件。

Maven构建失败选项不再支持

当你运行mvn package 命令时,最新的Maven版本可能会触发option no longer supported 错误。

下面是我运行该命令时得到的输出结果:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.414 s
[INFO] Finished at: 2022-01-02T15:38:06+07:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile
(default-compile) on project KotlinMaven:
Compilation failure: Compilation failure:
[ERROR] Source option 5 is no longer supported. Use 7 or later.
[ERROR] Target option 5 is no longer supported. Use 7 or later.

如果你看到类似上面强调的错误,这意味着与你的Maven安装相连的JDK版本不再支持Java 1.5版(或Java 5)。

你需要在pom.xml 文件的<properties> 标签中指定maven.compiler 版本。由于Maven说的是Use 7 or later ,这意味着您需要针对JDK 1.7版(Java 7)或更高版本。

pom.xml 文件中的<properties> 标签应如下所示:

<properties>
<java.version>1.8</java.version>
<kotlin.version>1.2.51</kotlin.version>
 <maven.compiler.source>1.7</maven.compiler.source>
 <maven.compiler.target>1.7</maven.compiler.target>
</properties>

现在你应该能成功构建该项目了。

使用Java运行Maven构建的jar

现在是使用Java运行jar 文件的时候了。在你的终端,运行以下命令:

java -cp target/KotlinMaven-1.0.jar src/main/Main.java "kotlin"

输出结果如下:

This output is from KotlinClass

上述输出意味着你的Main.java 文件可以成功访问KotlinClass.kt 文件。

你可以用java 替换参数kotlin ,以看到JavaClass 的输出,如下图所示:

$ java -cp target/KotlinMaven-1.0.jar src/main/Main.java "java"
This output is from JavaClass

你可以在这个GitHub资源库中下载完整的项目模板。

这就是使用Maven构建Kotlin项目的方法。

虽然你可以用Maven构建Kotlin项目,但我建议你使用Gradle作为构建工具。

IntelliJ IDEA和Android Studio等流行的Java和Kotlin IDE都支持Maven和Gradle,但谷歌选择Gradle作为Android的官方构建工具。

此外,IntelliJ IDEA只能为Kotlin Native和Web应用项目生成一个基于Gradle的项目。

在下面的截图中,你可以看到Maven在构建系统选项中被禁用。

Maven not available for Kotlin Native App (IntelliJ IDEA)

Maven不适用于Kotlin Native App(IntelliJ IDEA)。

但当然,如果你愿意,可以自由使用Maven。 😉