IntelliJ IDEA kotlin 多module 下的allOpen失效问题

新的语言就是新的坑,大家哼次哼次往里跳,跳完了再努力爬,就看谁爬得快。

作为一名Java老码农今年开始接触kotlin后也是跳坑不可自拔,一路也是爬了跳出,跳了爬出,好不容易到了当前的阶段。

因为我是用kotlin写spring ,应该没人那么蠢吧(写Android 的多一些吧,我猜)

好,现在回归正题,今天遇到的问题就是: 

kotlin的allOpen 在module中失效

众所皆知 kotlin 默认是final的真的很疯狂,然后spring,hibernate这种最爱cglib动态代理的框架,遇到final就傻眼,

spring 异常说 类是final,你这样我没办法动态增强啊,或者你的方法是final的我没办法啊(摊手)

用了gradle的kotlin spring插件后,主模块轻松的度过了问题;但module里面的代码编译出来还是final的。

看了module的配置,发现一个特殊之处,就是主模块(main/test)都有一个plugin的tab 

自己加的模块就没有,(经过漫长的尝试)最后终于找到答案,直接改模块的iml ,贴入下述信息:

<configuration version="3" platform="JVM 1.8" useProjectSettings="false">
  <compilerSettings />
  <compilerArguments>
    <option name="noStdlib" value="true" />
    <option name="noReflect" value="true" />
    <option name="moduleName" value="backend" />
    <option name="jvmTarget" value="1.8" />
    <option name="addCompilerBuiltIns" value="true" />
    <option name="loadBuiltInsFromDependencies" value="true" />
    <option name="languageVersion" value="1.2" />
    <option name="apiVersion" value="1.2" />
    <option name="pluginOptions">
      <array>
        <option value="plugin:org.jetbrains.kotlin.allopen:annotation=org.springframework.boot.test.context.SpringBootTest" />
        <option value="plugin:org.jetbrains.kotlin.allopen:annotation=org.springframework.cache.annotation.Cacheable" />
        <option value="plugin:org.jetbrains.kotlin.allopen:annotation=org.springframework.scheduling.annotation.Async" />
        <option value="plugin:org.jetbrains.kotlin.allopen:annotation=org.springframework.stereotype.Component" />
        <option value="plugin:org.jetbrains.kotlin.allopen:annotation=org.springframework.transaction.annotation.Transactional" />
        <option value="plugin:org.jetbrains.kotlin.allopen:annotation=org.springframework.validation.annotation.Validated" />
        <option value="plugin:org.jetbrains.kotlin.noarg:annotation=javax.persistence.Embeddable" />
        <option value="plugin:org.jetbrains.kotlin.noarg:annotation=javax.persistence.Entity" />
        <option value="plugin:org.jetbrains.kotlin.noarg:annotation=javax.persistence.MappedSuperclass" />
        <option value="plugin:org.jetbrains.kotlin.noarg:invokeInitializers=false" />
      </array>
    </option>
    <option name="pluginClasspaths">
      <array>
        <option value="$KOTLIN_BUNDLED$/lib/allopen-compiler-plugin.jar" />
        <option value="$KOTLIN_BUNDLED$/lib/noarg-compiler-plugin.jar" />
      </array>
    </option>
  </compilerArguments>
</configuration>

基本上就是强行配属性,然后ide上果然出现了plugins面板。

编译一下,问题解决 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值