maven基于jdk17构建的java工程如何配置加入kotlin实现java和kotlin混编的运行和打包?

我有一个现有的使用maven构建的java的web工程,用的jdk是17,通过打成jar包运行。我想要配置加入kotlin,实现java和kotlin混编的运行和打包。

为此先弄一个测试的maven构建的java工程,我先把现有java的maven工程的pom文件,在去除jar包后的内容,交给ai,然后按照ai回答给的pom代码修改测试混编,我目前混编只能运行,但打包总是失败,失败的信息内容提示jdk版本有问题,但不知道怎么解决这个问题。如下错误内容

[INFO] 
[INFO] ------------------------< com.test:TestWebApp >-------------------------
[INFO] Building TestWebApp 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ TestWebApp ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ TestWebApp ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 1 source file to D:\workspace\idea\testJavaKt\TestWebApp\target\classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] 不再支持源选项 5。请使用 7 或更高版本。
[ERROR] 不再支持目标选项 5。请使用 7 或更高版本。
[INFO] 2 errors 
[INFO] -------------------------------------------------------------

pom.xml代码

<?xml version="1.0"?>
<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.test</groupId>
    <artifactId>TestWebApp</artifactId>
    <version>0.0.1</version>


    <packaging>jar</packaging>


    <properties>
        <java.version>17</java.version>
        <kotlin.version>2.0.0</kotlin.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-stdlib</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>
        <defaultGoal>clean install</defaultGoal>
        <finalName>TestMainWeb1</finalName>


        <plugins>



            <!-- 移除原来的maven-compiler-plugin,由Kotlin插件接管 -->
            <!-- 保留surefire插件配置 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>

            <!-- 新增Kotlin插件 -->
            <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>
                    <!-- 关键配置:将源目录指向现有的 Java 目录 -->
                    <sourceDirs>
                        <sourceDir>src/main/java</sourceDir>
                    </sourceDirs>
                    <testSourceDirs>
                        <testSourceDir>src/test/java</testSourceDir>
                    </testSourceDirs>
                    <args>
                        <arg>-Xjvm-default=all</arg> <!-- 可选:启用默认接口方法实现 -->

                    </args>
                    <jvmTarget>17</jvmTarget>      <!-- Java 17目标版本 -->
                </configuration>
            </plugin>



            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.1</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <finalName>demo</finalName>
                            <transformers>
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>start.AppStart1</mainClass>
                                </transformer>

                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer">
                                    <resources>


                                        <!--
                                        <resource>demo-config-dev.txt</resource> -->
                                        <!-- <resource>.PDF</resource> -->
                                        <!-- <resource>READ.md</resource> -->
                                    </resources>
                                </transformer>
                            </transformers>
                            <filters>
                                <filter>
                                    <artifact>*:*</artifact>
                                    <excludes>
                                        <exclude>module-info.class</exclude>
                                        <exclude>META-INF/*.SF</exclude>
                                        <exclude>META-INF/*.DSA</exclude>
                                        <exclude>META-INF/*.RSA</exclude>
                                    </excludes>
                                </filter>
                            </filters>

                        </configuration>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>
</project>

如何解决这个问题,是不是pom里缺了什么配置?我目前看网上的maven的java和kotlin的混编都是基于jdk8的,没看到基于jdk17的java与kotlin的混编配置方式

阅读 299
1 个回答
<build>
    <defaultGoal>clean install</defaultGoal>
    <finalName>TestMainWeb1</finalName>
    <plugins>
        <!-- 添加maven-compiler-plugin配置 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.11.0</version>
            <configuration>
                <source>17</source>
                <target>17</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        
        <!-- Kotlin插件配置(保持不变) -->
        <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>
                </execution>
                <execution>
                    <id>test-compile</id>
                    <phase>test-compile</phase>
                    <goals>
                        <goal>test-compile</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <sourceDirs>
                    <sourceDir>src/main/java</sourceDir>
                    <sourceDir>src/main/kotlin</sourceDir>
                </sourceDirs>
                <testSourceDirs>
                    <testSourceDir>src/test/java</testSourceDir>
                    <testSourceDir>src/test/kotlin</testSourceDir>
                </testSourceDirs>
                <jvmTarget>17</jvmTarget>
                <args>
                    <arg>-Xjvm-default=all</arg>
                </args>
            </configuration>
        </plugin>
        
        <!-- 其他插件保持不变 -->
    </plugins>
</build>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题