2011-02-28 2 views
6

Мне что-то не хватает. Я искал и искал, и играл и переделывал, и я до сих пор не могу понять, как сделать следующее с Maven:Maven: скачать артефакт и его отпечатки в определенный каталог

Я хотел бы загрузить артефакт и все его зависимости (и транзитивные зависимости) от наших внутреннего сервера Nexus, в указанное пользователем местоположение. Идея здесь заключается в том, чтобы позволить человеку, который внедряет решение в производство, таким образом, чтобы они могли легко получить все файлы jar, которые им нужны в одном месте.

Существует зависимость: получить, и это близко, но не сигара. С зависимостью: get, все артефакты загружаются в локальный репозиторий mvn по каталогам в соответствии с каждым артефактом groupId и artifactId. Это НЕ то, что я хочу, потому что тогда вы должны тащиться вокруг всех этих каталогов, чтобы попасть в банки. Я хочу, чтобы все файлы загружались в один каталог, чтобы они находились в одном месте.

Тогда есть зависимость: копии-зависимости. Это снова делает то, что я хочу; он копирует все деления артефакта в цель/зависимость. Две проблемы с этим: 1) вам нужно иметь pom.xml; вы не можете указать произвольные координаты, как вы можете, с зависимостью: get и 2) зависимость: копии-копии не копируют главный артефакт в целевые/зависимые.

Должен быть лучший способ сделать это, но я не могу понять, где еще искать решение. Подводя итог, я хочу, чтобы у кого-то был задан набор координат maven (groupId: artifactId: version) и наш внутренний URL-адрес Nexus, и чтобы они загружали все с помощью одной команды в каталог по своему выбору.

+0

Можете ли вы создать проект, который использует их как зависимости, перемещает их и создает свой артефакт с этими банками? – corsiKa

+0

Я так думаю, но это не совсем правильно. Должен быть способ загрузить артефакт и его отпечатки напрямую, нет? – Steven

+0

Я полностью согласен. Это не кажется правильным. И последнее, чего хочет каждый, - это «что-то, что работает, пока мы не найдем лучший способ», потому что вы навсегда застрянете с клочем. Но если все остальное не работает ... :) – corsiKa

ответ

0

Если вы хотите дать кому-то набор координат maven, было бы лучше положить их в специальный pom.xml (вы должны записать их где угодно). Этот pom не является помпой вашего «главного артефакта», но имеет «главный артефакт» как зависимость. Тип упаковки может быть pom, так как этот проект не будет создавать какой-либо artifcat.

Тогда используйте имеющееся у вас решение dependency:copy-dependencies, и вы получите все необходимые вам зависимости. ИМХО - элегантное и простое решение. Я не знаю ничего лучше.

1

Используйте плагин сборки maven для упаковки дополнительной «банки с зависимостями» в ZIP-файл, который включает в себя все.

http://maven.apache.org/plugins/maven-assembly-plugin/descriptor-refs.html

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> 
    <!-- TODO: a jarjar format would be better --> 
    <id>jar-with-dependencies</id> 
    <formats> 
    <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <dependencySets> 
    <dependencySet> 
     <outputDirectory>/</outputDirectory> 
     <useProjectArtifact>true</useProjectArtifact> 
     <unpack>true</unpack> 
     <scope>runtime</scope> 
    </dependencySet> 
    </dependencySets> 
</assembly> 

Затем пользователь может просто запросить <type>zip</type>, в дополнение к регулярным «Maven координаты», чтобы получить почтовый файл со всеми зависимостями.

+0

+1 - Я сам использовал сам сборщик, чтобы упаковать JAR моего проекта с его зависимостями, когда мне нужно было распространять исполняемое настольное приложение; все зависимые JAR должны присутствовать на пути к классам. Он очень прост в настройке и имеет отличную документацию. –

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