2015-12-10 3 views
1

У меня есть проект maven, который состоит из одного ZIP-файла. Я хочу экспортировать этот zip-файл непосредственно в качестве результата артефакта пакета maven/install. То есть единственным вмешательством maven было бы прямое получение ZIP-файла в качестве артефакта.Прямая копия Maven как артефакт

Я пытался использовать Maven Assembly, но это создает файл ZIp, содержащий мой ZIP-файл. Я хочу избежать этой избыточности.

Возможно ли это?

+0

Я не понимаю. Если у вас есть проект Maven, выход которого является ZIP (что может быть сделано только с сборками), разве вы уже не достигли своей цели? Или у вас есть POM и zip в подпапке, и вам нужна помощь в составлении POM, чтобы он мог быть установлен в вашем локальном репозитории? – Daniel

+0

Что вы сказали последним, этот модуль состоит только из zip-файла, созданного в другом месте, и помещается в подпапку. Мне нужен мой pom, чтобы просто поместить этот zip-файл в репозиторий nexus. –

+0

Хорошо, Nexus repo? Должно ли это делать 'deploy', а не' install'? – Daniel

ответ

3

Простейшим решением является использование build-helper-maven-plugin, где вы можете прикрепить соответствующий zip-файл к артефакту pom. Я бы предложил установить упаковку на pom, но добавить build-helper-maven-plugin в install или deploy. Конфигурация может выглядеть так:

<project> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>build-helper-maven-plugin</artifactId> 
     <version>1.10</version> 
     <executions> 
      <execution> 
      <id>attach-artifacts</id> 
      <phase>package</phase> 
      <goals> 
       <goal>attach-artifact</goal> 
      </goals> 
      <configuration> 
       <artifacts> 
       <artifact> 
        <file>some file</file> 
        <type>extension of your file </type> 
        <classifier>optional</classifier> 
       </artifact> 
       ... 
       </artifacts> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
</project> 
+0

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

+0

Это самое элегантное решение, на которое я думаю, хотя мне было проще применить решение Даниэля –

+0

Я теперь нерешительно отношусь к тому, какой из них следует отметить как ответ: P –

0

Вы можете использовать mvn install:install-file -Dfile=yourArtifact.zip ..., чтобы установить его в локальный репозиторий maven. Проверьте documentation.

+0

Спасибо, но это не делает это для меня, мне нужно это для обычной установки maven.Этот проект установлен сервером Jenkins, для которого у меня нет контроля, поэтому я не могу настроить цели и параметры Maven, подобные этому –

1

Этот POM должен сделать трюк. Пожалуйста, помните, что это не типичный прецедент для Maven.

Как вы указали, сборка не будет делать это из коробки, главным образом потому, что директива сборки не содержит <unpack>true</unpack>. Поэтому вам нужна помощь. Для этого я собираюсь использовать плагин antrun.

ПОМ:

<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>org.example</groupId> 
    <artifactId>deploy-zip</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>pom</packaging> 

    <name>deploy-zip</name> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-antrun-plugin</artifactId> 
     <version>1.8</version> 
     <executions> 
      <execution> 
      <id>unpack-zip</id> 
      <phase>prepare-package</phase> 
      <goals> 
       <goal>run</goal> 
      </goals> 
      <configuration> 
       <target> 
       <unzip src="YOUR_ZIP" dest="${project.build.directory}/temp" /> 
       </target> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <version>2.5.3</version> 
     <executions> 
      <execution> 
      <id>bundle-zip</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
      </execution> 
     </executions> 
     <configuration> 
      <descriptors> 
      <descriptor>${project.basedir}/src/main/assembly/my-zip.xml</descriptor> 
      </descriptors> 
      <appendAssemblyId>true</appendAssemblyId> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    <distributionManagement> 
    <repository> 
     <id>nexus</id> 
     <name>Nexus</name> 
     <url>YOUR_NEXUS_URL</url> 
    </repository> 
    <snapshotRepository> 
     <id>nexus</id> 
     <name>Nexus</name> 
     <url>YOUR_NEXUS_URL</url> 
    </snapshotRepository> 
    </distributionManagement> 
</project> 

И дескриптор сборки (предположительно в src/main/assembly):

<assembly 
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> 
    <id>my-zip</id> 
    <formats> 
    <format>zip</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <fileSets> 
    <fileSet> 
     <directory>${project.build.directory}/temp</directory> 
     <outputDirectory>.</outputDirectory> 
    </fileSet> 
    </fileSets> 
</assembly> 

Если вы делаете mvn deploy и учетные данные в порядке, то файл должен быть загружен в хранилище.

Если вы хотите, чтобы другие зависят от этого, используйте:

<dependency> 
    <groupId>org.example</groupId> 
    <artifactId>deploy-zip</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <classifier>my-zip</classifier> 
    <type>zip</type> 
</dependency> 

Я надеюсь, что это работает для вас.

+0

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

Смежные вопросы