1

Я использую maven-assembly-plugin для создания военного файла под [app-root]/target/my-project-war. Как распаковать этот файл войны, чтобы он стал папкой в ​​корне приложения, например [app-root]/war?распаковать файл войны после maven clean package

Причина, по которой я хочу использовать военную папку вместо цели/**. Война заключается в том, что я могу использовать mvn gae: deploy для развертывания непосредственно в приложении. Gae: deploy от maven-gae-plugin, и его конфигирование позволяет мне указывать appDir, а не файл войны.

pom.xml

<plugin> 
    <groupId>net.kindleit</groupId> 
    <artifactId>maven-gae-plugin</artifactId> 
    <version>${gae.plugin.version}</version> 
    <configuration> 
      <unpackVersion>${gae.version}</unpackVersion> 
      <serverId>appengine.google.com</serverId> 
      <sdkDir>${gae.home}</sdkDir> 
      <appDir>${basedir}/war</appDir> 
      <splitJars>true</splitJars> 
    </configuration> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.2.1</version> 
    <configuration> 
     <appendAssemblyId>false</appendAssemblyId> 
     <descriptors> 
       <descriptor>${basedir}/assembly-war.xml</descriptor> 
     </descriptors> 
    </configuration> 
    <executions> 
     <execution> 
       <id>make-assembly</id> 
       <phase>package</phase> 
       <goals> 
        <goal>single</goal> 
        </goals> 
     </execution> 
    </executions> 
</plugin> 

сборочно-war.xml

<assembly> 
    <id>war</id> 

    <formats> 
     <format>war</format> 
    </formats> 

    <includeSiteDirectory>false</includeSiteDirectory> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <fileSets> 
    ... 
    </fileSets> 
    <dependencySets> 
    </dependencySets> 
</assembly> 

Вот моя папка проекта. Папка «Война» выделена жирным шрифтом.

$ ls -l test-maven-play-plugin/ 
total 24 
drwxr-xr-x 5 angeloh staff 170 Jan 25 21:45 app 
[email protected] 1 angeloh staff 2962 Jan 25 23:58 assembly-war.xml 
drwxr-xr-x 6 angeloh staff 204 Jan 25 21:46 conf 
drwxr-xr-x 26 angeloh staff 884 Jan 25 22:42 lib 
[email protected] 1 angeloh staff 7380 Jan 26 00:05 pom.xml 
drwxr-xr-x 4 angeloh staff 136 Jan 26 00:04 precompiled 
drwxr-xr-x 5 angeloh staff 170 Jan 25 21:45 public 
drwxr-xr-x 9 angeloh staff 306 Jan 26 00:04 target 
drwxr-xr-x 6 angeloh staff 204 Jan 25 22:11 test 
drwxr-xr-x 3 angeloh staff 102 Jan 25 22:15 test-result 
drwxr-xr-x 2 angeloh staff 68 Jan 26 00:04 tmp 
drwxr-xr-x 3 angeloh staff 102 Jan 25 22:10 **war** 

---------------------- [ОБНОВЛЕНИЕ] ------------------ ----

Небольшой прогресс. Если бы я сделать эти изменения:

pom.xml

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    ...... 
    <configuration> 
     ...... 
     <outputDirectory>${basedir}/war</outputDirectory> 
    </configuration> 
    ...... 
</plugin> 

сборочно-war.xml

<assembly> 
    <id>war</id> 

    <formats> 
     <format>dir</format> 
    </formats> 
    ...... 
</assembly> 

Война содержание будет выводить на войну/тест-игры-1.0.0. Тем не менее, я хочу, чтобы это было прямо на войне, а не на войне/тестовом воспроизведении 1.0.0.

---------------------- [ДОПОЛНЕНО] ---------------------- -

Наконец, после внесения этих изменений, это работает для меня.

pom.xml

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    ...... 
    <configuration> 
     ...... 
     <outputDirectory>${basedir}</outputDirectory> 
     <finalName>war</finalName> 
    </configuration> 
    ...... 
</plugin> 
+0

Зачем вы это делаете? Тип проекта война охватывает большинство случаев. –

+0

Я редактирую причину вопроса. – angelokh

+0

Когда вы вызываете фазу пакета в военном проекте, сначала создается каталог с содержимым войны в целевом каталоге, а затем создается военный файл. Вы не можете использовать этот каталог? –

ответ

0

The Maven-плагин войны создает веб-приложение в каталог, в первую очередь. По умолчанию этот каталог - ${project.build.directory}/${project.build.finalName} (см. Свойство конфигурации webappDirectory).

Плагин maven-gae развертывается из распакованной войны. По умолчанию это тот же каталог. (См его свойство appDir конфигурации)

Таким образом, вы просто должны быть в состоянии выполнить:

mvn clean package gae:deploy 

Если у вас есть проблемы с этим, вы могли бы рассмотреть возможность использования войны: INPLACE цели, которая будет копировать файлы классы и ресурсы в src/main/webapp/WEB-INF/классы и зависимости в src/main/webapp/WEB-INF/lib.

+1

Ух, это не кажется правильным: если вы используете кучу наложений и исключает, вы увидите, что они появляются в webAppDirectory, но не в последней войне. –