我使用Intellij UI Designer为项目创建表单。当我处理为我编译表单时,一切都工作得很好,但是当我们最近切换到使用Gradle构建它时,还没有可能生成可执行的jar文件。
我的google-fu引导我发了几篇文章,说明需要编译一个蚂蚁脚本(例如link,link2,link3,以及我结束的一个: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 Designer创建的字段时,也会抛出Nullpointer异常。所以没有正确编译的东西。
我可能错过了一些设置,但是在不知不觉地向论坛和谷歌倾注了几个小时之后我还没有找到任何解决方案。
答案 0 :(得分:9)
所以我把它变得比需要的要复杂得多。
要使其工作,您需要更改项目中的两件事。
设置 - > GUI Designer - >将GUI生成为: Java源代码
这使IntelliJ IDEA在表单底部添加了3种方法:
如果缺少它们,请在更改设置后重新编译项目。
Intellij有一个名为 forms_rt.jar 的jar,我在{IntelliJ IDEA Root} \ lib中找到了我的。并将其重命名为“ forms_rt-13.1.1.jar ”
这需要在编译期间包含在项目中。如果你像我一样使用Gradle,你可以将它复制到{project root} / lib并添加一个flatfile存储库,如下所示:
repositories {
mavenCentral()
flatDir dirs: "${rootDir}/lib"
}
之后,您需要将其包含在项目gradle文件中:
dependencies {
compile name: 'forms_rt', version: '13.1.1'
}
之后,应该可以在IntelliJ IDEA和Gradle中构建它。
答案 1 :(得分:2)
forms_rt
库位于mavenCentral中。
http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22forms_rt%22
将IntelliJ配置为更新SourceCode后,只需将库添加到build.gradle
中的依赖项即可。
dependencies {
compile 'com.intellij:forms_rt:7.0.3'
}
答案 2 :(得分:0)
我发现此问题仍然存在。至少现在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
。
答案 3 :(得分:0)
由于菜单项mentioned by Tom不再存在,因此IntelliJ似乎在从2019.1更新到2019.2时更改了设置UI。
我通过将Build and run using:
设置为 IntelliJ Idea 来解决此问题。我还将Run tests using:
更改为 IntelliJ Idea ,以避免测试时出现问题。
这两个设置都位于File | Settings | Build, Execution, Deployment | Build Tools | Gradle
下。
答案 4 :(得分:0)
我想出了一个新项目的 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-artifacts 和 https://www.jetbrains.com/intellij-repository/releases/
找到