Maven: najlepszy sposób łączenia niestandardowego zewnętrznego JAR z moim projektem?

To moje pierwsze kilka dni nauki Mavena i wciąż zmagam się z podstawami. Mam zewnętrzny .plik jar (niedostępny w publicznych reposach), który muszę odwołać w moim projekcie i próbuję dowiedzieć się, jaka jest moja najlepsza opcja.

Jest to projekt na małą skalę bez centralnego repozytorium dla bibliotek, więc musi to być albo repozytorium lokalne (jakoś dodane do kontroli źródeł, Nie wiem czy ma tak działać?) lub .jar musi być zapisany na dysku poza jakimkolwiek formalnym repozytorium.

1) Jaka jest moja najlepsza opcja do dodania .plik jar do referencji mojego projektu z maven biorąc pod uwagę, że chcę, aby zarówno projekt,jak i biblioteka były pod kontrolą źródła?

2) nadal nie widzę zależności Eclipse. Ręcznie dodałem go do sekcji pom i wyświetla się dobrze na liście zależności w m2eclipse. kompilacja mvn i pakiet mvn udały się, ale uruchomienie programu skutkuje:

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

To jest po edytowanie POM jako:

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

Czy powinienem uruchamiać mvn install: install-file nawet myślałem, że mam już pom.XML edytowany jak wyżej?

Dzięki!
Author: Alexandr Kurilin, 2011-04-17

14 answers

Myślę, że powinieneś użyć mvn install:install-file do wypełnienia lokalnego repozytorium słoikami bibliotecznymi, a następnie zmienić zakres z systemu na kompilację.

Jeśli zaczynasz od Mavena, proponuję użyć Mavena bezpośrednio, a nie wtyczek IDE, ponieważ dodaje to dodatkową warstwę złożoności.

Jeśli chodzi o błąd, czy na swojej ścieżce klasowej stawiasz wymagane słoiki? Jeśli używasz typów z biblioteki, musisz mieć do niej dostęp również w trybie runtime. To nie ma nic wspólnego z mavenem. siebie.

Nie rozumiem, dlaczego chcesz włączyć bibliotekę do kontroli źródeł - jest ona dla kodu źródłowego, a nie binarnych jarów.

 53
Author: stalker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-17 09:41:09

Możesz utworzyć repozytorium projektu In, więc nie musisz run mvn install:install-file za każdym razem, gdy pracujesz na nowym komputerze

<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.jar

Szczegóły przeczytaj ten wpis na blogu

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

 185
Author: Charlie Wu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-11 06:36:23

Instrukcja obsługi Mavena mówi, aby zrobić to:

mvn install:install-file -Dfile=non-maven-proj.jar -DgroupId=some.group -DartifactId=non-maven-proj -Dversion=1 -Dpackaging=jar
 23
Author: Vladislav Rastrusny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-12 20:40:12

Aktualizacja od tego czasu właśnie zainstalowaliśmy nasz własny serwer Nexus, znacznie łatwiejszy i czystszy.

W naszej firmie mieliśmy kilka słoików, które były wspólne, ale nie były hostowane w żadnych repozytoriach maven, ani nie chcieliśmy mieć ich w lokalnym magazynie. Stworzyliśmy bardzo prosty repo mvn (public) na Githubie (ale możesz go hostować na dowolnym serwerze lub lokalnie):
Uwaga że jest to idealne rozwiązanie tylko do zarządzania kilkoma pliki

  1. Utwórz repo na GitHub:
    https://github.com/<user_name>/mvn-repo/

  2. Dodaj repozytorium w pom.xml
    (Należy pamiętać, że pełna ścieżka pliku raw będzie nieco inna niż nazwa repo)

    <repository>
        <id>project-common</id>
        <name>Project Common</name>
        <url>https://github.com/<user_name>/mvn-repo/raw/master/</url>
    </repository>
    
  3. Dodaj zależność do hosta (Github lub private server)
    a. Wszystko, co musisz wiedzieć, to to, że pliki są przechowywane we wzorze wspomnianym przez @ glitch
    /groupId/artifactId/version/artifactId-version.jar
    B. na twoim komputerze Utwórz foldery pasujące do tego wzorca.
    jeśli Utwórz plik jar o nazwie service-sdk-0.0.1.jar, Utwórz folder service-sdk/service-sdk/0.0.1/ i umieść w nim plik jar service-sdk-0.0.1.jar.
    C. przetestuj go, próbując pobrać jar z przeglądarki (w naszym przypadku: https://github.com/<user_name>/mvn-repo/raw/master/service-sdk/service-sdk/0.0.1/service-sdk-0.0.1.jar

  4. Dodaj zależność do pom.plik xml:

    <dependency>
        <groupId>service-sdk</groupId>
        <artifactId>service-sdk</artifactId>
        <version>0.0.1</version>
    </dependency>
    
  5. Enjoy

 17
Author: Kenny Cason,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-15 20:07:52

Można to łatwo osiągnąć za pomocą elementu zagnieżdżonego wewnątrz elementu .

Na przykład:

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

Odniesienie: http://www.tutorialspoint.com/maven/maven_external_dependencies.htm

 16
Author: Jiggneshh Gohel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-03 17:16:21

Nie używaj systemPath. W przeciwieństwie do tego, co ludzie tutaj powiedzieli, możesz umieścić zewnętrzny jar w folderze pod twoim sprawdzonym katalogiem projektu i nie ma problemu znaleźć go jak inne zależności. Oto dwa kluczowe kroki:

  1. Użyj "mvn install: install-file" z -DlocalRepositoryPath.
  2. Skonfiguruj repozytorium tak, aby wskazywało na tę ścieżkę w Twoim POM.

Jest to dość proste i można znaleźć przykład krok po kroku proszę.: http://randomizedsort.blogspot.com/2011/10/configuring-maven-to-use-local-library.html

 11
Author: Nehc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-21 22:26:17

Zmień swój systemPath .

<dependency>
  <groupId>stuff</groupId>
  <artifactId>library</artifactId>
  <version>1.0</version>
  <systemPath>${project.basedir}/MyLibrary.jar</systemPath>
  <scope>system</scope>
</dependency>
 4
Author: Aung Myat Hein,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-28 07:39:26

Jeśli napotkasz ten sam problem i używasz spring-boot v1.4+, możesz to zrobić w ten sposób.

Istnieje includeSystemScope, którego można użyć do dodania zależności zakresu systemowego do jar.

Np.

Używam sterownika oracle do mojego projektu.

<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>

Następnie utwórz includeSystemScope = true, aby włączyć jar do ścieżki / BOOT-INF / lib/ * *

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

I wyklucz z zasobu, aby uniknąć powielania include, słoik jest gruby enought ~

<build>
    <testSourceDirectory>src/test/java</testSourceDirectory>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <excludes>
                <exclude>**/*.jar</exclude>
            </excludes>
        </resource>
    </resources>
</build>
Powodzenia!
 4
Author: ch1ndu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-31 09:06:06

Maven sposób na dodanie słoików non maven do projektu Maven

Maven Project i non Maven jars

Dodaj wtyczki instalacyjne maven w sekcji budowania

<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>

Dodaj zależność

<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>

Referencje Uwaga jestem właścicielem bloga

 4
Author: craftsmannadeem,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-15 16:24:58

Pom.xml zajrzy do lokalnego repozytorium, aby spróbować znaleźć zależność, która pasuje do twojego artefaktu. Ponadto nie powinieneś używać atrybutów system scope lub systemPath, są one zwykle zarezerwowane dla rzeczy, które są w JDK, a nie JRE

Zobacz to pytanie Jak zainstalować artefakty Mavena.

 3
Author: Tim Sparg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:01

Najlepszym rozwiązaniem jest zainstalowanie repozytorium: Nexus lub Artifactory. Jeśli daje Ci miejsce do umieszczenia takich rzeczy, a dodatkowo przyspiesza rzeczy, buforując twoje rzeczy z zewnątrz.

Jeśli rzecz, z którą masz do czynienia jest open source, możesz również rozważyć umieszczenie w centrum.

Zobacz poradnik .

 2
Author: bmargulies,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-17 11:52:22

Zauważ, że wszystkie przykłady, które używają

<repository>...</respository> 

Require outer

<repositories>...</repositories> 

Dołączanie znaczników. Nie jest to jasne z niektórych przykładów.

 2
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-18 22:03:56

Jeśli zewnętrzny jar jest tworzony tylko przez projekt Maven, możesz skopiować cały projekt na swój system i uruchomić

mvn install

W katalogu projektu. To doda słoik .katalog m2 będący lokalnym repozytorium maven.

Teraz możesz dodać

<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>

To zapewni Ci

mvn exec:java 
Działa. Jeśli używasz sugerowane tutaj
<scope>system</scope>

Następnie będziesz musiał dodawać klasy indywidualnie podczas używania polecenia executing through Kolejka

Możesz dodać zewnętrzne słoiki za pomocą następującego polecenia opisanego tutaj

mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \
-DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>
 0
Author: Bug Killer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-15 16:52:16

Z Eclipse Oxygen możesz zrobić następujące rzeczy:

  1. Umieść swoje biblioteki w WEB-INF / lib
  2. Project - > Configure Build Path -> Add Library - > Web App Library

Maven zajmie się nimi podczas instalacji projektu.

 0
Author: Rick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-21 14:32:33