如何指定maven编译器插件顺序

2024-06-23

我正在使用 Maven 开发一个混合 java 和 kotlin 项目。

我现在面临的问题是maven-compiler-plugin编译前运行kotlin-maven-plugin.

[INFO] --- maven-compiler-plugin:3.0:compile (default-compile) @annotation --- 
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 11 source files to /Users/hannes/workspace/tikxml/annotation/target/classes 
[INFO] --- kotlin-maven-plugin:1.0.0-beta-4583:compile (compile) @ annotation 
[INFO] Kotlin Compiler version 1.0.0-beta-4583

在我的 java 源代码中,我引用了用 kotlin 编写的类。但 javac 先于 kotlinc 运行。因此,maven 会因编译器错误而中断。

我的pom(父pom,我使用子模块)看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<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>

    <parent>
        <groupId>org.sonatype.oss</groupId>
        <artifactId>oss-parent</artifactId>
        <version>7</version>
    </parent>

    ...

    <modules>
        <module>core</module>
        <module>annotation</module>
        <module>processor</module>
    </modules>


    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.7</java.version>
        <kotlin.version>1.0.0-beta-4583</kotlin.version>
    </properties>


    <build>
        <pluginManagement>
            <plugins>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.0</version>
                    <configuration>
                        <source>${java.version}</source>
                        <target>${java.version}</target>
                    </configuration>
                </plugin>
            </plugins>


        </pluginManagement>

        <plugins>

            <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>
                                <source>src/main/java</source>
                            </sourceDirs>
                        </configuration>
                    </execution>
                    <execution>
                        <id>test-compile</id>
                        <phase>test-compile</phase>
                        <goals>
                            <goal>test-compile</goal>
                        </goals>
                        <configuration>
                            <sourceDirs>
                                <source>src/test/java</source>
                            </sourceDirs>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

</project>

Kotlin 文档使用Maven https://kotlinlang.org/docs/reference/using-maven.html建议明确绑定kotlin-maven-plugin执行到process-sources阶段。自从maven-compiler-plugin绑定到compile相、结合kotlin-maven-plugin to the process-sources阶段使其首先运行。

<plugin>
    <artifactId>kotlin-maven-plugin</artifactId>
    <groupId>org.jetbrains.kotlin</groupId>
    <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>process-test-sources</phase>
            <goals> <goal>test-compile</goal> </goals>
        </execution>
    </executions>
</plugin>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何指定maven编译器插件顺序 的相关文章

随机推荐

  • 如何在 Bash 脚本中回答“是”

    有一个快速的问题 想象一下我有这样的代码 mkdir p INSTALLDIR sudo apt get install y git clojure leiningen git clone git github com maltoe sto
  • 指令级并行性探索

    我只是想知道是否有任何有用的工具可以让我在某些算法中利用指令级并行性 更具体地说 我有一个子集 来自多媒体领域的算法 我想知道利用 ILP 的最佳方法是什么 在这个算法中 所有这些算法都是用 C 语言实现的 所以理想情况下 我将这些算法作为
  • Scala 将字符串转换为映射

    转换这个最快的方法是什么 a ab b cd c cd d de e ef f fg 进入 scala 中的可变映射 我从 500MB 文件中读取了这个输入字符串 这就是我关心速度的原因 如果您的 JSON 像您的示例一样简单 即一系列键
  • 将参数传递给 Scala 对象

    是否可以从外部对象初始化 Scala 对象 我尝试初始化的 Scala 对象没有任何 Companion 类 这是一个例子 object ObjectA val mongoDBConnectionURI This is the Val th
  • python 视频捕获循环

    我编写了一个简单的脚本来连续从网络摄像头捕获快照 我唯一的问题是视频捕获模块并不总是捕获图像 这反过来又导致程序崩溃 我认为我可以通过使用无限循环来解决这个问题 但我不确定如何解决 这是脚本 from VideoCapture import
  • 文件转换任务无法转换压缩包上的 XML 配置

    我正在开发发布管道 它将对应用程序服务工作线程配置执行转换 然后发布工作线程 Web 应用程序 我的输入包是由 MsBuild 发布 来自 ASP NET 构建管道 生成的 zip 包 PackageTmp app data jobs tr
  • Rails - 查找或创建 - 有查找或构建吗?

    我目前正在使用 XXX find or create by uuid XXXX 有没有办法进行查找或构建 Try XXX find or initialize by uuid XXXX
  • TypeScript 中的无渲染 Vue 组件

    我有一个 JavaScript 中的无渲染组件 我正在尝试将其转换为 TypeScript 我在声明时遇到错误render函数在一个Vue extend ed 组件 method ComponentOptions
  • 在 Python 中删除 root 权限

    我想让一个Python程序开始侦听端口80 但之后执行时无需root权限 有没有办法放弃 root 或在没有 root 的情况下获取端口 80 如果没有 root 权限 您将无法在端口 80 上打开服务器 这是对操作系统级别的限制 因此 唯
  • 如何在 C++ 中强制包含静态库中的静态对象 (MSVC 11)

    我试图在 C 文件中初始化一个静态对象 该文件试图在其构造函数中将类自动注册到工厂 就像任何标准自动注册问题一样 问题是 它被编译为静态库 并且在链接到可执行文件时被优化掉 应该有一个非常简单的解决方案 但令人惊讶的是 看起来并不那么简单
  • 如何在 Echo Alexa 卡片中显示超链接

    如何在 Echo Alexa 卡中显示超链接 即与 Echo 通话后在 Alexa 应用程序中显示的卡 我知道它包含在 lambda 函数返回的响应中 但找不到除https developer amazon com public solut
  • 如何重置 table.DefaultView.RowFilter?

    下面的代码工作正常并正确过滤行 但是我如何将表恢复到原始状态 DataTable table this dataGridView1 DataSource as DataTable table DefaultView RowFilter co
  • 性能:Matlab 与 Python

    我最近从Matlab to Python 在转换我的一个冗长代码时 我惊讶地发现Python非常慢 我分析并追踪了一个函数占用时间的问题 该函数是从我的代码中的各个位置调用的 作为递归调用的其他函数的一部分 探查器建议300两个地方都调用了
  • 生成 PHP 代码(从解析器令牌)

    是否有任何可用的解决方案用于 重新 生成 PHP 代码解析器令牌 http www php net manual en tokens php由返回token get all http www php net manual en functi
  • 我应该声明变量尽可能接近它们将使用的范围吗?

    锐锐通常会建议我这样做 而我仍在寻找这样做的充分理由 我想到的唯一一件事是 声明它更接近它将使用的范围 可以避免在某些不必要的情况下初始化它 因为条件等 与此相关的事情如下 int temp foreach var x in collect
  • 应用程序“”未配置为多租户应用程序

    我正在尝试开发单租户应用程序 但登录时收到以下错误消息 应用程序 应用程序 ID 未配置为多租户应用程序 2018 年 10 月 15 日 之后创建的此类应用程序不支持使用 common 端点 使用特定于租户的端点或配置应用程序成为多租户
  • 如何初始化派生类中的静态成员?

    嗯 显然 我不能 但这是我的问题 也许这是一个设计问题 我把整个事情搞错了 我希望在每个派生类中以不同的方式初始化类成员 想象我有一个类型的对象Device This Device只是应用程序代码使用的接口 因为实际设备只是两种类型之一 D
  • IBAN 验证器 Swift

    我正在编写一种算法来验证 Swift 3 中的 IBAN 国际银行帐号 但无法计算其中一个验证 IBAN 示例 BE68539007547034 以下是验证规则 输入数字的长度应为 16 前 2 个字符是国家 地区代码 不是数字 最后 14
  • 从文件中就地删除一行

    我有一个 txt 文件 我想要一个 python 脚本来用它做一些事情 我的 txt 看起来像这样 27b23815 4cbb dfae 3e6d 38f67ec4266e 81a090bd 8973 bc37 5c7b dc1a18e8d
  • 如何指定maven编译器插件顺序

    我正在使用 Maven 开发一个混合 java 和 kotlin 项目 我现在面临的问题是maven compiler plugin编译前运行kotlin maven plugin INFO maven compiler plugin 3