Оверлеи Maven WAR - включая распакованные зависимости - PullRequest
2 голосов
/ 04 ноября 2010

Я пытаюсь настроить проект, используя Maven, и немного застрял в том, как включить некоторые сторонние зависимости, которые нужно включить, распаковав в результирующий файл войны.

Мой проект содержит некоторый пользовательский код ColdFusion и включает зависимости Java, в том числе ColdFusion, упакованный в виде файла войны. Затем я пытаюсь включить какой-нибудь сторонний код ColdFusion, который я установил в своем хранилище maven, упакованном в виде jar-файла, но я действительно хочу развернуть его без распаковки в результирующем файле war. Это та распаковка сторонних библиотек, с которой я застрял. Я бы очень хотел, чтобы это было сделано ДО того, как начнется война, чтобы я мог использовать войну: взорвался во время разработки.

В настоящее время мой pom.xml выглядит примерно так:

    <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.mycompany.app</groupId>
      <artifactId>my-webapp</artifactId>
      <packaging>war</packaging>
      <version>1.0-SNAPSHOT</version>
      <name>my-webapp Maven Webapp</name>
      <url>http://maven.apache.org</url>
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>

        <!-- This is the war overlay -->
        <dependency>
            <groupId>com.adobe.coldfusion</groupId>
            <artifactId>coldfusion</artifactId>
            <version>9.0.1</version>
            <type>war</type>
            <scope>runtime</scope>
            <optional>false</optional>
        </dependency>  

        <!-- This is the 3rd party ColdFusion dependency -->    
        <dependency>
            <groupId>org.corfield</groupId>
            <artifactId>fw1</artifactId>
            <version>1.2RC2A</version>
            <scope>provided</scope>
        </dependency>

     </dependencies>
     <build>
        <finalName>my-webapp</finalName>
     </build>
  </project>

Я вроде как получаю то, что хочу, изменив раздел сборки следующим образом:

<build>
    <finalName>${project.artifactId}</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>unpack</id>
                    <phase>package</phase>
                    <goals>
                        <goal>unpack</goal>
                    </goals>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>org.corfield</groupId>
                                <artifactId>fw1</artifactId>
                                <version>1.2RC2A</version>
                                <type>jar</type>
                                <overWrite>true</overWrite>
                                <outputDirectory>${project.build.directory}/${project.artifactId}</outputDirectory>
                                <includes>**/*.cfc</includes>
                            </artifactItem>
                           </artifactItems>
                        <includes>**/*.cfc</includes>
                        <outputDirectory>${project.build.directory}/${project.artifactId}</outputDirectory>
                        <overWriteReleases>false</overWriteReleases>

                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Проблема в том, что пакет: распаковка происходит после того, как построена война, поэтому распакованные зависимости не находятся в полученном файле войны.

Я также попробовал несколько вещей с плагином сборки, и я подошел довольно близко, используя что-то вроде этого:

<assembly>
    <id>${project.artifactId}</id>
    <formats>
        <format>war</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <includes>
                <include>org.corfield:fw1</include>
            </includes>
            <unpack>true</unpack>
            <outputDirectory>/</outputDirectory>
        </dependencySet>
        <dependencySet>
            <excludes>
                <exclude>org.corfield:fw1</exclude>
            </excludes>
            <unpack>false</unpack>
            <outputDirectory>/WEB-INF/lib</outputDirectory>
        </dependencySet>
    </dependencySets>
    <fileSets>
        <fileSet>
            <directory>src/main/webapp</directory>
            <outputDirectory>/</outputDirectory>
        </fileSet>
    </fileSets>
</assembly>

Однако при этом был создан второй файл войны с именем что-то вроде my-webapp-1.0-SNAPSHOT-my-webapp.war, а также my-webapp-1.0-SNAPSHOT.war. My-webapp-1.0-SNAPSHOT-my-webapp.war также включает my-webapp-1.0-SNAPSHOT.war

В конце дня я хочу, чтобы моя итоговая война выглядела так:

org
 |-- corfield
    |-- framework.cfc
WEB-INF
 |-- lib
 |-- web.xml
index.cfm

(на самом деле это намного больше, чем это, но этого достаточно, чтобы, надеюсь, проиллюстрировать это)

Я думаю, что я довольно близок, но мне просто не хватает того, что мне нужно. Я был бы чрезвычайно благодарен за любую помощь.

Ответы [ 2 ]

5 голосов
/ 04 ноября 2010

Для подхода maven-dependency-plugin свяжите цель unpack на фазе prepare-package (Maven 2.1+) вместо package.

Ссылки

0 голосов
/ 04 ноября 2010

Вы смотрели на вариант overlay с maven-war-plugin ?Он позволяет вам распаковать войну ColdFusion поверх макета вашего сайта.Я сделал это с помощью комбинации ColdFusion 9.x и Struts2.Выполнение только оверлея ColdFusion должно сделать его действительно легким.Вы можете сначала создать войну ColdFusion.Затем вы также можете управлять файлами neo - *. Xml из вашего проекта Maven.

...