问题描述
我使用 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 创建本机可执行文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!