Как добавить локальные файлы JAR в проект Maven? - PullRequest
966 голосов
/ 10 февраля 2011

Как добавить локальные файлы JAR (еще не являющиеся частью репозитория Maven) непосредственно в исходные файлы моего проекта?

Ответы [ 27 ]

7 голосов
/ 10 февраля 2011

Конечно, вы можете добавить банки в эту папку. Но, может быть, это не то, чего вы хотите достичь ...

Если вам нужны эти jar-файлы для компиляции, проверьте следующий вопрос: Могу ли я добавить jar-файлы в maven 2 buildpath, не устанавливая их?

Кроме того, прежде чем кто-либо предложит это, НЕ используйте системную область.

6 голосов
/ 30 ноября 2017

командная строка:

mvn install:install-file -Dfile=c:\kaptcha-{version}.jar -DgroupId=com.google.code
-DartifactId=kaptcha -Dversion={version} -Dpackaging=jar
4 голосов
/ 19 июня 2017

Еще один интересный случай, когда вы хотите иметь в своем проекте приватные баночки maven. Возможно, вы захотите сохранить возможности Maven для разрешения транзитивных зависимостей. Решение довольно простое.

  1. Создать папку libs в вашем проекте
  2. Добавьте следующие строки в ваш файл pom.xml

    <properties><local.repository.folder>${pom.basedir}/libs/</local.repository.folder>
    </properties>
    
    <repositories>
       <repository>
            <id>local-maven-repository</id>
            <url>file://${local.repository.folder}</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
       </repository>
    </repositories>
    
  3. Откройте папку .m2 / repository и скопируйте структуру каталога проекта, который вы хотите импортировать, в папку libs .

например. Предположим, вы хотите импортировать зависимость

<dependency>
    <groupId>com.mycompany.myproject</groupId>
    <artifactId>myproject</artifactId>
    <version>1.2.3</version>
</dependency>

Просто зайдите в .m2 / repository , и вы увидите следующую папку

ком / MyCompany / MyProject / 1.2.3

Скопируйте все в вашу папку libs (опять же, включая папки в .m2 / repository ), и все готово.

3 голосов
/ 10 февраля 2011

Предпочтительным способом будет создание собственного удаленного репозитория.

См. здесь для получения подробной информации о том, как это сделать.Загляните в раздел « Загрузка в удаленный репозиторий ».

2 голосов
/ 04 ноября 2016

Это короткий синтаксис для более новых версий:

mvn install:install-file -Dfile=<path-to-file>

Работает, когда JAR был построен Apache Maven - самый распространенный случай. Затем он будет содержать файл pom.xml в подпапке каталога META-INF, который будет читаться по умолчанию.

Источник: http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html

2 голосов
/ 12 февраля 2016

Я хочу поделиться кодом, где вы можете загрузить папку, полную банок. Это полезно, когда у провайдера нет общедоступного репозитория, и вам нужно добавить множество библиотек вручную. Я решил создать .bat вместо вызова напрямую maven, потому что это может быть из-за нехватки памяти. Он был подготовлен для среды Windows, но его легко адаптировать к ОС Linux:

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.jar.Attributes;
import java.util.jar.JarFile;
import java.util.jar.Manifest;

public class CreateMavenRepoApp {

    private static final String OCB_PLUGIN_FOLDER = "C://your_folder_with_jars";

    public static void main(String[] args) throws IOException {

    File directory = new File();
    //get all the files from a directory
    PrintWriter writer = new PrintWriter("update_repo_maven.bat", "UTF-8");
    writer.println("rem "+ new Date());  
    File[] fList = directory.listFiles();
    for (File file : fList){
        if (file.isFile()){               
        String absolutePath = file.getAbsolutePath() ;
        Manifest  m = new JarFile(absolutePath).getManifest();
        Attributes attributes = m.getMainAttributes();
        String symbolicName = attributes.getValue("Bundle-SymbolicName");

        if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject")) {
            String[] parts =symbolicName.split("\\.");
            String artifactId = parts[parts.length-1];
            String groupId = symbolicName.substring(0,symbolicName.length()-artifactId.length()-1);
            String version = attributes.getValue("Bundle-Version");
            String mavenLine= "call mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -Dfile="+ absolutePath+" -DgroupId="+ groupId+" -DartifactId="+ artifactId+" -Dversion="+ version+" -Dpackaging=jar ";
            writer.println(mavenLine);          
        }

        }
    }
    writer.close();
    }

}

После запуска этого основного из любой IDE запустите update_repo_maven.bat.

2 голосов
/ 22 марта 2015

Также взгляните на ...

<scope>compile</scope>

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

1 голос
/ 04 февраля 2017

В вашем локальном хранилище вы можете установить jar, введя команды

 mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \
-DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>

Перейдите по этой полезной ссылке , чтобы сделать то же самое с веб-сайта mkyoung.Вы также можете проверить Maven Guide для того же

1 голос
/ 11 июня 2018

Я думаю, что лучшим решением для этой проблемы является использование maven-install-plugin для автоматической установки файлов во время установки. Вот как я настроил его для своего проекта.

Сначала добавьте путь (где вы храните локальные файлы .jars) в качестве свойства.

<properties>
    <local.sdk>/path/to/jar</local.sdk>
</properties>

Затем под plugins добавьте плагин для установки jar-файлов при компиляции.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <version>2.5.2</version>
    <executions>
        <execution>
            <id>1</id>
            <phase>initialize</phase>
            <goals>
                <goal>install-file</goal>
            </goals>
            <configuration>
                <groupId>com.local.jar</groupId> 
                <artifactId>appengine-api</artifactId>
                <version>1.0</version>
                <packaging>jar</packaging>
                <file>${local.sdk}/lib/impl/appengine-api.jar</file>
            </configuration>
        </execution>
        <execution>
            <id>appengine-api-stubs</id>
            <phase>initialize</phase>
            <goals>
                <goal>install-file</goal>
            </goals>
            <configuration>
                <groupId>com.local.jar</groupId>
                <artifactId>appengine-api-stubs</artifactId>
                <version>1.0</version>
                <packaging>jar</packaging>
                <file>${local.sdk}/lib/impl/appengine-api-stubs.jar</file>
            </configuration>
        </execution>
    </executions>
</plugin>

Наконец, в зависимости, вы можете добавить банки

<dependency>
    <groupId>com.local.jar</groupId>
    <artifactId>appengine-api</artifactId>
    <version>1.0</version>
</dependency>

<dependency>
    <groupId>com.local.jar</groupId>
    <artifactId>appengine-api-stubs</artifactId>
    <version>1.0</version>
    <scope>test</scope>
</dependency>

При такой настройке проекта проект будет продолжаться, даже если вы перенесете его на другой компьютер (учитывая, что в нем есть все файлы JAR по пути, указанному в свойстве local.sdk).

Для groupId используйте уникальное имя только для того, чтобы убедиться в отсутствии конфликтов.

Теперь, когда вы mvn install или mvn test локальные банки будут добавлены автоматически.

1 голос
/ 14 сентября 2017

По какой-то причине в веб-приложении, которое я поддерживаю, ни решение Алирезы Фаттахи , ни решение JJ Roman не работали корректно. В обоих случаях компиляция идет хорошо (она видит банку), но упаковка не включает банку внутри войны.

Единственный способ, которым мне удалось заставить его работать, - это поставить банку на /src/main/webapp/WEB-INF/lib/ и затем объединить ее с решением Фаттахиса или Романа.

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