我目前正在尝试根据我的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
答案 0 :(得分:1)
我没有这个问题的确切答案。但我试着解释我们解决这个问题的方法。 Maven是构建具有相同结构和构建阶段的标准项目的好工具。如果你想得到更复杂的东西maven会抵制它。因此,我们决定采用一种不同的方法:
我认为为了这个目的,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
非常感谢您的答案和建议!