【问题标题】:Intellij Idea 13 UI Designer and automatic Gradle buildingIntellij Idea 13 UI Designer 和自动 Gradle 构建
【发布时间】:2014-06-12 13:14:26
【问题描述】:

我使用 Intellij UI Designer 为项目创建表单。当我使用想法构建时一切正常,因为它会为我处理编译表单,但由于我们最近切换到使用 Gradle 进行构建,它还无法生成可执行的 jar 文件。

我的 google-fu 引导我阅读了几篇文章,这些文章解释了编译需要一个 ant 脚本(例如 linklink2link3,而我最后关注的是:link4

我的项目是一个多模块设置。

root build.gradle

subprojects {
    apply plugin: 'java'
    apply plugin: 'idea'

    repositories {
        mavenCentral()
    }
}

supproject build.gradle

apply plugin:'application'
mainClassName = "dk.OfferFileEditor.OfferFileEditorProgram"

configurations {
    antTask
}

dependencies {
    compile 'org.json:json:20140107'
    compile project(":Shared:HasOffers Api")

    //dependencies for java2c
    antTask files('../../lib/javac2-13.1.1.jar', '../../lib/asm4-all-13.1.1-idea.jar', '../../lib/forms_rt-13.1.1.jar')
    antTask group: 'org.jdom', name: 'jdom', version: '1.1'
}

task compileJava(overwrite: true, dependsOn: configurations.compile.getTaskDependencyFromProjectDependency(true, 'jar')) {
    doLast {
        println 'using java2c to compile'
        project.sourceSets.main.output.classesDir.mkdirs()
        ant.taskdef name: 'javac2', classname: 'com.intellij.ant.Javac2', classpath: configurations.antTask.asPath
        ant.javac2 srcdir: project.sourceSets.main.java.srcDirs.join(':'),
                classpath: project.sourceSets.main.compileClasspath.asPath,
                destdir: project.sourceSets.main.output.classesDir,
                source: sourceCompatibility,
                target: targetCompatibility,
                includeAntRuntime: false
    }
}

但即使编译成功,当我第一次尝试访问 UI 设计器创建的字段之一时,也会引发 Nullpointer 异常。所以有些东西没有正确编译。

我可能遗漏了一些设置,但在论坛和谷歌上倾注了几个小时都没有成功后,我仍然没有找到任何解决方案。

【问题讨论】:

标签: java ant intellij-idea gradle


【解决方案1】:

我为一个新项目找到了 gradle 构建解决方法的更新版本 - https://github.com/edward3h/systray-mpd/blob/master/build.gradle 不过可能不会再使用表单设计器了。

这些是相关部分:

repositories {
    mavenCentral()
    maven { url "https://www.jetbrains.com/intellij-repository/releases" }
    maven { url "https://jetbrains.bintray.com/intellij-third-party-dependencies" }
}

configurations {
    antTask
}

dependencies {
    implementation 'com.jetbrains.intellij.java:java-gui-forms-rt:203.7148.30'

    antTask 'com.jetbrains.intellij.java:java-compiler-ant-tasks:203.7148.30'
}

task compileJava(type: JavaCompile, overwrite: true, dependsOn: configurations.compile.getTaskDependencyFromProjectDependency(true, 'jar')) {
    doLast {
        project.sourceSets.main.output.classesDirs.each { project.mkdir(it) }
        ant.taskdef name: 'javac2', classname: 'com.intellij.ant.Javac2', classpath: configurations.antTask.asPath
        ant.javac2 srcdir: project.sourceSets.main.java.srcDirs.join(':'),
                classpath: project.sourceSets.main.compileClasspath.asPath,
                destdir: project.sourceSets.main.output.classesDirs[0],
                source: sourceCompatibility,
                target: targetCompatibility,
                includeAntRuntime: false
    }
}

jetbrains 库的依赖版本可通过https://plugins.jetbrains.com/docs/intellij/intellij-artifacts.html?from=jetbrains.org#using-intellij-platform-module-artifactshttps://www.jetbrains.com/intellij-repository/releases/ 找到

【讨论】:

    【解决方案2】:

    forms_rt 库位于 mavenCentral 中。 http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22forms_rt%22

    配置 IntelliJ 以更新源代码后,只需将库添加到 build.gradle 中的依赖项即可。

    dependencies {
        compile 'com.intellij:forms_rt:7.0.3'
    }
    

    【讨论】:

    • 是的,不过好像是旧版本。 intellij redist 目录中的 forms_rt 文件更大。但是我在任何地方都找不到有关其版本的任何信息。你知道 mavenCentral 是否是最新的吗?
    • compile 'com.intellij:forms_rt:7.0.3' 添加到 gradle 文件使我的项目开箱即用。谢谢,你拯救了我的一天,
    【解决方案3】:

    IntelliJ IDEA 2019.1

    我发现这个问题仍然存在。现在至少以某种方式documented

    如果您的构建操作委托给 Gradle,GUI Designer 将不会生成 Java 源代码。

    所以通过禁用相应的设置

    Build, Execution, Deployment | Build Tools | Gradle | Runner | Delegate IDE build/run actions to gradle

    我能够成功构建并运行该项目。请注意,我不需要上述答案中的任何其他设置或其他库。我让Generate GUI into 设置为Binary class files

    【讨论】:

    • 谢谢!出于某种原因,我委托 Gradle 进行构建/运行操作,一个月后我尝试在我的项目中实现 GUI。禁用该选项后,现在可以完美运行,但我必须将 Generate GUI 设置为 Java Source Code
    • 我在 Windows 上使用 IDEA Community 2020.1 和 Gradle 6.4。我在“构建、执行、部署 | 构建工具 | Gradle”中没有“Runner”。幸运的是,我在“Build Tools | Gradle”面板的“Build and run”区域中有“Build and run using:”选项。我通过将其从“Gradle”更改为“Intellij IDEA”解决了同样的问题。
    【解决方案4】:

    创意 2019.2

    似乎 IntelliJ 在从 2019.1 更新到 2019.2 时更改了设置 UI,因为菜单项 mentioned by Tom 不再存在。
    我通过将 Build and run using: 设置为 IntelliJ Idea 来修复它。我还将 Run tests using: 更改为 IntelliJ Idea 以避免测试时出现问题。
    这两个设置都位于File | Settings | Build, Execution, Deployment | Build Tools | Gradle 下。

    【讨论】:

    • 这适用于上面的其他修复,值得注意的是,您必须使用 intellij 运行按钮运行主程序至少一次以生成代码,之后它将使用 gradle 运行
    【解决方案5】:

    所以我把这比需要的复杂得多。

    要使其正常工作,您需要更改项目中的两件事。

    IDEA 13.1.5 中的一项设置

    设置 -> GUI 设计器 -> 将 GUI 生成为:Java 源代码

    这使 IntelliJ IDEA 在表单底部添加了 3 个方法:

    • $$$setupUI$$$()
    • $$$setupUI$$$()
    • $$$getRootComponent$$$()

    如果它们丢失,请在更改设置后尝试重新编译您的项目。

    添加缺失的类

    Intellij 有一个名为 forms_rt.jar 的 jar,我在 {IntelliJ IDEA Root}\lib 中找到了我的。并将其重命名为“forms_rt-13.1.1.jar

    这需要在编译时包含到您的项目中。如果您像我一样使用 Gradle,您可以将其复制到 {project root}/lib 并添加一个平面文件存储库,如下所示:

    repositories {
        mavenCentral()
        flatDir dirs: "${rootDir}/lib"
    }
    

    之后,您需要将其包含在您的项目 gradle 文件中:

    dependencies {
        compile name: 'forms_rt', version: '13.1.1'
    }
    

    之后应该可以在 IntelliJ IDEA 和 Gradle 中构建它。

    【讨论】:

    • 这不起作用。您需要 IDEA 根 lib 目录中的一大堆其他 Jars 才能成功编译。
    • 您能详细说明一下吗?我接受了这个作为答案,因为它是从本机 gradle 编译的,没有添加任何额外的库。
    • 当我尝试这个时,我得到了大量的编译失败,因为东西不在类路径上;特别是 IDEA lib 目录中的许多其他 Jars。
    • 像魅力一样工作!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 2013-12-23
    • 2013-12-21
    • 2014-01-18
    • 1970-01-01
    相关资源
    最近更新 更多