繁体   English   中英

IntelliJ GUI Designer Maven 可执行 JAR 导出

[英]IntelliJ GUI Designer Maven Executable JAR Export

我使用IntelliJ IDEA的 GUI 设计器和Maven作为构建系统。 当我通过答案构建可执行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)
...

受影响的代码行如下:

setContentPane(panel);

IntelliJ中的源代码运行时,它可以正常工作,但是Maven似乎无法正确构建JAR文件。 毕竟,IntelliJ 通过链接到.form文件来保持.java源代码文件不受 GUI 代码影响,从而实现了“魔法”。

我还找到了一个可能的解决方案,它涉及在pom.xml文件中添加一个特殊插件,该插件似乎可以在此处启用对IntelliJ的 GUI 设计器的构建支持。 所以我再次运行mvn clean compile assembly:single ,它没有任何错误但是没有任何改变。

如果我执行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

这是我的 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>

怎么了? 如何使用Maven结合IntelliJ的 GUI 设计器正确导出可执行JAR文件?

发生这种情况是因为 Maven 并不真正知道如何编译使用 IntelliJ GUI Designer 创建的 GUI。 这就是为什么您必须明确指示 IntelliJ 生成它可以理解的所有代码而 Maven 不能。

为此,请转到GUI Designer设置并将Generate GUI into value 更改为Java Source files 从现在开始,IntelliJ 将包括所有负责在类本身中设置 UI 的代码,以及所有外部工具,如 Maven,Eclipse 将正常工作。

我在使用IntelliJ IDEA 2017.1.5时遇到了同样的问题,但我能够让它与Maven一起使用。 我在这里使用更新的插件源代码创建了一个GitHub存储库。

首先,克隆项目。

ideauidesigner-maven-plugin-master文件夹中,运行install-intellij-libs.sh脚本将IntelliJ库安装到本地 maven 存储库中:

./install-intellij-libs.sh <path to your IntelliJ directory>

这里还有一个适用于 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

然后通过运行以下命令安装新插件:

mvn install

现在您已经完成了环境的设置。

在您的实际项目中,将pom.xml中的插件版本编辑为:

<version>1.0-beta-2-17.1.5</version>

还要添加以下依赖项:

 <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>

现在构建应该与 UI 设计器表单一起正常工作。

我有同样的问题,但我想我找到了一个更简单的解决方案:

  1. 在 IntelliJ 中进入File -> Settings -> Editor -> GUI Designer并执行以下设置:

    • 生成 UI 成:Java 源代码
    • 启用Automatically copy form runtime classes...
  2. 将以下依赖项添加到 yout maven pom.xml中:

     <dependency> <groupId>com.intellij</groupId> <artifactId>forms_rt</artifactId> <version>7.0.3</version> </dependency>
  3. 此外,在您的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>

应该这样做 - 它至少对我有用。 让我知道它是否也适合你:-)

@jorichard的回答可能会被简化并使 CI 友好——因此不需要本地安装任何 IDE,所有配置和依赖项管理都由 Maven 完成。

插件org.codehaus.mojo:ideauidesigner-maven-plugin:1.0-beta-1对 Jetbrains 通过com.intellij:javac2:7.0.3com.intellij:forms_rt:7.0.3提供的代码有两个依赖项(两者都是最后更新于 2008 年)。 从那以后,这些都没有直接更新,但在他们自己的存储库中拥有由 Jetbrains 托管的现代等价物。

要做的就是覆盖插件依赖项。 在此配置中(对我有用),我更新到版本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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM