Как развернуть zip-файл, созданный с помощью maven-antrun-plugin? - PullRequest
7 голосов
/ 21 июня 2011

Я использую плагин maven-antrun-для работы с Ant, что в итоге приводит к созданию zip-файла. Я хотел бы развернуть zip-файл на нашем сервере maven (Artifactory). Maven-antrun-part работает так, как задумано, и успешно создает zip-файл; однако развертывание завершается неудачно со следующим сообщением об ошибке:

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.6:deploy (default-deploy) on project projectname: The packaging for this project did not assign a file to the build artifact

Мой файл 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.company.division</groupId>
    <artifactId>projectname</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <parent>
        <groupId>com.company.product</groupId>
        <artifactId>parentproject</artifactId>
        <version>1.0.0</version>
    </parent>

    <distributionManagement>
        <snapshotRepository>
            <id>artifactory</id>
            <name>artifactory-snapshots</name>
            <url>http://localartifactoryserver/artifactory/libs-snapshot-local</url>
            <uniqueVersion>false</uniqueVersion>
        </snapshotRepository>
    </distributionManagement>

    <dependencies>
        <!-- Some dependencies... -->
    </dependencies>

    <build>
        <plugins>
            <!-- Compiler plugin -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <encoding>UTF8</encoding>
                    <optimize>true</optimize>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.6</version>
                <executions>
                    <execution>
                        <id>compile</id>
                        <phase>compile</phase>
                        <configuration>
                            <target>
                                <!-- Do lots of other stuff with Ant. -->

                                <!-- Create a zip file. -->
                                <zip basedir="mydir" destfile="${WORKSPACE}/MyZip.zip" />
                            </target>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <groupId>${project.groupId}</groupId>
                    <artifactId>${project.artifactId}</artifactId>
                    <version>${project.version}</version>
                    <packaging>zip</packaging>
                    <file>MyZip.zip</file>
                    <url>${project.distributionManagement.snapshotRepository.url}</url>
                </configuration>
              </plugin>
        </plugins>
    </build>
</project>

Когда я вызываю это (из родительского POM) с помощью mvn -U -pl projectname clean deploy, я получаю вышеупомянутую ошибку на этапе развертывания. Кто-нибудь знает, что я делаю неправильно или как я могу это исправить?

Ответы [ 3 ]

10 голосов
/ 22 июня 2011

Решение, которое сработало для меня (я не уверен, что оно идеально, кажется довольно хакерским), состояло в том, чтобы переключиться на цель deploy:deploy-file:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-deploy-plugin</artifactId>
    <version>2.6</version>
    <goals>
        <goal>deploy-file</goal>
    </goals>
    <configuration>
        <repositoryId>artifactory</repositoryId>
        <packaging>zip</packaging>
        <generatePom>true</generatePom>
        <url>${project.distributionManagement.snapshotRepository.url}</url>
        <artifactId>${project.artifactId}</artifactId>
        <groupId>${project.groupId}</groupId>
        <version>${project.version}</version>
        <file>${WORKSPACE}/MyZip.zip</file>
    </configuration>
</plugin>

и вызвать ее явно:

mvn -U -X -pl projectname clean install deploy:deploy-file
2 голосов
/ 18 января 2019

Решение, сработавшее для меня, заключается в добавлении тега <attachartifact> после создания zip, заполненного тем же путем и именем файла zip. Так что-то вроде:

    <executions>
        <execution>
            <id>zip-artifacts</id>
            <phase>package</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <target>
                    <zip destfile="${project.build.directory}/MyStuff-${project.version}.zip" update="true" comment="This is my comment...">
                        <fileset dir="${project.build.directory}/MyStuff" />
                    </zip>
                    <attachartifact file="${project.build.directory}/MyStuff-${project.version}.zip" type="zip" />
                </target>
            </configuration>
        </execution>
    </executions>

Помните, что zip-файл должен существовать, в противном случае attachartifact возвращает ошибку «файл не существует» (во избежание ошибок используйте whenempty="create" в теге).

1 голос
/ 17 июля 2018

При поиске способа добавления комментария к zip-файлу я нашел этот вопрос. Развертывание работало нормально, но у него были проблемы с выпуском maven для отправки в нексус. Приведенное ниже решение решило мою проблему, я сделал пустую сборку zip и затем просто заменил ее zip-файлом из задачи ant, что позволило мне добавить комментарий к zip-файлу. Таким образом, артефакт генерируется и не является транзитивным.

<?xml version="1.0" encoding="UTF-8"?>
<assembly>
<id>${project.build.finalName}</id>
<formats>
    <format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>

<fileSets>
    <fileSet>
        <directory>${project.build.directory}/MyStuff/emptydir</directory>
        <outputDirectory></outputDirectory>
        <useDefaultExcludes>true</useDefaultExcludes>
    </fileSet>
</fileSets>

        <plugin>
            <!--                 make an assembly (zip the LxBase) for the distribuition -->
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
                <execution>
                    <id>docs-assembly</id>
                    <phase>package</phase>
                    <configuration>
                        <appendAssemblyId>false</appendAssemblyId>
                        <descriptors>
                            <descriptor>src/main/assembly/assemble.xml</descriptor>
                        </descriptors>
                    </configuration>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.8</version>
            <executions>
                <execution>
                    <id>zip-artifacts</id>
                    <phase>package</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                    <configuration>
                        <target>
                            <zip destfile="${project.build.directory}/MyStuff-${project.version}.zip" update="true" comment="This is my comment...">
                                <fileset dir="${project.build.directory}/MyStuff" />
                            </zip>
                        </target>
                    </configuration>
                </execution>
            </executions>
        </plugin>
...