Подключение в maven сторонней библиотеки

166
15 декабря 2017, 03:07

Вопрос, хочу добавить .jar библиотеку к maven проекту, чтобы потом jenkins собирался нормально.

Соответсвенно 2 вопроса:

  1. Читал статью https://habrahabr.ru/company/lanit/blog/323008/ maven скомпилировал, в pom.xml dependecy прописал, не совсем понял момент:

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

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

    Можете пожалуйста подсказать, на примере, что здесь написать - вроде сейчас работает, но поиск, как я понимаю, делает на компьютере с jenkins , т.е. в file:${project.basedir} мы указываем путь на локалку используемого компьютера.
    Как сделать чтобы он закачивал с другого компа?

  2. И отсюда вытекает второй вопрос - если нужна открытая для внутренней локалки папка с "репозиторием", ее можно расшарить и указать в <url></url> ?

Answer 1

Перед ответом хочу сказать, что единственное решение противоречит идеологии maven. Правильным решением будет установка твоей библиотеки в удаленный maven-репозиторий (возможно корпоративный/закрытый), что делается при помощи команды deploy.

А теперь о неправильном, но рабочем решении. В корне проекта, т.е. на одном уровне с папкой src создаешь папку (в примере это lib), в которую будут складироваться локальные библиотеки. Кладешь туда нужный тебе jar'ник. Далее делаешь dependecy со scope system. Примерно так

    <dependency>
        <groupId>ru.stackoverflow.com</groupId>
        <artifactId>megalib</artifactId>
        <version>${project.version}</version>
        <scope>system</scope>
        <systemPath>${basedir}/lib/megalib.jar</systemPath>
    </dependency>

Но тут есть два нюанса.

  1. Указанный scope официально объявлен как устаревший.
  2. Если в pom'нике есть хоть одна зависимость со scope как system, то этот проект не будет добавлять в зависимые от него проекты транзистивные зависимости.
Answer 2

выше предложенный вариант со скоупом систем имеет место быть, но ничто не мешает любую библиотеку инсталлировать в локальный репозитарии с реальными groupId, artifactId, version или выдуманными.. для вышеприведенного артефакта (с выдуманной версией 1.0.0) команда в консоли будет выглядеть так

mvn install:install-file -DgroupId=ru.stackoverflow.com -DartifactId=megalib -Dversion=1.0.0 -Dfile=megalib.jar -Dpackaging=jar -DgeneratePom=true 

разумеется, чтобы это правильно отработало нужно, чтобы в path был прописан путь до maven'а и запускать нужно из того каталога, где находится megalib.jar

затем в pom файл вставляем зависимость

<dependency>
    <groupId>ru.stackoverflow.com</groupId>
    <artifactId>megalib</artifactId>
    <version>1.0.0.</version> 
</dependency>

и наслаждаемся

READ ALSO
Как проверить, входят ли все элементы одного словаря в другой?

Как проверить, входят ли все элементы одного словаря в другой?

Как можно проверить, содержит ли словарь map1 все пары <Key, Value>, содержащиеся в map2?

138
Почему не инжектится переменная Dagger2

Почему не инжектится переменная Dagger2

Вот сделал имплементацию дагера и вроде как все работет, вот только context переменная не хочет инжектиться

211
Заменить итератор циклом

Заменить итератор циклом

Подскажите пожалуйста, как переписать фрагмент кода, используя вместо итератора цикл:

155
Java Swing: длина \t в JTextPane

Java Swing: длина \t в JTextPane

Делаю редактор кода The C language на платформе Java SwingКак изменить длину символа табуляции в JTextPane с 8 до 4 или 2

164