Обертывание приложения командной строки Java с помощью launch4j и maven

Я хотел бы обернуть приложение командной строки на основе Java и все его зависимости в один файл *.exe, используя maven и launch4j.

Теперь я прочитал все подобные вопросы на SO, такие как этот и этот, но я не могу заставить его работать.

Может ли кто-нибудь предоставить простой фрагмент pom.xml, как добиться этого со всеми необходимыми зависимостями. И, кстати, какую цель сборки maven я должен запускать в конфигурации запуска Eclipses?

Вот что я скопировал из SO:

<!-- Launch4j -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>1.4</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <shadedArtifactAttached>true</shadedArtifactAttached> <!-- Make the shaded artifact not the main one -->
                <shadedClassifierName>shaded</shadedClassifierName> <!-- set the suffix to the shaded jar -->
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.bluestemsoftware.open.maven.plugin</groupId>
            <artifactId>launch4j-plugin</artifactId>
            <version>1.5.0.0</version>
            <executions>

                <!-- Command-line exe -->
                <execution>
                    <id>l4j-cli</id>
                    <phase>package</phase>
                    <goals>
                        <goal>launch4j</goal>
                    </goals>
                    <configuration>
                        <headerType>console</headerType>
                        <outfile>target/importer.exe</outfile>
                        <jar>target/${artifactId}-${version}-shaded.jar</jar> <!-- 'shaded' is the value set on shadedClassifierName above -->
                        <errTitle>App Err</errTitle>
                        <classPath>
                            <mainClass>${mainClass}</mainClass>
                        </classPath>                
                        <jre>
                            <minVersion>1.5.0</minVersion>
                            <maxVersion>1.6.0</maxVersion>
                            <initialHeapSize>128</initialHeapSize>
                            <maxHeapSize>1024</maxHeapSize>
                        </jre>
                    </configuration>
                </execution>
            </executions>
        </plugin>  

когда я запускаю цель launch4j:launch4j в Eclipse (если это правильно?), я получаю:

Не удалось выполнить цель org.bluestemsoftware.open.maven.plugin:launch4j-plugin:1.5.0.0:launch4j (default-cli) в средстве импорта проекта: параметры 'headerType', 'jre' для цели org.bluestemsoftware.open.maven .plugin:launch4j-plugin:1.5.0.0:launch4j отсутствуют или недействительны -> [Справка 1]

Может я просто ложную цель запускаю...


person Drejc    schedule 22.03.2012    source источник
comment
Как насчет того, чтобы попробовать использовать этот плагин, который кажется новее?   -  person Raghuram    schedule 22.03.2012
comment
Плагин vorburger выглядит многообещающе, но какая цель должна быть достигнута?   -  person Drejc    schedule 22.03.2012
comment
Выполняя установку mvn, я получаю: Отсутствует требуемый класс: сбой com.akathist.maven.plugins.launch4j.Launch4jMojo. И это в демонстрационном приложении vorburger.   -  person Drejc    schedule 22.03.2012


Ответы (1)


Дрейц!

Я мог бы создать файл .exe с конфигурацией, очень похожей на вашу. следует за всей моей помпой:

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>test</groupId>
    <artifactId>test</artifactId>
    <packaging>jar</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>test</name>

    <properties>
        <mainClass>foo.App</mainClass>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>1.4</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <shadedArtifactAttached>true</shadedArtifactAttached> <!-- Make the shaded artifact not the main one -->
                    <shadedClassifierName>shaded</shadedClassifierName> <!-- set the suffix to the shaded jar -->
                </configuration>
            </plugin>
            <plugin>
                <groupId>com.akathist.maven.plugins.launch4j</groupId>
                <artifactId>launch4j-maven-plugin</artifactId>
                <executions>
                    <!-- Command-line exe -->
                    <execution>
                        <id>l4j-cli</id>
                        <phase>package</phase>
                        <goals>
                            <goal>launch4j</goal>
                        </goals>
                        <configuration>
                            <headerType>console</headerType>
                            <outfile>target/importer.exe</outfile>
                            <jar>target/${artifactId}-${version}-shaded.jar</jar> <!-- 'shaded' is the value set on shadedClassifierName above -->
                            <classPath>
                                <mainClass>${mainClass}</mainClass>
                            </classPath>
                            <jre>
                                <minVersion>1.5.0</minVersion>
                                <initialHeapSize>128</initialHeapSize>
                                <maxHeapSize>1024</maxHeapSize>
                            </jre>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>LATEST</version>
        </dependency>
    </dependencies>

</project>

Я изменил groupId и ArtiftId плагина на vorburger, но версия alakai тоже должна работать. Удостоверься что:

  1. Вы настроили правильный mainClass
  2. У вас есть хотя бы одна объявленная зависимость (в прошлом у меня были проблемы с некоторыми «очень маленькими» артефактами/артефактами с нулевой зависимостью)
  3. Вы можете скачать плагин из репозиториев

Я только что протестировал этот pom с помощью простого архетипа maven, поэтому не вижу причин, по которым это не работает на вашей машине. Если у вас есть какие-либо проблемы, просто спросите здесь.

Чтобы сгенерировать файл .exe, мне нужно запустить «mvn clean package» на терминале или в Eclipse щелкните правой кнопкой мыши свой проект, «Запустить как...» > «Maven build...» и введите «clean package» в текстовом поле цели.

person BrunoJCM    schedule 21.05.2012