【问题标题】:Maven Resources and docker-maven-pluginMaven 资源和 docker-maven-plugin
【发布时间】:2016-04-13 12:06:34
【问题描述】:

我想更好地了解 Maven 如何处理资源,尤其是插件如何重用 Maven 提供的 Resources 基础架构:

我已经阅读了Maven 的资源部分并查看了Maven Resources Plugin

现在我发现了来自 Spotify 的Docker Maven Plugin。其中包含以下配置部分:

<configuration>
    <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
    <dockerDirectory>src/main/docker</dockerDirectory>
    <resources>
        <resource>
            <targetPath>/</targetPath>
            <directory>${project.build.directory}</directory>
            <include>${project.build.finalName}.jar</include>
        </resource>
    </resources>
</configuration>

查看插件的Readme,我找不到任何解释&lt;resource&gt; 元素允许哪些子元素。 我假设 &lt;resource&gt; 元素实际上与 Maven 的 org.apache.maven.model.Resource 类有关,我可以重用 Maven 的文档来了解它的工作原理。但是根据我上面链接的 Maven 文档,&lt;include&gt; 元素似乎必须嵌套在上面的代码清单中没有的 &lt;includes&gt; 元素中。现在我很困惑。

总结一下:如果插件没有准确记录其配置的工作原理,我在哪里可以找到明确的答案。是否存在某种用于插件的 XML 模式参考,我可以在其中查找特定元素的工作方式?

【问题讨论】:

    标签: maven maven-resources-plugin


    【解决方案1】:

    我想你想设置如下配置:

    <dockerDirectory>src/main/docker</dockerDirectory>
    <dockerHost>https://192.168.99.100:2376</dockerHost>
    <dockerCertPath>/Users/your_user/.docker/machine/machines/default</dockerCertPath>
    

    您可以通过以下方式使用这些:

    通过以下方式解决此问题:

            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.13</version>
                <configuration>
                    <imageName>yourImageName</imageName>
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <dockerHost>https://192.168.99.100:2376</dockerHost>
                    <dockerCertPath>/Users/your_user/.docker/machine/machines/default</dockerCertPath>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
    

    这两个标签很重要:

    <dockerHost>https://192.168.99.100:2376</dockerHost>
    <dockerCertPath>/Users/your_user/.docker/machine/machines/default</dockerCertPath>
    

    我正在使用一个 dockerfile,你必须用这个标签定义哪个路径:

    <dockerDirectory>src/main/docker</dockerDirectory>  
    

    现在您可以通过以下方式构建您的 jar 并生成 docker 映像:

    mvn 打包 docker:build

    【讨论】:

    • 我需要一种方法将构建的 jar 工件复制到 docker 映像中,而无需对 Dockerfile 中的版本进行硬编码。所以在我的src/main/docker/Dockerfile 中我写道:ADD backend-@project.version@.jar app.jar 然后使用Maven 资源插件在target 中创建一个新的docker/Dockerfile。例如,这会导致最终 Dockerfile 中的以下行:ADD backend-0.5.5.jar app.jar。我已将&lt;dockerDirectory&gt; 设置为:${project.build.directory}/docker。否则,您每次更改软件的版本号时都需要触摸您的 docker 文件。
    猜你喜欢
    • 2012-06-09
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 2018-02-18
    • 2022-01-17
    • 2013-10-24
    • 2013-11-20
    • 1970-01-01
    相关资源
    最近更新 更多