[英]IntelliJ GUI Designer Maven Executable JAR Export
I'm using IntelliJ IDEA
's GUI designer and Maven
as build system.我使用
IntelliJ IDEA
的 GUI 设计器和Maven
作为构建系统。 When I build the executable JAR
file via this answer, the build succeeds.当我通过此答案构建可执行
JAR
文件时,构建成功。 However, it throws an exception when launched via the command java -jar MyApplication.jar
:但是,它在通过命令
java -jar MyApplication.jar
启动时会引发异常:
Exception in thread "main" java.awt.IllegalComponentStateException: contentPane cannot be set to null.
at javax.swing.JRootPane.setContentPane(JRootPane.java:621)
at javax.swing.JFrame.setContentPane(JFrame.java:698)
...
The affected code line is the following:受影响的代码行如下:
setContentPane(panel);
When ran from source in IntelliJ
, it works fine however Maven
doesn't seem to properly build the JAR
file.从
IntelliJ
中的源代码运行时,它可以正常工作,但是Maven
似乎无法正确构建JAR
文件。 After all, IntelliJ does "magic" by linking to a .form
file for keeping .java
source code files clean from GUI code.毕竟,IntelliJ 通过链接到
.form
文件来保持.java
源代码文件不受 GUI 代码影响,从而实现了“魔法”。
I also found a possible solution which involves adding a special plugin to the pom.xml
file that seems to enable build support for IntelliJ
's GUI designer here .我还找到了一个可能的解决方案,它涉及在
pom.xml
文件中添加一个特殊插件,该插件似乎可以在此处启用对IntelliJ
的 GUI 设计器的构建支持。 So I ran mvn clean compile assembly:single
again, it didn't have any errors however nothing changed.所以我再次运行
mvn clean compile assembly:single
,它没有任何错误但是没有任何改变。
If I do a mvn deploy
, the plugin throws the following error:如果我执行
mvn deploy
,插件会抛出以下错误:
[ERROR] Failed to execute goal org.codehaus.mojo:ideauidesigner-maven-plugin:1.0-beta-1:javac2 (default) on project MyApplication: Execution default of goal org.codehaus.mojo:ideauidesigner-maven-plugin:1.0-beta-1:javac2 failed: 16257 -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException
Here is my pom.xml:这是我的 pom.xml:
<?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>
<groupId>groupId</groupId>
<artifactId>MyApplication</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- Apache Commons Lang -->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<!-- Jsoup HTML parser -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.8.3</version>
</dependency>
<!-- Apache Commons IO -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<!-- Apache Commons Validator -->
<dependency>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
<version>1.4.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.example.MyApplication
</mainClass>
</manifest>
<manifestEntries>
<Built-By>BullyWiiPlaza</Built-By>
</manifestEntries>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<!-- IDEA Gui Designer Plugin -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>ideauidesigner-maven-plugin</artifactId>
<version>1.0-beta-1</version>
<executions>
<execution>
<goals>
<goal>javac2</goal>
</goals>
</execution>
</executions>
<configuration>
<fork>true</fork>
<debug>true</debug>
<failOnError>true</failOnError>
</configuration>
</plugin>
</plugins>
</build>
</project>
What is wrong?怎么了? How do I properly export an executable
JAR
file using Maven
in combination with IntelliJ
's GUI designer?如何使用
Maven
结合IntelliJ
的 GUI 设计器正确导出可执行JAR
文件?
That happens because Maven doesn't really know how to compile GUI created with IntelliJ GUI Designer.发生这种情况是因为 Maven 并不真正知道如何编译使用 IntelliJ GUI Designer 创建的 GUI。 That's why you have to explicitly instruct IntelliJ to generate all the code it understands and Maven doesn't.
这就是为什么您必须明确指示 IntelliJ 生成它可以理解的所有代码而 Maven 不能。
To do this go to GUI Designer settings and change the Generate GUI into value to Java Source files .为此,请转到GUI Designer设置并将Generate GUI into value 更改为Java Source files 。 From now on IntelliJ will include all the code responsible for setting UI up in the class itself and all the external tools, like Maven, Eclipse will work properly.
从现在开始,IntelliJ 将包括所有负责在类本身中设置 UI 的代码,以及所有外部工具,如 Maven,Eclipse 将正常工作。
I had the same problem using IntelliJ IDEA 2017.1.5
but I was able to get it working with Maven
.我在使用
IntelliJ IDEA 2017.1.5
时遇到了同样的问题,但我能够让它与Maven
一起使用。 I created a GitHub
repository with the updated plugin source code here .我在这里使用更新的插件源代码创建了一个
GitHub
存储库。
First, clone the project.首先,克隆项目。
In the ideauidesigner-maven-plugin-master
folder, run the install-intellij-libs.sh
script to install the IntelliJ
libraries into your local maven repository:在
ideauidesigner-maven-plugin-master
文件夹中,运行install-intellij-libs.sh
脚本将IntelliJ
库安装到本地 maven 存储库中:
./install-intellij-libs.sh <path to your IntelliJ directory>
Here is also a batch file ( install-intellij-libs.bat
) for Windows:这里还有一个适用于 Windows 的批处理文件 (
install-intellij-libs.bat
):
SET INTELLIJ_HOME=C:\Program Files\JetBrains\IntelliJ IDEA 173.3188.16 REM Edit this to match your path!
CALL mvn install:install-file -Dfile="%INTELLIJ_HOME%\lib\javac2.jar" -DgroupId=com.intellij -DartifactId=javac2 -Dversion=17.1.5 -Dpackaging=jar
CALL mvn install:install-file -Dfile="%INTELLIJ_HOME%\lib\asm-all.jar" -DgroupId=com.intellij -DartifactId=asm-all -Dversion=17.1.5 -Dpackaging=jar
CALL mvn install:install-file -Dfile="%INTELLIJ_HOME%\lib\forms_rt.jar" -DgroupId=com.intellij -DartifactId=forms_rt -Dversion=17.1.5 -Dpackaging=jar
Then install your new plugin by running the following:然后通过运行以下命令安装新插件:
mvn install
Now you're done with setting up your environment.现在您已经完成了环境的设置。
In your actual project, edit the plugin's version in your pom.xml
to this:在您的实际项目中,将
pom.xml
中的插件版本编辑为:
<version>1.0-beta-2-17.1.5</version>
Also add the following dependencies:还要添加以下依赖项:
<dependency>
<groupId>com.intellij</groupId>
<artifactId>javac2</artifactId>
<version>LATEST</version>
</dependency>
<dependency>
<groupId>com.intellij</groupId>
<artifactId>forms_rt</artifactId>
<version>LATEST</version>
</dependency>
<dependency>
<groupId>com.intellij</groupId>
<artifactId>asm-all</artifactId>
<version>LATEST</version>
</dependency>
Now building should work correctly with UI designer forms.现在构建应该与 UI 设计器表单一起正常工作。
I had the same problem but I think I found a much easier solution:我有同样的问题,但我想我找到了一个更简单的解决方案:
In IntelliJ go into File -> Settings -> Editor -> GUI Designer
and do the following setting:在 IntelliJ 中进入
File -> Settings -> Editor -> GUI Designer
并执行以下设置:
Automatically copy form runtime classes...
Automatically copy form runtime classes...
Add the following dependncy into yout maven pom.xml
:将以下依赖项添加到 yout maven
pom.xml
中:
<dependency> <groupId>com.intellij</groupId> <artifactId>forms_rt</artifactId> <version>7.0.3</version> </dependency>
Additionally add to your pom.xml
an assembly plugin snippet which could look like this example:此外,在您的
pom.xml
中添加一个程序集插件片段,如下所示:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <executions> <execution> <phase>package</phase> <goals> <goal>single</goal> </goals> <configuration> <finalName>testUiClient</finalName> <appendAssemblyId>false</appendAssemblyId> <archive> <manifest> <mainClass> my.personal.MainClass </mainClass> </manifest> <manifestEntries> <Multi-Release>true</Multi-Release> <Class-Path>.</Class-Path> </manifestEntries> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </execution> </executions> </plugin> </plugins> </build>
That should do it - it works at least for me.应该这样做 - 它至少对我有用。 Just let me know if it works also for you :-)
让我知道它是否也适合你:-)
The answer by @jorichard may be simplifed and made CI friendly - so no local installation of any IDE is required and all configuration and dependency management is done by Maven. @jorichard的回答可能会被简化并使 CI 友好——因此不需要本地安装任何 IDE,所有配置和依赖项管理都由 Maven 完成。
The plugin org.codehaus.mojo:ideauidesigner-maven-plugin:1.0-beta-1
has 2 dependencies on the code provided by Jetbrains via com.intellij:javac2:7.0.3
and com.intellij:forms_rt:7.0.3
(both last updated in 2008).插件
org.codehaus.mojo:ideauidesigner-maven-plugin:1.0-beta-1
对 Jetbrains 通过com.intellij:javac2:7.0.3
和com.intellij:forms_rt:7.0.3
提供的代码有两个依赖项(两者都是最后更新于 2008 年)。 These have not been directly updated since, but have modern equivalents hosted by Jetbrains in their own repositories .从那以后,这些都没有直接更新,但在他们自己的存储库中拥有由 Jetbrains 托管的现代等价物。
All there is to be done is to overwrite the plugin dependencies.要做的就是覆盖插件依赖项。 In this configuration (which is working for me) I updated to jetbrains libraries in version
212.5284.40
, or latest at the time of writing, corresponding to Intellij IDEA 2021.2.2.在此配置中(对我有用),我更新到版本
212.5284.40
的 jetbrains 库,或在撰写本文时最新版本,对应于 Intellij IDEA 2021.2.2。
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>ideauidesigner-maven-plugin</artifactId>
<version>1.0-beta-1</version>
<dependencies>
<dependency>
<groupId>com.jetbrains.intellij.java</groupId>
<artifactId>java-compiler-ant-tasks</artifactId>
<version>212.5284.40</version>
</dependency>
<dependency>
<groupId>com.jetbrains.intellij.java</groupId>
<artifactId>java-gui-forms-rt</artifactId>
<version>212.5284.40</version>
</dependency>
</dependencies>
<executions>
<execution>
<goals>
<goal>javac2</goal>
</goals>
</execution>
</executions>
<configuration>
<fork>true</fork>
<debug>true</debug>
<failOnError>true</failOnError>
</configuration>
</plugin>
</plugins>
</build>
<pluginRepositories>
<pluginRepository>
<id>intellij-repository</id>
<url>https://www.jetbrains.com/intellij-repository/releases</url>
</pluginRepository>
<pluginRepository>
<id>intellij-third-party</id>
<url>https://cache-redirector.jetbrains.com/intellij-dependencies</url>
</pluginRepository>
</pluginRepositories>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.