Ищите ярлык Maven - включая файл jar в сборке Maven - PullRequest
1 голос
/ 16 августа 2011

Я унаследовал проект Maven.Я просто использую его как инструмент для сборки, и я хотел бы как можно меньше мешать.Я должен сделать небольшое дополнение к одному из файлов Java, и это дополнение требует, чтобы я включил новый jar в путь сборки.Как мне сказать: вот баночка, просто используй ее.Он не должен быть версионным, зависимым, загруженным или чем-то еще, просто используйте его.Любая помощь будет оценена.

РЕДАКТИРОВАТЬ : я нашел это , который на самом деле работает (!).Если кто-то, кто знает о таких вещах, мог прочитать этот ответ и, если он кажется достаточно правильным, закройте этот вопрос как дубликат.

РЕДАКТИРОВАТЬ : Нет, я неверно истолковал свои результаты.Кажется, что не работает.

Ответы [ 3 ]

3 голосов
/ 16 августа 2011

Безусловно, лучший способ управления вашими зависимостями с помощью maven - это получить их из репозитория, но на ум приходят четыре общих варианта, от наиболее желательного до минимального:

  1. Если jar - это обычная сторонняя библиотека, вы почти наверняка найдете ее в каком-нибудь хранилище. Вам просто нужно добавить элемент <dependency> и, возможно, <repository>, чтобы он знал, откуда получить зависимость.
  2. Самодельный кувшин, недоступный ни в одном репо, следует развернуть в локальном репозитории, например Nexus , который доступен для всей вашей команды / компании. Затем добавьте зависимость к вашему проекту, как в варианте 1. Таким образом, с ней нужно справиться только один раз, и все остальные могут получить банку с помощью обычного механизма Maven.
  3. Чтобы решить проблему только локально и не использовать повторно артефакт, вы можете установить его в локальный репозиторий (то есть в локальный кеш в ~ / .m2 / repository), используя install: install-file гол.
  4. Наконец, и наименее желательно, вы можете использовать системную зависимость . Это означает, что у вас есть файл jar, доступный где-то в вашей файловой системе, задайте для элемента <scope> вашего <dependency> значение «system» и добавьте элемент <systemPath>, который содержит полный путь к рассматриваемому файлу.

Редактировать: Поскольку вариант 4 кажется вам подходящим, просто поместите флягу в свой проект и передайте ее в систему управления версиями. Затем, предположив, что jar находится в lib / foo.jar в вашем проекте, добавьте это в зависимости вашего POM:

<dependency>
    <groupId>some-group</groupId>
    <artifactId>some-artifact</artifactId>
    <version>1.2.3.4</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/foo.jar</systemPath>
</dependency>

Это все из памяти, но звучит правильно.

1 голос
/ 16 августа 2011

Вот несколько похожих ответов: Maven: ведение зависимых фляг в управлении версиями проекта

Я бы не рекомендовал использовать install: install-file из POM - если это разовое требование, лучше использовать его из командной строки и задокументировать его как подготовительный шаг. Тем не менее, создание автономной сборки или предоставление хранилища с необходимыми артефактами, безусловно, являются лучшими вариантами.

0 голосов
/ 16 августа 2011

Вот как это сделать. Создайте отдельный проект Maven, вдохновленный следующим pom.xml.

<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>net.dwst</groupId>
    <artifactId>MavenMissingJars</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>

    <name>Maven Missing Jars</name>

    <build>

        <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-install-plugin</artifactId>
                <version>2.3</version>
                <executions>
                    <execution>
                        <id>dProguard-4.6</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>install-file</goal>
                        </goals>
                        <inherited>false</inherited>
                        <configuration>
                            <file>toinstall/4.6/proguard.jar</file>
                            <groupId>net.sf.proguard</groupId>
                            <artifactId>proguard</artifactId>
                            <version>4.6</version>
                            <packaging>jar</packaging>
                            <generatePom>true</generatePom>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

        </plugins>

    </build>

</project>

Предполагая, что существует каталог /toinstall/4.6/ относительно вашего pom.xml и что там находится jar с именем proguard.jar, вызов этого плагина скопирует jar из вашего локального каталога в локальный репозиторий maven.

Это должно быть выполнено один раз, поэтому предпочтительнее иметь отдельный небольшой проект maven для добавления отсутствующих банок.

Затем добавьте зависимость в свой проект, используя координаты (артефакт, версия и упаковка), которые вы определили в приведенном выше pom.xml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...