如何使用 quarkus 创建本机可执行文件? [英] How to create native executable using quarkus?

查看:54
本文介绍了如何使用 quarkus 创建本机可执行文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用 quarkus maven 插件创建了一个 quarkus 应用程序.

I've created a quarkus application using quarkus maven plugin.

我的 maven pom 如下

My maven pom is as follow

<?xml version="1.0"?>
<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com</groupId>
    <artifactId>quarkus-poc</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <surefire-plugin.version>2.22.0</surefire-plugin.version>
        <quarkus.version>0.11.0</quarkus.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>io.quarkus</groupId>
                <artifactId>quarkus-bom</artifactId>
                <version>${quarkus.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-resteasy</artifactId>
        </dependency>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jackson-provider</artifactId>
            <version>4.0.0.Beta5</version>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-arc</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-junit5</artifactId>
        </dependency>
        <dependency>
            <groupId>io.rest-assured</groupId>
            <artifactId>rest-assured</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>io.quarkus</groupId>
                <artifactId>quarkus-maven-plugin</artifactId>
                <version>${quarkus.version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${surefire-plugin.version}</version>
                <configuration>
                    <systemProperties>
                        <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
                    </systemProperties>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <profiles>
        <profile>
            <id>native</id>
            <activation>
                <property>
                    <name>native</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>io.quarkus</groupId>
                        <artifactId>quarkus-maven-plugin</artifactId>
                        <version>${quarkus.version}</version>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>native-image</goal>
                                </goals>
                                <configuration>
                                    <enableHttpUrlHandler>true</enableHttpUrlHandler>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <artifactId>maven-failsafe-plugin</artifactId>
                        <version>${surefire-plugin.version}</version>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>integration-test</goal>
                                    <goal>verify</goal>
                                </goals>
                                <configuration>
                                    <systemProperties>
                                        <native.image.path>${project.build.directory}/${project.build.finalName}-runner</native.image.path>
                                    </systemProperties>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>

但是当我尝试使用 mvn package -Pnative -Dnative-image.docker-build=true 创建本机构建时,我收到以下错误消息,与平台无关.

But when i try to create a native build using mvn package -Pnative -Dnative-image.docker-build=true I get the following error message, independently of the platform.

[INFO] --- quarkus-maven-plugin:0.11.0:native-image (default) @ quarkus-poc ---
[INFO] [io.quarkus.creator.phase.nativeimage.NativeImagePhase] Running Quarkus native-image plugin on Java HotSpot(TM) 64-Bit Server VM
[INFO] [io.quarkus.creator.phase.nativeimage.NativeImagePhase] docker run -v C:\Users\nicolas-delsaux\Documents\Adeo\inhabitant-referential--api-poc-challenge\quarkus\target:/project:z --rm swd847/centos-graal-native-image-rc12 -J-Djava.util.logging.manager=org.jboss.logmanager.LogManager -H:InitialCollectionPolicy=com.oracle.svm.core.genscavenge.CollectionPolicy$BySpaceAndTime -jar quarkus-poc-1.0-SNAPSHOT-runner.jar -J-Djava.util.concurrent.ForkJoinPool.common.parallelism=1 -H:+PrintAnalysisCallTree -H:EnableURLProtocols=http -H:-SpawnIsolates -H:-JNI -H:-UseServiceLoaderFeature -H:+StackTrace
Error: No main manifest attribute, in /project/quarkus-poc-1.0-SNAPSHOT-runner.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  27.308 s
[INFO] Finished at: 2019-03-12T16:11:43+01:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal io.quarkus:quarkus-maven-plugin:0.11.0:native-image (default) on project quarkus-poc: Failed to generate a native image: Failed to build native image: Image generation failed -> [Help 1]

我确实认识到我没有创建任何类型的主类,因为 quarkus 似乎不需要它.但是我如何向 Java 平台声明我打算让 quarkus 决定主类?

I do recognize that I have not created any kind of main class, since quarkus doesn't seems to need it. But how can i declare to the Java platform that I plan to let quarkus decide of the main class ?

EDIT 回应 c.推特,这里有更多信息

EDIT In response to c. tweet, here are some more infos

-runner.jar 的内容是

+---com
|   \---company
|       \---service
|           \---domain
|               \---poc
|                       Customer.class
|                       CustomerService.class
|                       CustomerService_Bean.class
|                       CustomersResource.class
|                       CustomersResource_Bean.class
|
+---io
|   \---quarkus
|       +---arc
|       |   |   ActivateRequestContextInterceptor_Bean.class
|       |   |
|       |   +---runtime
|       |   |       LifecycleEventRunner_Bean.class
|       |   |
|       |   \---setup
|       |           Default_ComponentsProvider.class
|       |
|       +---deployment
|       |   \---steps
|       |           ArcAnnotationProcessor$build4.class
|       |           LifecycleEventsBuildStep$startupEvent9.class
|       |           LoggingResourceProcessor$setupLoggingRuntimeInit1.class
|       |           LoggingResourceProcessor$setupLoggingRuntimeInit2.class
|       |           LoggingResourceProcessor$setupLoggingStaticInit1.class
|       |           LoggingResourceProcessor$setupLoggingStaticInit2.class
|       |           ResteasyScanningProcessor$setupInjection5.class
|       |           ResteasyScanningProcessor$setupInjection6.class
|       |           UndertowArcIntegrationBuildStep$integrateRequestContext5.class
|       |           UndertowArcIntegrationBuildStep$integrateRequestContext6.class
|       |           UndertowBuildStep$boot8.class
|       |           UndertowBuildStep$build7.class
|       |
|       +---runner
|       |       ApplicationImpl1.class
|       |       AutoFeature.class
|       |       GeneratedMain.class
|       |
|       \---runtime
|           \---generated
|                   ConfigHelper.class
|                   ConfigHelperData.class
|                   ConfigRoot.class
|
+---javax
|   \---enterprise
|       \---context
|           \---control
|                   ActivateRequestContext_Shared_AnnotationLiteral.class
|
\---META-INF
    |   MANIFEST.MF
    |   microprofile-config.properties
    |   quarkus-default-config.properties
    |
    +---maven
    |   \---com
    |       \---quarkus-poc
    |               pom.properties
    |               pom.xml
    |
    +---resources
    |       index.html
    |
    \---services
            io.quarkus.arc.ComponentsProvider

我很确定你们中的一些人会要求 MANIFEST.MF 内容

I'm quite sure some of you will ask for MANIFEST.MF content

Manifest-Version: 1.0
Built-By: nicolas-delsaux
Build-Jdk: 1.8.0_131
Created-By: Maven Integration for Eclipse

我认为清单文件很奇怪...

I think that manifest file is quite strange ...

推荐答案

我猜 eclipse 已经为你自动创建了一个清单文件,我们没有正确处理这种情况.根据如何添加清单,运行mvn clean package"可能会修复它,或者我可能需要删除src/main/resources"中的 MANIFEST.MF 文件.

I am guessing that eclipse has auto-created a manifest file for you, and we are not dealing with this situation correctly. Depending on how the manifest has been added running 'mvn clean package' might fix it, or there may me a MANIFEST.MF file in 'src/main/resources' that needs to be removed.

我已提交https://github.com/quarkusio/quarkus/issues/1443 以改进我们处理此问题的方式.

I have filed https://github.com/quarkusio/quarkus/issues/1443 to improve the way we handle this.

这篇关于如何使用 quarkus 创建本机可执行文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆