как добавить зависимость градиентов «файлов» в проекте pom.xml (maven)? [Дубликат]

Еще один из них - MapBox

http://mapbox.com/

. В их видеоролике было показано, что в качестве пользователя показано четыре пользователя.

195
задан Bozho 9 February 2010 в 15:36
поделиться

8 ответов

Я хочу, чтобы jar находился в директории 3rdparty в исходном элементе управления и ссылался на него по относительному пути из файла pom.xml.

Если вы действительно этого хотите (понимаете, если вы не можете использовать корпоративный репозиторий), то мой совет будет заключаться в использовании «репозитория файлов», который является локальным для проекта, и не использовать зависимую область system. Следует избегать области system, такие зависимости не работают хорошо во многих ситуациях (например, в сборке), они вызывают больше проблем, чем преимуществ.

Итак, вместо этого, объявите репозиторий локальным для проекта:

<repositories>
  <repository>
    <id>my-local-repo</id>
    <url>file://${basedir}/my-repo</url>
  </repository>
</repositories>

Установите свою стороннюю библиотеку там, используя install:install-file с помощью localRepositoryPath :

mvn install:install-file -Dfile=<path-to-file> -DgroupId=<myGroup> \ 
                         -DartifactId=<myArtifactId> -Dversion=<myVersion> \
                         -Dpackaging=<myPackaging> -DlocalRepositoryPath=<path>

Обновление: Похоже, что install:install-file игнорирует localRepositoryPath при использовании версии 2.2 плагина. Однако он работает с версией 2.3 и более поздними версиями плагина. Поэтому используйте полное имя плагина для указания версии:

mvn org.apache.maven.plugins:maven-install-plugin:2.3.1:install-file \
                         -Dfile=<path-to-file> -DgroupId=<myGroup> \ 
                         -DartifactId=<myArtifactId> -Dversion=<myVersion> \
                         -Dpackaging=<myPackaging> -DlocalRepositoryPath=<path>

Документация maven-install-plugin

Наконец, объявите ее как любой другая зависимость (но без области system):

<dependency>
  <groupId>your.group.id</groupId>
  <artifactId>3rdparty</artifactId>
  <version>X.Y.Z</version>
</dependency>

Это ИМХО лучшее решение, чем использование области system, поскольку ваша зависимость будет рассматриваться как хороший гражданин (например, это будет включены в сборку и т. д.).

Теперь я должен упомянуть, что «правильный путь» для решения этой ситуации в корпоративной среде (возможно, не так) должен был бы использовать корпоративный репозиторий.

301
ответ дан Nathan 26 August 2018 в 12:56
поделиться
  • 1
    «Действительно, это лучшее решение, чем использование области системы». - действительно (+1) – Bozho 9 February 2010 в 18:07
  • 2
    Это отличная идея, но на Maven 2.2.1 плагин установки, кажется, игнорирует localRepositoryPath ... – Jake 27 May 2010 в 02:32
  • 3
    Зачем объявлять местное репо? Почему бы просто не позволить этому перейти в ~ / .m2 / с остальными. – Leif Gruenwoldt 3 August 2012 в 19:46
  • 4
    @ leif81 Поскольку тогда репо и библиотеки проверяются в репозиторий SCM - & gt; Любой, кто выполняет проверку исходного кода, имеет все необходимое для создания копии библиотеки / приложения. – Darth Android 20 November 2012 в 21:30
  • 5
    У меня была такая же проблема, как @lemon, которую я исправил, выполнив basedir/./my-local-repo с помощью одного .. – Brian 13 September 2013 в 07:29

Одно небольшое дополнение к решению, отправленное Pascal

Когда я следил за этим маршрутом, я получил ошибку в maven при установке ojdbc jar.

[INFO] --- maven-install-plugin:2.5.1:install-file (default-cli) @ validator ---
[INFO] pom.xml not found in ojdbc14.jar

После добавления -DpomFile , проблема была решена.

$ mvn install:install-file -Dfile=./lib/ojdbc14.jar -DgroupId=ojdbc \
   -DartifactId=ojdbc -Dversion=14 -Dpackaging=jar -DlocalRepositoryPath=./repo \
   -DpomFile=~/.m2/repository/ojdbc/ojdbc/14/ojdbc-14.pom
24
ответ дан Community 26 August 2018 в 12:56
поделиться
  • 1
    Очень интересно, спасибо за это! – Seb P 11 February 2014 в 10:53
  • 2
    Это единственное, что работало для моего мультимодульного проекта. Локальный & lt; репозиторий & gt; подход по неизвестной причине не сработал. Так что спасибо! – Lonzak 6 October 2017 в 17:11

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

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

3
ответ дан Dean Hiller 26 August 2018 в 12:56
поделиться
  • 1
    Не могли бы вы привести пример, как вы это сделали? – Thomas 3 September 2013 в 09:25

В принципе, добавьте это в pom.xml:

...

<repositories>
   <repository>
       <id>lib_id</id>
       <url>file://${project.basedir}/lib</url>
   </repository>
</repositories>

...

<dependencies>
  ...
  <dependency>
      <groupId>com.mylibrary</groupId>
      <artifactId>mylibraryname</artifactId>
      <version>1.0.0</version>
  </dependency>
  ...
</dependencies>
4
ответ дан Fulgencio Jara 26 August 2018 в 12:56
поделиться

Я ранее написал о шаблоне для этого.

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

9
ответ дан gunr2171 26 August 2018 в 12:56
поделиться

Использование области system. ${basedir} - это каталог вашего pom.

<dependency>
    <artifactId>..</artifactId>
    <groupId>..</groupId>
    <scope>system</scope>
    <systemPath>${basedir}/lib/dependency.jar</systemPath>
</dependency>

Однако рекомендуется установить вашу банку в репозиторий, а не передавать ее SCM - после этого все, что maven пытается устранить.

100
ответ дан Hendy Irawan 26 August 2018 в 12:56
поделиться
  • 1
    Систему охвата следует избегать везде, где это возможно. Установка JAR в репозитории - лучшее решение ... – Gandalf StormCrow 9 February 2010 в 15:39
  • 2
    да, если это возможно. он прямо сказал, что не хочет помещать его в репозиторий. Я добавил комментарий, чтобы указать, что это не очень хорошая практика. Но это действительно работает. – Bozho 9 February 2010 в 15:41
  • 3
    groovy, вы решение является наиболее приемлемым до сих пор, я думаю .. Я полностью неправильно понял вопрос – ant 9 February 2010 в 15:43
  • 4
    Да - сам вопрос исключает лучший ответ. Помещение всего в ваш сервер управления версиями single имеет мало общего с «построением из коробки» ;; скорее всего, все должно быть «контролировано». Сделайте регистрацию pom's & amp; settings.xml (указывая на внутреннее репо) и используйте two серверы для вашего проекта: (1) контроль источника, (2) созданный контроль артефакта. Он делает так же проверку смысла в баночках, как и проверку в dll (мой старый корпус фактически сделал check-in jars & amp; lib.a / .so / .dll. Наш сервер p4 был настолько медленным после этого, некоторые тайно использовали hg для изо дня в день. Проблема решена? – michael 27 May 2011 в 21:57
  • 5
    любой способ указать каталог, который содержит jars вместо этого, поэтому нам не нужно добавлять все так же, как град может это сделать? – Dean Hiller 4 January 2013 в 21:46

Это работает для меня: предположим, что у меня есть эта зависимость

<dependency>
    <groupId>com.company.app</groupId>
    <artifactId>my-library</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/my-library.jar</systemPath>
</dependency>

Затем добавьте путь к вашей системной зависимости вручную, как это

<Class-Path>libs/my-library-1.0.jar</Class-Path>

Full config:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <archive>
            <manifestEntries>
                <Build-Jdk>${jdk.version}</Build-Jdk>
                <Implementation-Title>${project.name}</Implementation-Title>
                <Implementation-Version>${project.version}</Implementation-Version>
                <Specification-Title>${project.name} Library</Specification-Title>
                <Specification-Version>${project.version}</Specification-Version>
                <Class-Path>libs/my-library-1.0.jar</Class-Path>
            </manifestEntries>
            <manifest>
                <addClasspath>true</addClasspath>
                <mainClass>com.company.app.MainClass</mainClass>
                <classpathPrefix>libs/</classpathPrefix>
            </manifest>
        </archive>
    </configuration>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.5.1</version>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.build.directory}/libs/</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>
5
ответ дан RufusSC2 26 August 2018 в 12:56
поделиться

Вы можете использовать eclipse для создания исполняемого файла Jar: Export / Runnable Jar

0
ответ дан user1942990 26 August 2018 в 12:56
поделиться
  • 1
    Не уверен, что это ответ на вопрос. У него уже есть файл как банку. – Johannes Jander 5 January 2016 в 15:33
  • 2
    Eclipse поддерживает uberjar или затененную банку, поэтому ее решение, но не для maven – Alex Lehmann 27 April 2017 в 09:01
Другие вопросы по тегам:

Похожие вопросы: