为了账号安全,请及时绑定邮箱和手机立即绑定

将 exec 输出保存到 pom.xml 的<属性></属性>部分

将 exec 输出保存到 pom.xml 的<属性></属性>部分

侃侃尔雅 2022-09-07 16:13:34
我有一个 maven java 项目,它是一个 docker 映像,然后将该映像作为使用插件构建的工件。docker builddocker saveio.fabric8.docker-maven-plugin当我构建 Docker 映像时,我希望获取大小并将其添加到元数据中,以便我们可以在解压缩映像之前查看映像的大小。该插件没有办法获取生成的docker图像的确切大小,因此我目前正在使用该插件来获取图像的大小,如下所示:io.fabric8.docker-maven-pluginorg.codehaus.mojo.exec-maven-plugin<plugin>    <!-- generate metadata about docker image -->    <groupId>org.codehaus.mojo</groupId>    <artifactId>exec-maven-plugin</artifactId>    <version>1.1</version>    <executions>        <execution>            <id>generate-docker-metadata</id>            <phase>generate-resources</phase>            <goals>                <goal>exec</goal>            </goals>            <configuration>                <executable>docker</executable>                <commandlineArgs>image inspect ${project.docker.image}:${project.version} --format='{{.Size}}' >> ${project.basedir}/src/main/resources/META-INF/Docker-Image-Size</commandlineArgs>                <workingDirectory>.</workingDirectory>            </configuration>        </execution>    </executions></plugin>目前,我可以将输出放入文件中,但我需要一种方法来使其作为可在生成元数据文件的元数据部分中引用的属性提供。Docker-Image-Size如何将此 exec 输出保存到 pom.xml 文件的<属性>/<属性>部分,以便稍后在另一个阶段使用?我需要使用属性文件,还是可以将其另存为?${docker.image.size}
查看完整描述

1 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

我无法直接编辑 pom.xml 的<属性>/<属性>部分中已存在的任何属性。


但是,我想出的答案是使用插件运行shell脚本,编辑输出,并将其保存到稍后可以在文件中使用的变量中。请注意,除了插件部分之外,他的变量实际上并没有在文件中的任何地方定义。org.codehaus.gmaven.gmaven-pluginpom.xmlorg.codehaus.gmaven.gmaven-plugin


(将空变量放在 pom 的<属性>/<属性>部分中.xml始终会使变量为空。)


我像这样使用插件:org.codehaus.gmaven.gmaven-plugin


<plugin>

    <groupId>org.codehaus.gmaven</groupId>

    <artifactId>gmaven-plugin</artifactId>

    <version>1.4</version>

    <executions>

        <execution>

            <phase>generate-resources</phase>

            <goals>

                <goal>execute</goal>

            </goals>

            <configuration>

                <properties>

                    <script>docker image inspect ${project.docker.image}:${project.version} --format='{{.Size}}</script>

                </properties>

                <source>

                    def command = project.properties.script

                    def process = command.execute()

                    process.waitFor()


                    def text = process.in.text.trim()

                    // Remove single quotes that surround number output

                    def number = text.substring(1, text.length()-1);

                    project.properties.dockerImageSize = number

                </source>

            </configuration>

        </execution>

    </executions>

</plugin>

然后,元数据部分使用该变量,如下所示:


<plugin>

    <groupId>org.apache.felix</groupId>

    <artifactId>maven-bundle-plugin</artifactId>

    <version>2.4.0</version>

    <extensions>true</extensions>

    <executions>

        <execution>

            <id>bundle-manifest</id>

                <phase>process-classes</phase>

                <goals>

                    <goal>manifest</goal>

                </goals>

        </execution>

    </executions>

    <configuration>

        <instructions>

            <Bundle-Category>Thing</Bundle-Category>

            <Bundle-Activator>com.company.thing.impl.Activator</Bundle-Activator>

            <Bundle-Vendor>${company.vendor}</Bundle-Vendor>

            <Bundle-ContactAddress>${company.contactAddress}</Bundle-ContactAddress>

            <Bundle-Copyright>${company.copyright}</Bundle-Copyright>

            <Bundle-LicenseType>${company.licenseType}</Bundle-LicenseType>

            <Bundle-Description>${company.description}</Bundle-Description>

            <Bundle-DockerImageSize>${dockerImageSize}</Bundle-DockerImageSize>

            <Import-Package>

                com.company.thing.api*;version="[0.0.10,1.0.0)",

                *

            </Import-Package>

        </instructions>

    </configuration>

</plugin>


查看完整回答
反对 回复 2022-09-07
  • 1 回答
  • 0 关注
  • 78 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信