java - IntelliJ 插件 : maven, gradle 和 travis-ci

标签 java intellij-idea cradle

目前,我的插件构建结构有点困惑:我使用普通的 IDEA 项目文件在本地构建插件。当我将其推送到存储库并且 travis-ci 正在构建它时,它使用 maven pom.xml因为为了让 travis 工作,它总是必须下载完整的 IDEA 源代码。

虽然这可行,但有几个缺点:

  1. 我需要使两个已构建的机制保持最新状态。这是
    • 当新的 IDEA 版本发布时(每隔几周),我需要在 Maven 和 IDEA 设置中更改 SDK
    • 当我添加新库、更改资源等时,我也需要对这两个设置执行此操作
  2. 当我保持 IDEA Maven 插件打开时,我遇到了问题,因为它看到了 pom.xml 并干扰了我的本地构建。关闭它意味着我无法使用具有跟踪依赖项功能的 Maven 下载库。

我看到 Gradle 有一个“idea”插件,在谷歌搜索后,我得到的印象是 Gradle 是目前的首选。我见过Best way to add Gradle support to IntelliJ IDEA我确信我可以使用那里的答案将我的 pom.xml 转换为有效的 build.gradle

但是,也许其他人已经这样做了或者可以提供更好的方法。我正在寻找一种在本地和 Travis-CI 上构建插件的统一方法。

一些细节

要编译 IDEA 插件,您需要其 SDK,您可以通过安装 IDEA 或下载完整包来访问它。在本地,我正在使用我安装的 SDK。使用 Travis,我构建的 Maven 具有下载 tar.gz 并解压它的规则。

最佳答案

事实证明,特别是对于构建 IntelliJ 插件,Gradle 似乎有很多优势。这主要归功于 Gradle 出色的 IntelliJ 插件,它使编译插件变得更加容易。借助 Gradle,我可以将超过 220 行的 Maven 构建转换为几行易于阅读的 Gradle 代码。主要优点是

  1. 它负责下载和使用正确的 IDEA SDK,而您只需指定 IDEA 版本。
  2. 它可以将您的插件发布到 Jetbrains 存储库并使其立即可供所有用户使用
  3. 它修复了 plugin.xml 中的项目,例如您可以在 gradle.build 中使用一个中心版本号,它将使 plugin.xml 保持最新状态,或者可以包含更改注释
  4. 它与 Travis-CI 无缝集成

如何将 Gradle 与现有 IDEA 插件结合使用

手动执行。这更容易。

  1. 创建一个空的 build.gradle 文件
  2. 查看 example并通读 README (最后有很多 build.gradle 项目)来看看每个 intellij 属性的作用。
  3. 通过以下方式使其适应您的插件
    1. 设置您想要构建的 intellij.version
    2. 设置您的intellij.pluginName
    3. 定义您的来源和资源所在
    4. 定义您的plugin version
    5. 定义 Gradle wrapper使人们(和 Travis)无需 Gradle 即可构建您的插件
  4. 使用 gradlewrapper 创建 gradle 包装脚本
  5. 使用 ./gradlew assemble 在本地测试并修复您的构建过程

如果一切正常,您可以推送 build.gradlegradlewgradlew.batgradle >-文件夹到您的存储库。

使用 Travis-CI 进行构建

对于 Travis,您希望使用 gradlew 脚本进行构建。为此,您需要使其在 travis run 中可执行。可以找到一个示例 here .

关于java - IntelliJ 插件 : maven, gradle 和 travis-ci,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44490199/

相关文章:

java - Eclipse/Idea忽略了Maven Java版本配置

seam - 使用Intellij-idea实现seam热部署

javascript - 在 CouchDB 中获取数据库的所有文档

node.js - 在 Node.js 的查询字符串中传递数组

java - 如何制作无分支代码?

java - Android 将 fragment Activity 链接到框架布局

java - 我尝试在我的 rpi 上使用 jdk.dio 并得到 'no dio in java.library.path'

java - 如何使用 svm 创建用于文本分类的 vector 空间

Java 声音演示 - 问题

node.js - 如何使用 cradle (CouchDB) 将参数传递给 View