maven build с войной и флягой выдвигает странные артефакты во внутреннее репо - PullRequest
7 голосов
/ 24 сентября 2011

У меня есть проект maven, в котором я создаю файл войны, но я также использую maven-jar-plugin для создания jar-файла в том же проекте.

- DISCLAIMER-- Я знаю, что это не «правильный» способ сделать это, но есть некоторые другие проблемы, возникающие при разделении этого на jar-проект и отдельный военный проект с некоторыми сторонними плагинами.

Я вижу странное поведение с этим. Ниже приведена структура моего проекта.

warproject
-src
--main
---webapp
----WEB-INF
-----web.xml
---java
----com.test.myclass
-----test.java
-pom.xml

Когда я строю этот проект, я получаю правильный файл war и jar в моей целевой директории, однако в моем локальном репозитории .m2 происходит что-то странное. Установленный файл war называется корректно war-jar-0.0.1-SNAPSHOT.war, однако содержимое этого файла является содержимым моего файла jar. Это также происходит, если я делаю обратное. то есть, если я настрою свой проект на сборку jar и использую maven-war-plugin для построения войны, архивы в моей целевой директории верны, но в моем локальном репозитории есть jar-файл с содержимым моего war-файла. Ниже файл 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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.test</groupId>
  <artifactId>war-jar</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <jarName>${project.artifactId}-${project.version}-client</jarName>
                </configuration>
                <executions>
                    <execution>
                        <id>make-a-jar</id>
                        <phase>package</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>src/main/java</directory>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
    </build>

</project>

Вывод консоли для этого следующий, он показывает, что jar загружается как война.

Installing /home/me/work/src/war-jar/target/war-jar-0.0.1-SNAPSHOT.jar to /home/me/.m2/repository/com/test/war-jar/0.0.1-SNAPSHOT/war-jar-0.0.1-SNAPSHOT.war

- ОБНОВЛЕНИЕ Я получил это сработало, но мне пришлось изменить фазу выполнения «make-a-jar» для установки из пакета. Это работает отлично, и правильные артефакты загружены, но я все еще не понимаю, почему это имеет значение. Очевидно, что артефакт создается на другой фазе жизненного цикла, и, следовательно, его нет во время первоначальной установки для проекта, поэтому неверный файл не загружен. Это похоже на «взлом», и я хотел бы понять, почему так себя ведет.

Ответы [ 3 ]

4 голосов
/ 03 ноября 2011

Я отвечаю на свои вопросы, так как я не получил никакой информации, которая помогла бы мне найти решение. Смотрите мое обновление на мой оригинальный вопрос для моего решения.

4 голосов
/ 16 ноября 2012

Это тоже работает,

<plugin>
  <groupId>org.apache.maven.plugins</groupId> 
  <artifactId>maven-war-plugin</artifactId>
  <executions>
    <execution>
      <!--
        When also running maven-jar-plugin correct maven-war-plugin's ID
        from "default-war" to "default-jar"
      -->
      <id>default-jar</id>
      <phase>package</phase>
      <goals><goal>war</goal></goals>
      <configuration>
      ...
      </configuration>
    </execution>
  </executions>
</plugin>

См. http://maven.apache.org/guides/mini/guide-default-execution-ids.html

Чтобы выяснить, почему ваш проект ведет себя как есть, проанализируйте Эффективное ПОМ.

2 голосов
/ 24 сентября 2011

Вам нужно указать конфигурации для maven-install-plugin для достижения этой цели. Добавьте следующую конфигурацию плагина под <build>.

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-install-plugin</artifactId>
            <executions>
                <execution>
                    <phase>install</phase>
                    <goals>
                        <goal>install-file</goal>
                    </goals>
                    <configuration>
                        <packaging>jar</packaging>
                        <artifactId>${project.artifactId}</artifactId>
                        <groupId>${project.groupId}</groupId>
                        <version>${project.version}</version>
                        <file>
                            ${project.build.directory}/${project.artifactId}-${project.version}.jar
                        </file>
                    </configuration>
                </execution>
            </executions>
        </plugin>
...