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

我目前正在尝试创build一个基于我的战争文件,将部署在目标文件夹内创build一个docker的形象。 但是,在maven war文件被部署到目标文件夹之前,ant插件会执行命令。 由于这一点,尽pipe它试图创build一个docker图像,它不会find必要的.war文件来添加,因为它没有被部署到目标文件夹。

ant插件也被称为docker的一个单独的configuration文件下。 虽然我读了Maven生命周期文档 ,却找不到一个合适的方法来实现这个目标。

这是我的.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 

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

  • Maven只用于构build应用程序(jar,war等)
  • 所有的docker工件用bash脚本创build,其中包含用maven构build应用程序的命令,构builddocker镜像并将其推送到存储库。

我认为为此目的,bash更加方便和灵活,然后maven

这个问题的原因并没有像我第一次想到的那样对maven做任何事情。 问题是我的Dockerfile。 这不是识别我的Dockerfile中指定的war文件的全限定文件名path。

在我经历了一个在Docker回购中提出的官方问题后,我将.war文件的完全合格的path更改为/mobile.war后,它起作用了。 它从上下文的根目录添加文件

这是该问题的链接

这是我更新的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 

非常感谢您的回答和build议!