部署.war后运行Maven ant插件?

时间:2017-03-14 19:46:02

标签: maven docker ant war

我目前正在尝试根据我的war文件创建一个docker镜像,该文件将在部署时在目标文件夹中创建。但是,在将maven war文件部署到目标文件夹之前,ant插件会执行该命令。由于这一点,虽然它尝试创建一个docker镜像,但由于它没有被部署到目标文件夹中,因此无法找到必要的.war文件。

ant插件也在名为docker的单独配置文件中声明。虽然我读到Maven Lifecycle Doc,但找不到合适的方法来实现这一点。

这是我的.pom文件

<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">


<groupId>org.ravindu</groupId>
<modelVersion>4.0.0</modelVersion>
<artifactId>ravindu_test</artifactId>
<packaging>war</packaging>
<version>1.0.0</version>
<name>Ravindu_Test_Proj</name>

<dependencies>
    <dependency>
        <groupId>com.googlecode.json-simple</groupId>
        <artifactId>json-simple</artifactId>
        <version>1.1</version>
    </dependency>
    <dependency>
        <groupId>org.twitter4j</groupId>
        <artifactId>twitter4j-core</artifactId>
        <version>[4.0,)</version>
    </dependency>
    <dependency>
        <groupId>org.facebook4j</groupId>
        <artifactId>facebook4j-core</artifactId>
        <version>[2.1,)</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>20.0</version>
    </dependency>
</dependencies>

<build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
        <plugin>
            <groupId>net.alchim31.maven</groupId>
            <artifactId>yuicompressor-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>compress</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <excludes>
                    <exclude>**/imported_js/**</exclude>
                    <exclude>**/jsqrcode/**</exclude>
                    <exclude>**/imported_css/**</exclude>
                </excludes>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1.1</version>
            <configuration>
                <webResources>
                    <resource>
                        <filtering>true</filtering>
                        <directory>src/main/webapp</directory>
                        <excludes>
                            <exclude>**/imported_js/**</exclude>
                            <exclude>**/jsqrcode/**</exclude>
                            <exclude>**/css/**</exclude>
                            <exclude>**/images/**</exclude>
                            <exclude>**/jquery-mobile/**</exclude>
                        </excludes>
                    </resource>
                </webResources>
            </configuration>
        </plugin>
    </plugins>
    <finalName>ravTest</finalName>
</build>

<profiles>
    <profile>
        <id>docker</id>
        <activation>
            <file>
                <exists>src/main/docker/Dockerfile</exists>
            </file>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>copy-resources</id>
                            <phase>validate</phase>
                            <goals>
                                <goal>copy-resources</goal>
                            </goals>
                            <configuration>
                                <outputDirectory>${basedir}/target</outputDirectory>
                                <resources>
                                    <resource>
                                        <directory>src/main/docker</directory>
                                        <filtering>true</filtering>
                                    </resource>
                                </resources>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <version>1.6</version>
                    <executions>
                        <execution>
                            <id>process-classes</id>
                            <phase>process-classes</phase>
                            <configuration>
                                <target>
                                    <exec executable="docker">
                                        <arg value="build"/>
                                        <arg value="-t"/>
                                        <arg value="ravindu_test"/>
                                        <arg value="target"/>
                                    </exec>
                                    <!--<exec executable="docker">-->
                                        <!--<arg value="push"/>-->
                                        <!--<arg value="ravindu_test"/>-->
                                    <!--</exec>-->
                                    <!--<exec executable="docker">-->
                                        <!--<arg value="tag"/>-->
                                        <!--<arg value="-f"/>-->
                                        <!--<arg value="ravindu_test"/>-->
                                        <!--<arg value="ravindu_test"/>-->
                                    <!--</exec>-->
                                    <!--<exec executable="docker">-->
                                        <!--<arg value="push"/>-->
                                        <!--<arg value="ravindu_test:latest"/>-->
                                    <!--</exec>-->
                                </target>
                            </configuration>
                            <goals>
                                <goal>run</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

以下是我的Dockerfile

# Pull base image
FROM tomcat:8-jre8

# Maintainer
MAINTAINER "Ravindu Fernando. <ravindu_fernando@gmail.com">

# Copy to images tomcat path
ADD /Ravindu_Test/target/mobile.war /usr/local/tomcat/webapps

2 个答案:

答案 0 :(得分:1)

我没有这个问题的确切答案。但我试着解释我们解决这个问题的方法。 Maven是构建具有相同结构和构建阶段的标准项目的好工具。如果你想得到更复杂的东西maven会抵制它。因此,我们决定采用一种不同的方法:

  • Maven仅用于建筑应用(罐子,战争等......)
  • 所有docker工件都使用bash脚本创建,其中包含使用maven构建应用程序,构建docker镜像并将其推送到存储库的命令。

我认为为了这个目的,bash比maven更方便灵活

答案 1 :(得分:0)

这个问题的原因并没有像我最初想的那样对maven做任何事情。问题出在我的Dockerfile上。它没有识别我的Dockerfile中指定的war文件的完全限定文件名路径。

在我完成了在docker repo中提出的官方问题之后,我将.war文件的完全限定路径更改为/mobile.war后,它工作了。它从上下文的根

添加文件

Here is the link for that issue

这是我更新的Dockerfile

# Pull base image
FROM tomcat:8-jre8

# Maintainer
MAINTAINER "Ravindu Fernando. <ravindu_fernando@gmail.com">

# Copy to images tomcat path
ADD /mobile.war /usr/local/tomcat/webapps

非常感谢您的答案和建议!