2015-09-23 8 views
4

Я использую конструктор GUI IntelliJ IDEA и Maven как система сборки. Когда я создаю исполняемый файл JAR через this ответ, сборка завершается успешно. Тем не менее, он бросает исключение при запуске с помощью команды java -jar MyApplication.jar:IntelliJ GUI Дизайнер Maven Executable JAR Export

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, который, как представляется, обеспечивает поддержку построения для графического дизайнера IntelliJhere. Поэтому я снова запустил 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> 

Что не так? Как правильно экспортировать исполняемый файл JAR с использованием Maven в сочетании с дизайнером GUI IntelliJ?

+1

Я столкнулся с той же проблемой. Вы решили это? –

+0

@ André: Не уверен, но в последнее время у меня больше не было этой проблемы, и все это работало безосновательно – BullyWiiPlaza

+2

Похоже, проблема заключается в лямбда-выражениях. Если я удалю все лямбда-выражения в моем приложении, он разворачивает .... –

ответ

5

У меня была такая же проблема с использованием IntelliJ IDEA 2017.1.5, но я смог получить ее с помощью Maven. Я создал репозиторий GitHub с обновленным исходным кодом плагина here.

Во-первых, клонируйте проект.

В папке ideauidesigner-maven-plugin-master запустите install-intellij-libs.sh скрипт для установки IntelliJ библиотеки в локальный репозиторий Maven:

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

Здесь также является пакетный файл (install-intellij-libs.bat) для Windows:

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 форм.

+0

Я хотел бы поблагодарить вас и первоначального сопровождающего источников за исправления совместимости для новых IntelliJ-Versions. После компиляции в Windows 8 (и, надеюсь, 10) я снова смогу использовать lambdas, работая с IntelliJ-GUI-редактором и maven-plugin. – user3469861

+0

Работы. Одна из странных вещей заключается в том, что после запуска 'mvn package'' IntelliJ' генерирует следующее исключение при попытке запустить ваш проект с помощью среды IDE: «Исключение в потоке» AWT-EventQueue-0 »java.lang.NoClassDefFoundError: com/intellij/uiDesigner/core/Spacer' Как и как избежать этого исключения? Реконструкция через 'Build' ->' Rebuild Project' является исправлением, но почему плагин вызывает недостающий класс? – BullyWiiPlaza

4

Это происходит потому, что Maven не знает, как скомпилировать GUI, созданный с помощью IntelliJ GUI Designer. Вот почему вы должны явно проинструктировать IntelliJ генерировать весь код, который он понимает, а Maven - нет.

Для этого перейдите GUI Designer настройки и изменить Generate GUI в значение для исходных файлов Java. Теперь IntelliJ будет включать весь код, отвечающий за настройку интерфейса в самом классе, и все внешние инструменты, такие как Maven, Eclipse будут работать правильно.

Смежные вопросы