Maven: лучший способ связать пользовательский внешний JAR с моим проектом?



Это моя первая пара дней обучения Maven, и я все еще борюсь с основами. У меня есть внешний .jar-файл (недоступный в общедоступных репозиториях), который мне нужно ссылаться в моем проекте, и я пытаюсь выяснить, какой мой лучший вариант.



это небольшой масштабный проект без центрального репозитория для библиотек, поэтому он должен быть либо локальным репозиторием (каким-то образом добавленным в систему управления версиями, не знаю, должен ли он работать таким образом?) или .фляги должны быть сохранены на диске вне любого формального репозитория.



1), что мой лучший вариант для добавления .jar-файл для ссылок на мой проект с maven, учитывая, что я хочу, чтобы и проект, и библиотека находились в системе управления версиями?



2) я все еще не могу заставить Eclipse видеть зависимость. Я вручную добавил его в раздел pom, и он отлично отображается в списке зависимостей в m2eclipse. компиляция mvn и пакет mvn завершаются успешно, но запуск программы приводит в:



Exception in thread "main" java.lang.Error: Unresolved compilation problems:
LibraryStuff cannot be resolved to a type


это после редактирования POM как:



<dependency>
<groupId>stuff</groupId>
<artifactId>library</artifactId>
<version>1.0</version>
<systemPath>${lib.location}/MyLibrary.jar</systemPath>
<scope>system</scope>
</dependency>


должен ли я выполнять mvn install:install-file даже думал, что у меня уже есть pom.xml отредактирован, как указано выше?



спасибо!

815   14  

14 ответов:

Я думаю, что вы должны использовать mvn install:install-file чтобы заполнить локальный репозиторий библиотечными банками, вы должны изменить область действия с system на compile.

Если вы начинаете с maven, я предлагаю использовать Maven напрямую, а не Плагины IDE, поскольку это добавляет дополнительный уровень сложности.

Что касается ошибки, вы ставите необходимые банки на свой classpath? Если вы используете типы из библиотеки, вам также необходимо иметь доступ к ней во время выполнения. Это не имеет никакого отношения сам Мэйвен.

Я не понимаю, почему вы хотите поместить библиотеку в систему управления версиями - это для исходного кода, а не двоичных банок.

Вы можете создать в репозитории проекта, так что вам не нужно run mvn install:install-file каждый раз, когда вы работаете на новом компьютере

<repository>
    <id>in-project</id>
    <name>In Project Repo</name>
    <url>file://${project.basedir}/libs</url>
</repository>

<dependency>
    <groupId>dropbox</groupId>
    <artifactId>dropbox-sdk</artifactId>
    <version>1.3.1</version>
</dependency>

/ groupId/artifactId/version / artifactId-verion.банку

подробно прочитайте это сообщение в блоге

http://charlie.cu.cc/2012/06/how-add-external-libraries-maven/

руководство Maven записано это:

mvn install:install-file -Dfile=non-maven-proj.jar -DgroupId=some.group -DartifactId=non-maven-proj -Dversion=1 -Dpackaging=jar

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

в нашей компании у нас были некоторые банки, которые мы некоторые банки, которые были общими, но не были размещены в каких-либо хранилищах maven, и мы не хотели иметь их в локальном хранилище. Мы создали очень простой mvn (public) РЕПО на Github (но вы можете разместить его на любом сервере или локально):
Примечание что это только идеально подходит для управления несколько редко чанинг jar files

  1. создать РЕПО на GitHub:
    https://github.com/<user_name>/mvn-repo/

  2. добавить репозиторий в pom.xml
    (Обратите внимание, что полный путь raw-файла будет немного отличаться от имени РЕПО)

    <repository>
        <id>project-common</id>
        <name>Project Common</name>
        <url>https://github.com/<user_name>/mvn-repo/raw/master/</url>
    </repository>
    
  3. добавить зависимость к хосту (Github или частный сервер)
    a. все, что вам нужно знать, это то, что файлы хранятся в шаблоне, упомянутом @Глюк
    /groupId/artifactId/version/artifactId-version.jar
    b. на вашем хосте создайте папки, соответствующие этому шаблону.
    т. е. если у вас есть файл jar с именем service-sdk-0.0.1.jar создать папку service-sdk/service-sdk/0.0.1/ и поместите файл jar service-sdk-0.0.1.jar в нее.
    c.

Это может быть легко достигнуто с помощью элемента , вложенного в элемент .

например:

 <dependencies>
   <dependency>
     <groupId>ldapjdk</groupId>
     <artifactId>ldapjdk</artifactId>
     <scope>system</scope>
     <version>1.0</version>
     <systemPath>${basedir}\src\lib\ldapjdk.jar</systemPath>
   </dependency>
 </dependencies>

Ссылка:http://www.tutorialspoint.com/maven/maven_external_dependencies.htm

Не используйте systemPath. Вопреки тому, что люди сказали Здесь, вы можете поместить внешнюю банку в папку под вашим извлеченным каталогом проекта и haven Maven найти ее, как и другие зависимости. Вот два важных шага:

  1. используйте "mvn install: install-file" с-DlocalRepositoryPath.
  2. сконфигурируйте репозиторий, чтобы он указывал на этот путь в вашем POM.

Это довольно просто, и вы можете найти пошаговый пример здесь: http://randomizedsort.blogspot.com/2011/10/configuring-maven-to-use-local-library.html

изменить systemPath.

<dependency>
  <groupId>stuff</groupId>
  <artifactId>library</artifactId>
  <version>1.0</version>
  <systemPath>${project.basedir}/MyLibrary.jar</systemPath>
  <scope>system</scope>
</dependency>

Если вы сталкиваетесь с той же проблемой, и вы используете spring-boot В1.4+, вы можете сделать это таким образом.

есть includeSystemScope который можно использовать для добавления зависимостей системной области в jar.

например

Я использую драйвер oracle в своем проекте.

<dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc14</artifactId>
        <version>10.2.0.3.0</version>
        <scope>system</scope>
        <systemPath>${project.basedir}/src/main/resources/extra-jars/ojdbc14-10.2.0.3.0.jar</systemPath>
    </dependency>

затем сделайте includeSystemScope=true, чтобы включить jar в path / BOOT-INF/lib/**

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <includeSystemScope>true</includeSystemScope>
    </configuration>
</plugin>

и исключить из ресурсов, чтобы избежать дублированные включают, банку достаточно жира~

<build>
    <testSourceDirectory>src/test/java</testSourceDirectory>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <excludes>
                <exclude>**/*.jar</exclude>
            </excludes>
        </resource>
    </resources>
</build>

удачи!

Maven способ добавить не Maven банки в проект maven

Maven Project и не Maven jars

добавить Maven установить плагины в разделе сборки

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-install-plugin</artifactId>
        <version>${version.maven-install-plugin}</version>
        <executions>

            <execution>
                <id>install-external-non-maven1-jar</id>
                <phase>clean</phase>
                <configuration>
                    <repositoryLayout>default</repositoryLayout>
                    <groupId>jar1.group</groupId>
                    <artifactId>non-maven1</artifactId>
                    <version>${version.non-maven1}</version>
                    <file>${project.basedir}/libs/non-maven1.jar</file>
                    <packaging>jar</packaging>
                    <generatePom>true</generatePom>
                </configuration>
                <goals>
                    <goal>install-file</goal>
                </goals>
            </execution>
            <execution>
                <id>install-external-non-maven2-jar</id>
                <phase>clean</phase>
                <configuration>
                    <repositoryLayout>default</repositoryLayout>
                    <groupId>jar2.group</groupId>
                    <artifactId>non-maven2</artifactId>
                    <version>${version.non-maven2}</version>
                    <file>${project.basedir}/libs/non-maven2.jar</file>
                    <packaging>jar</packaging>
                    <generatePom>true</generatePom>
                </configuration>
                <goals>
                    <goal>install-file</goal>
                </goals>
            </execution>
            <execution>
                <id>install-external-non-maven3-jar</id>
                <phase>clean</phase>
                <configuration>
                    <repositoryLayout>default</repositoryLayout>
                    <groupId>jar3.group</groupId>
                    <artifactId>non-maven3</artifactId>
                    <version>${version.non-maven3}</version>
                    <file>${project.basedir}/libs/non-maven3.jar</file>
                    <packaging>jar</packaging>
                    <generatePom>true</generatePom>
                </configuration>
                <goals>
                    <goal>install-file</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

добавить зависимость

<dependencies>
    <dependency>
        <groupId>jar1.group</groupId>
        <artifactId>non-maven1</artifactId>
        <version>${version.non-maven1}</version>
    </dependency>
    <dependency>
        <groupId>jar2.group</groupId>
        <artifactId>non-maven2</artifactId>
        <version>${version.non-maven2}</version>
    </dependency>
    <dependency>
        <groupId>jar3.group</groupId>
        <artifactId>non-maven3</artifactId>
        <version>${version.non-maven3}</version>
    </dependency>
</dependencies>

ссылки обратите внимание, что я являюсь владельцем блога

пом.xml будет смотреть на ваш локальный репозиторий, чтобы попытаться найти зависимость, которая соответствует вашему артефакту. Также вы не должны действительно использовать атрибуты system scope или systemPath, они обычно зарезервированы для вещей, которые находятся в JDK, а не JRE

посмотреть этот вопрос как установить артефакты maven.

лучшим решением здесь является установка репозитория: Nexus или Artifactory. Если дает вам место, чтобы положить вещи, как это, и далее он ускоряет вещи, кэшируя свои вещи извне.

Если вы имеете дело с открытым исходным кодом, вы могли бы также рассмотреть положить в центр.

посмотреть руководство.

обратите внимание, что все примеры, которые используют

<repository>...</respository> 

требуется внешний

<repositories>...</repositories> 

вшита теги. Это не ясно из некоторых примеров.

если внешний jar создается только проектом Maven, вы можете скопировать весь проект в свою систему и запустить

mvn install

в директории проекта. Это добавит банку В.каталог m2, который является локальным репозиторием maven.

теперь вы можете добавить

<dependency>
     <groupId>copy-from-the=maven-pom-of-existing-project</groupId>
     <artifactId>copy-from-the=maven-pom-of-existing-project</artifactId>
     <version>copy-from-the=maven-pom-of-existing-project</version>
</dependency>

Это гарантирует, что вы

mvn exec:java 

строительство. Если вы используете предложенные здесь

<scope>system</scope>

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

вы можете добавить внешние банки с помощью следующей команды описано здесь

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

с затмением кислорода вы можете сделать следующие вещи:

  1. разместите свои библиотеки в WEB-INF / lib
  2. Проект - > Настроить Путь Сборки - > Добавить Библиотеку - > Библиотека Веб-Приложений

Maven будет принимать их при установке проекта.

Comments

    Ничего не найдено.