首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Quarkus 2.0 maven构建没有为AWS lambda创建uber-jar

Quarkus 2.0 maven构建没有为AWS lambda创建uber-jar
EN

Stack Overflow用户
提问于 2021-07-26 10:28:03
回答 1查看 316关注 0票数 0

我正在使用Quarkus2.0来构建uber-jar作为AWS。Maven构建脚本如下:

代码语言:javascript
运行
复制
    <properties>
        <quarkus.package.type>uber-jar</quarkus.package.type>
    </properties>

    <dependencies>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-amazon-lambda</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugin>
                <groupId>io.quarkus</groupId>
                <artifactId>quarkus-maven-plugin</artifactId>
                <version>2.0.3.Final</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

application.properties还包含quarkus.package.type=uber-jar配置。

当我调试Maven构建时,我看到在作出决策的时刻,quarkus-maven-plugin执行代码

代码语言:javascript
运行
复制
@BuildStep
    public JarBuildItem buildRunnerJar(CurateOutcomeBuildItem curateOutcomeBuildItem, OutputTargetBuildItem outputTargetBuildItem, TransformedClassesBuildItem transformedClasses, ApplicationArchivesBuildItem applicationArchivesBuildItem, ApplicationInfoBuildItem applicationInfo, PackageConfig packageConfig, ClassLoadingConfig classLoadingConfig, List<GeneratedClassBuildItem> generatedClasses, List<GeneratedResourceBuildItem> generatedResources, List<UberJarRequiredBuildItem> uberJarRequired, List<UberJarMergedResourceBuildItem> uberJarMergedResourceBuildItems, List<UberJarIgnoredResourceBuildItem> uberJarIgnoredResourceBuildItems, List<LegacyJarRequiredBuildItem> legacyJarRequired, QuarkusBuildCloseablesBuildItem closeablesBuildItem, List<AdditionalApplicationArchiveBuildItem> additionalApplicationArchiveBuildItems, MainClassBuildItem mainClassBuildItem, Optional<AppCDSRequestedBuildItem> appCDS) throws Exception {
        if (appCDS.isPresent()) {
            this.handleAppCDSSupportFileGeneration(transformedClasses, generatedClasses, (AppCDSRequestedBuildItem)appCDS.get());
        }

        if (!uberJarRequired.isEmpty() && !legacyJarRequired.isEmpty()) {
            throw new RuntimeException("Extensions with conflicting package types. One extension requires uber-jar another requires legacy format");
        } else if (legacyJarRequired.isEmpty() && (!uberJarRequired.isEmpty() || packageConfig.type.equalsIgnoreCase("uber-jar"))) {
            /* I want it get there, but it doesn't due to "legacyJarRequired" containing an item, ("packageConfig == uber-jar" as expected) */          

            return this.buildUberJar(curateOutcomeBuildItem, outputTargetBuildItem, transformedClasses, applicationArchivesBuildItem, packageConfig, applicationInfo, generatedClasses, generatedResources, uberJarMergedResourceBuildItems, uberJarIgnoredResourceBuildItems, mainClassBuildItem);
        } else {
            /* execution gets there because "legacyJarRequired" contains an item */
 
            return legacyJarRequired.isEmpty() && !packageConfig.isLegacyJar() && !packageConfig.type.equalsIgnoreCase("legacy") ? this.buildThinJar(curateOutcomeBuildItem, outputTargetBuildItem, transformedClasses, applicationArchivesBuildItem, packageConfig, classLoadingConfig, applicationInfo, generatedClasses, generatedResources, additionalApplicationArchiveBuildItems, mainClassBuildItem) : this.buildLegacyThinJar(curateOutcomeBuildItem, outputTargetBuildItem, transformedClasses, applicationArchivesBuildItem, packageConfig, applicationInfo, generatedClasses, generatedResources, mainClassBuildItem);
        }
    }

legacyJarRequired中的项被添加到这里中。

代码语言:javascript
运行
复制
    @BuildStep(onlyIf = IsNormal.class, onlyIfNot = NativeBuild.class)
    public void requireLegacy(BuildProducer<LegacyJarRequiredBuildItem> required) {
        required.produce(new LegacyJarRequiredBuildItem());
    }

如何避免将此元素添加到构建配置中以接收来自应用程序构建的版本化xxx-yyy-zzz-runner.jar

function.zip构建得很好,但对我来说不是一个选项,因为我想将构建的结果推到maven repo。

EN

回答 1

Stack Overflow用户

发布于 2022-01-24 20:13:44

我还需要将uber-jar部署到工件,以便作为AWS lambda进行进一步部署。最后我用build-helper-maven-plugin:attach-artifact插件解决了这个问题。它将function.zip附加到Nexus中的工件上,因此Jenkins能够获得存档并将其部署到AWS。

代码语言:javascript
运行
复制
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>3.2.0</version>
    <executions>
        <execution>
            <id>attach-artifacts</id>
            <phase>package</phase>
            <goals>
                <goal>attach-artifact</goal>
            </goals>
            <configuration>
                <artifacts>
                    <artifact>
                        <file>./target/function.zip</file>
                        <type>zip</type>
                    </artifact>
                </artifacts>
            </configuration>
        </execution>
    </executions>
</plugin>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68528291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档