Maven maven-assembly-plugin构建与配置文件

时间:2016-06-13 08:54:24

标签: java maven maven-assembly-plugin

我正在尝试使用maven-assembly-plugin来构建一个轻量级的Web应用程序,应用程序稍后会有不同的内容。我认为我实际上可以使用两个配置文件context.Configuration.LazyLoadingEnabled = false; ,因此它将为每个配置文件创建两个构建程序集。但是当我运行它时,它实际上只创建了一个位于pom底部位置的程序集(liteweb)

当我逐一构建它时,我已经尝试过了。我还查看mvn -Pliteweb,fatweb package并正确显示2个有效个人资料。

下面是我的测试pom(它不包括这里的差异,我只想让它分别创建2个War文件和其他程序集文件)。我仍然是Maven的新人,所以我可能会误解这一点。是否可以从多个配置文件创建多个装配?

mvn help:active-profiles -P fatweb,liteweb

fatassembly.xml现在我没有放任何东西只是为了确保一切正常。

<?xml version="1.0" encoding="UTF-8"?>
<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">

<modelVersion>4.0.0</modelVersion>
<groupId>com.test.web</groupId>
<artifactId>TEST_WEB</artifactId>
<packaging>war</packaging>
<name>WEB Application</name>
<version>0.0.1</version>

<properties>
    <litewebPath>src/main/lite</litewebPath>
    <fatwebPath>src/main</fatwebPath>
</properties>

<profiles>
    <profile>
        <id>fatweb</id>
        <build>
            <resources>
                <resource>
                    <directory>${fatwebPath}/resources</directory>
                    <filtering>true</filtering>
                </resource>
            </resources>
            <finalName>WEB-${project.version}</finalName>
            <plugins>
                <plugin>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <version>2.6</version>
                    <configuration>
                        <descriptors>
                            <descriptor>fatassembly.xml</descriptor>
                        </descriptors>
                    </configuration>
                    <executions>
                        <execution>
                            <id>exec1</id>
                            <phase>package</phase>
                            <goals>
                                <goal>single</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>

            </plugins>
        </build>
    </profile>
    <profile>
        <id>liteweb</id>
        <build>
            <resources>
                <resource>
                    <directory>${litewebPath}/resources</directory>
                    <filtering>true</filtering>
                </resource>
            </resources>
            <finalName>LITEWEB-${project.version}</finalName>
            <plugins>
                <plugin>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <version>2.6</version>
                    <configuration>
                        <descriptors>
                            <descriptor>liteassembly.xml</descriptor>
                        </descriptors>
                    </configuration>
                    <executions>
                        <execution>
                            <id>exec2</id>
                            <phase>package</phase>
                            <goals>
                                <goal>single</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

liteassembly.xml同样我没有放任何东西以确保一切正常,但我已经用不同的东西测试内部仍然无法工作。

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">

    <id>lib</id>
    <formats>
        <format>zip</format>
    </formats>
    <dependencySets>
        <dependencySet>
        </dependencySet>
    </dependencySets>
</assembly>

执行<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> <id>lib-lite</id> <formats> <format>zip</format> </formats> <dependencySets> <dependencySet> </dependencySet> </dependencySets> </assembly>

mvn help:active-profiles -Pfatweb,liteweb

下面是当我执行mvn -Pfatweb时发生的事情,liteweb clean package看起来像是在构建相同的zip两次..来自相同的xml程序集,但实际上来自不同的执行(exec1和exec2)

Active Profiles for Project 'com.test.web:TEST_WEB:war:0.0.1':

The following profiles are active:

 - fatweb (source: com.test.web:TEST_WEB:0.0.1)
 - liteweb (source: com.test.web:TEST_WEB:0.0.1)

所以配置文件实际上是活动的,但之后构建目标文件夹的那个只是LITEWEB。如果有人知道,请帮助我理解为什么它不创造两者以及为什么mvn喜欢建立拉链两次。我知道解决方法只是构建两次的shellcript代码(如果我每次正常工作时构建一个配置文件),但我想只使用mvn特定版本。

如果我{i}}创建了两次lib,那么会发生以下情况:但它只构建一次WAR文件。从日志中我实际意识到构建WAR的那个是war-plugin,但是如何让它为两个配置文件执行..?

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building WEB Application 0.0.1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ TEST_WEB ---
[INFO] Deleting D:\PROJECT\POMTEST\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ TEST_WEB ---
[WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. build is platform dependent!
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ TEST_WEB ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ TEST_WEB ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory D:\PROJECT\POMTEST\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ TEST_WEB ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ TEST_WEB ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-war-plugin:2.2:war (default-war) @ TEST_WEB ---
[INFO] Packaging webapp
[INFO] Assembling webapp [TEST_WEB] in [D:\PROJECT\POMTEST\target\LITEWEB-0.0.1]
[INFO] Processing war project
[INFO] Copying webapp resources [D:\PROJECT\POMTEST\src\main\webapp]
[INFO] Webapp assembled in [27 msecs]
[INFO] Building war: D:\PROJECT\POMTEST\target\LITEWEB-0.0.1.war
[INFO] WEB-INF\web.xml already added, skipping
[INFO]
[INFO] --- maven-assembly-plugin:2.6:single (exec1) @ TEST_WEB ---
[INFO] Reading assembly descriptor: liteassembly.xml
[INFO] Building zip: D:\PROJECT\POMTEST\target\LITEWEB-0.0.1-lib-lite.zip
[INFO]
[INFO] --- maven-assembly-plugin:2.6:single (exec2) @ TEST_WEB ---
[INFO] Reading assembly descriptor: liteassembly.xml
[INFO] Building zip: D:\PROJECT\POMTEST\target\LITEWEB-0.0.1-lib-lite.zip
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.961 s
[INFO] Finished at: 2016-06-14T15:23:05+08:00
[INFO] Final Memory: 12M/229M
[INFO] ------------------------------------------------------------------------

1 个答案:

答案 0 :(得分:3)

在您的POM中,将您的<configuration>部分 FROM 置于<plugin> TO <execution>。为<configuration>个部分执行此操作。

错误是您配置了插件2次。当两个配置文件都处于活动状态时,maven将合并这两个配置,从而丢失一个配置。