在开发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() 函数将根据你执行程序时提供的参数,从JavaClass 或KotlinClass 实例中调用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不适用于Kotlin Native App(IntelliJ IDEA)。
但当然,如果你愿意,可以自由使用Maven。 😉