Maven projesine yerel jar dosyaları nasıl eklenir?


1171

Yerel jar dosyalarını (henüz Maven deposunun bir parçası değil) doğrudan projemin kütüphane kaynaklarına nasıl ekleyebilirim?


1
Merhaba @Praneel PIDIKITI, Kabul edilen cevabı lütfen en çok oyu değiştirebilir misiniz?
boş

1
@nslntmnx Tüm çözümlerin dezavantajları olduğu için bu
Paul Verest

Senin kütüphanelerini güncellenmiş veya vesilesiyle uzatılırsa bakın bu cevabı için benim kütüphanelerini tüm JARs yüklemek istediğiniz maven ile klasörü proje ek repo klasör ve hantal cmd çizgiler veya kaçınarak bir "pomified" yol ve bu tür install-filekomut dosyaları.
GeroldBroser Monica

Yanıtlar:


698

JAR'ı aşağıdaki gibi yerel Maven veri havuzunuza kurun:

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

Her biri aşağıdakileri ifade eder:

<path-to-file>: yüklenecek dosyanın yolu örn. → c:\kaptcha-2.3.jar

<group-id>: Dosyanın kaydedilmesi gereken grup örn. → com.google.code

<artifact-id>: dosya için artefakt adı örn. → kaptcha

<version>: dosyanın sürümü örn. → 2.3

<packaging>: dosyanın paketlenmesi örn. → jar

Referans


7
Yapım üzerine yüklenecek talimatlar, createPom kısmı hariç her şeye sahipti. Bu çok önemli gibi görünüyor.
Jason D

4
<path-to-file> ne anlama geliyor? C: /Users/XXX/WorkspaceDocx/maven/src/main/resources/myJar.jar ...... gibi mi yoksa $ {project.basedir} /src/main/resources/myJar.jar yapabilir miyiz
Igor Beaufils

17
Cevap bir README'den ya da kavanozların getirildiğinden bahsetmiyor. Ancak, proje kavanozları beraberinde getirirse, repoyu burada belirtildiği gibi projeye koyabilirsiniz stackoverflow.com/a/36602256/1000011 o zaman proje sadece kavanozlar gibi çalışacağından bir README'ye ihtiyacınız yoktur. hiçbir manuel adım olmadan maven merkezi idi.
optik

8
@opticyclic yorumunuzun daha fazla oy almasına veya bu cevabın düzenlenmesi gerekiyor. Yerel Maven deposuna yüklemenin herkes için geçerli olmayacağını fark etmeyen acemiler için bir felaket tarifi.
Mike S


1427

Yerel bağımlılıkları doğrudan ekleyebilirsiniz ( mülk kütüphaneleri dahil olan derleme projesinde belirtildiği gibi) şöyle:

<dependency>
    <groupId>com.sample</groupId>
    <artifactId>sample</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/Name_Your_JAR.jar</systemPath>
</dependency>

Güncelleme

Yeni sürümlerde bu özellik kullanımdan kaldırılmış olarak işaretleniyor, ancak hala çalışıyor ve henüz kaldırılmamış (Sadece başlatma sırasında günlükte uyarı görüyorsunuz). Maaven grubunda bu https://issues.apache.org/jira/browse/MNG-6523 ile ilgili bir sorun ortaya çıkıyor (Bu özelliğin bazı durumlarda neden yararlı olduğunu açıklayabilir ve açıklayabilirsiniz). Umarım bu özellik orada kalır!

Bana soruyorsanız, özellik kaldırılmadığı sürece bunu, projemde depoya sığmayan yalnızca bir yaramaz kavanoz dosyasına bağımlılık yapmak için kullanıyorum . Bu özellik kaldırılırsa, burada daha sonra seçebileceğim birçok iyi cevap var!


49
Özellikle eski bir kavanozu test etmek istediğiniz zamanlar vardır ve bence bu cevap bunun için iyi bir seçimdir. İhtiyacım olan bu. Yukarıdakiler
John Lockwood

36
Göründüğü kadar güzel ve kolay, bu çözüm, App.jar uygulamanız için bir WAR dosyasına dahil edilmez sorun var.
Matthias

40
Yukarıdaki çözüm artık çalışmaz, döndürür: "xx.jar için" dependsencies.dependency.systemPath 'proje dizini içindeki dosyalara işaret etmemelidir "Bu zaten stackoverflow.com/questions/10935135/…
sarah

8
Bu cevap olarak, olmayan artifactIdve groupIdetrafında yanlış şekilde?
theonlygusti

5
Maven docu'ya göre ( maven.apache.org/guides/introduction/… ): Önemli not: Bu onaylanmamış olarak işaretlenmiştir.
agassner

142

Öncelikle, bu cevap için anonim bir Stack Overflow kullanıcısına kredi vermek istiyorum - Daha önce burada benzer bir cevap gördüğümden eminim - ama şimdi bulamıyorum.

Bağımlılık olarak yerel JAR dosyalarına sahip olmanın en iyi seçeneği, yerel bir Maven deposu oluşturmaktır. Böyle bir havuz, içinde pom dosyaları bulunan uygun bir dizin yapısından başka bir şey değildir.

Örneğim için: Ana projem ${master_project}yerinde var ve alt proje1 açık ${master_project}/${subproject1}.

Sonra bir Maven deposu oluşturuyorum: ${master_project}/local-maven-repo .

Adresindeki subproject1'deki pom dosyasında, ${master_project}/${subproject1}/pom.xmldosya yolunu URL parametresi olarak alacak deponun belirtilmesi gerekir:

<repositories>
    <repository>
        <id>local-maven-repo</id>
        <url>file:///${project.parent.basedir}/local-maven-repo</url>
    </repository>
</repositories>

Bağımlılık, diğer havuzlarda olduğu gibi belirtilebilir. Bu pom havuzunuzu bağımsız hale getirir. Örneğin, istenen JAR Maven merkezinde kullanılabilir olduğunda, yerel repodan silmeniz yeterlidir ve varsayılan repodan çekilir.

    <dependency>
        <groupId>org.apache.felix</groupId>
        <artifactId>org.apache.felix.servicebinder</artifactId>
        <version>0.9.0-SNAPSHOT</version>
    </dependency>

Yapılacak son fakat en az olmayan şey, -DlocalRepositoryPath anahtarını kullanarak JAR dosyasını yerel depoya eklemektir:

mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file  \
    -Dfile=/some/path/on/my/local/filesystem/felix/servicebinder/target/org.apache.felix.servicebinder-0.9.0-SNAPSHOT.jar \
    -DgroupId=org.apache.felix -DartifactId=org.apache.felix.servicebinder \
    -Dversion=0.9.0-SNAPSHOT -Dpackaging=jar \
    -DlocalRepositoryPath=${master_project}/local-maven-repo

JAR dosyası kurulduktan sonra Maven deponuz bir kod havuzuna bağlanabilir ve tüm kurulum sistemden bağımsızdır. ( GitHub'da çalışma örneği ).

JAR'ların kaynak kodu repo'suna bağlı kalmasının iyi bir uygulama olmadığını, ancak gerçek hayatta, hızlı ve kirli çözümlerin bazen yayınlayamadığınız bir JAR'ı barındırmak için tam bir Nexus repo'dan daha iyi olduğunu kabul ediyorum.


Bir maven repo olarak yerel göreli dizin ... Çok yardımcı oldu
sura2k

4
Bunu pom.xml'de yapmak istiyorsanız, baeldung.com/install-local-jar-with-maven
Kai Wang

@Kai Wang Bu çözüm daha iyi çalışıyor! belki bunu bir cevap olarak eklemelisiniz.
lockwobr

7
Çünkü ${project.parent.basedir}bugünlerde hiçbir şeye çözüm bulamadım ${project.basedir}/..ve mükemmel çalıştım.
Impaler

1
Bir ipucu: lütfen $ HOME / .m2 / settings.xml dosyasını kontrol edin "" local-maven-repo "ayarlarının / aynalar / ayna ile yansıtılmasını önleyin <mirrorOf>*</mirrorOf>.
btpka3

125

Yeni bir klasör oluşturun, diyelim local-maven-repoMaven projenizin kökünde.

Sadece yerel bir repo <project>ekleyin pom.xml:

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

Ardından, yüklemek istediğiniz her harici kavanoz için projenizin köküne gidin ve yürütün:

mvn deploy:deploy-file -DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] -Durl=file:./local-maven-repo/ -DrepositoryId=local-maven-repo -DupdateReleaseInfo=true -Dfile=[FILE_PATH]

16
Buradaki tek doğru cevap, konuşlandırmayı kullanırken repo'nuzu doğru bir şekilde oluşturacağı için.
optik bisiklet

Kod bir CI derleme sunucusu kullanılarak dağıtılırsa bu yaklaşım işe yarar mı? Otomatik derlemelerin bağımlılığa erişimi olmayacak gibi görünüyor.
Wallace Howery

2
@ user2748659 evet CI derleme sunucularınızda klasör local-maven-repokaynak klasörünüzde
Anthony O.

3
Bu cevap benim için işe yaradı. Paylaşılan bir proje için, projenin dizininde repo bulunması ve sürüm denetimine eklenmesi, projeyi denetleyen herkesin eksik bağımlılıklara sahip olmamasını sağlar. Çok fazla bağımlılığınız varsa, paylaşılan, uzak bir repo muhtemelen daha iyi bir çözümdür, aksi takdirde repoyu projenin dizininde tutmak mükemmel bir şekilde iyidir.
Aquarelle

2
Bunu yapmak için -Dpackaging = jar eklemeniz gerekebileceğini unutmayın. Aksi takdirde "yapay bilgi eksik veya geçersiz: paketleme eksik" iletisini alırsınız.
J Woodchuck

43

Böyle bir çözüm istiyorum - maven-install-pluginpom dosyasında kullanın :

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <version>2.5.2</version>
    <executions>
        <execution>
            <phase>initialize</phase>
            <goals>
                <goal>install-file</goal>
            </goals>
            <configuration>
                <file>lib/yourJar.jar</file>
                <groupId>com.somegroup.id</groupId>
                <artifactId>artefact-id</artifactId>
                <version>x.y.z</version>
                <packaging>jar</packaging>
            </configuration>
        </execution>
    </executions>
</plugin>

Bu durumda mvn initializeyerel maven deposuna gerçekleştirebilirsiniz ve kavanoz kurulacaktır. Şimdi bu kavanoz bu makinedeki herhangi bir maven adımı sırasında kullanılabilir (bu bağımlılığı <dependency></dependency>etiketli pom'daki diğer herhangi bir maven bağımlılığı olarak eklemeyi unutmayın ). Kavanoz montajını initializeadım adım değil , istediğiniz diğer adımlara bağlamak da mümkündür .


2
Bu benim için iyi çalışıyor, ama sadece daha mvn initializeönce çalıştırırsam mvn package: mvn initialize packageJAR'ı merkezi repodan indirmeye çalışamam veya başka bir şey denemem. Bu neden? Bu hedefleri / aşamaları sırayla yürüteceğini düşündüm.
DavidS

1
Aslında, sırayla çalıştırılmalıdır. Varsayılan yaşam döngüsü listesine bir göz atın: maven.apache.org/guides/introduction/… Bağlamak için başka bir adım kullanabilirsiniz.
sfenksler

2
Her yöntemi denedim, ama sonunda bu çözüme başvurmak zorunda kaldım. Ana nedeni, çevrimdışı modda paketleri yerel olarak oluşturmak istedim. Yerel olarak tanımlanmış bir depoya bağımlılık olarak ilan edersem, bu her zaman başka bir çevrimiçi repo olarak kabul edildi ve maven yapısı artefaktın cezalandırılmamasından şikayet etti. Bu çözüm her durum için iyi çalışır.
Mauli

2
Ben temiz faz kullanmak daha iyi olduğunu düşünüyorum çünkü başlatma mvn paketi her gereksiz kullanıldığında yürütülür. Sonunda sadece kavanoz / savaş üretmek gerekiyorsa, doğrudan mvn temiz paketi kullanabilirsiniz .
Deoxyseia

" Adımı başlatmak için değil, istediğiniz başka bir adımı jar kurulumuna bağlamak da mümkündür. " Bağımlılık henüz repoda değilse ve bağımlılıkları çözen bir aşamadan sonra gelen bir aşama kullanılırsa (örn. compile) Yapı başarısız olur.
GeroldBroser Monica

29
<dependency>
    <groupId>group id name</groupId>
    <artifactId>artifact name</artifactId>
    <version>version number</version>
    <scope>system</scope>
    <systemPath>jar location</systemPath>
</dependency>

6
<scope>systemşu anda kullanımdan kaldırıldı.
GeroldBroser Monica

@GeroldBroser - tamam. bunun yerine ne kullanabiliriz?
MasterJoe2

2
@ MasterJoe2 Kabul edilen cevapta belirtildiği gibi install:install-file, yerel repoya yönelik artefakt ve bunu "normal" bir bağımlılık (varsayılan kapsamla compile) olarak kullanın veya bir proje içi depo çözümü kullanın .
GeroldBroser, Monica'yı


14

Gerçekten hızlı ve kirli bir yol yerel bir dosyayı işaret etmektir:

<dependency>
      <groupId>sample</groupId>  
       <artifactId>com.sample</artifactId>  
       <version>1.0</version> 
      <scope>system</scope>
      <systemPath>C:\DEV\myfunnylib\yourJar.jar</systemPath>
</dependency>

Ancak bu yalnızca makinenizde (açıkça) yaşayacaktır, paylaşmak için genellikle uygun bir m2 arşivi (nexus / yapay) kullanmak veya bunlardan herhangi birine sahip değilseniz veya yerel bir maven kurmak istemiyorsanız mantıklıdır. yapılandırılmış arşiv ve pom: local:

<repositories>
    <repository>
        <id>my-local-repo</id>
        <url>file://C:/DEV//mymvnrepo</url>
    </repository>
</repositories>

uzaktan:

<repositories>
    <repository>
        <id>my-remote-repo</id>
        <url>http://192.168.0.1/whatever/mavenserver/youwant/repo</url>
    </repository>
</repositories>

bunun için basedir değişkeni kullanılarak göreceli bir yol da mümkündür:

<url>file:${basedir}</url>

Yerel depo URL'leri için bunlar göreli olabilir mi yoksa mutlak olmaları mı gerekir?
Dragas

@Dragas Denemedim, lütfen yaptıysanız bize bildirin.
fl0w

1
Evet, görünüşe göre <url>file:${basedir}</url>bunun yerine temel URL kullanmanız gerekiyor .
Dragas

11

POM dosyasına kendi yerel JAR'ınızı ekleyin ve bunu maven derlemesinde kullanın.

mvn install:install-file -Dfile=path-to-jar -DgroupId=owngroupid -DartifactId=ownartifactid -Dversion=ownversion -Dpackaging=jar

Örneğin:

mvn install:install-file -Dfile=path-to-jar -DgroupId=com.decompiler -DartifactId=jd-core-java -Dversion=1.2 -Dpackaging=jar

Sonra POM'a şöyle ekleyin:

resim açıklamasını buraya girin


Bir hata alıyorum Artefakt yüklenemedi (erişim reddedildi). Bunu Nasıl Çözebilirim? Aurasphere
Ramzah Rehman

1
@RamzahRehman sağ tıklayarak ve sonra "Yönetici olarak çalıştır" ı seçerek komut istemini admi ayrıcalıklarıyla açmayı deneyin
Aurasphere

9

Bunun bir yolu, kendi Maven veri havuzu yöneticinize (Nexus gibi) yüklemektir. Zaten kendi havuz yöneticisine sahip olmak iyi bir uygulamadır.

Son zamanlarda gördüğüm bir başka güzel yol da Maven Kurulum Eklentisini derleme yaşam döngünüze dahil etmektir: Dosyaları yerel depoya kurmayı POM'da bildirirsiniz. Biraz ama küçük bir ek yük ve manuel bir adım söz konusu değil.

http://maven.apache.org/plugins/maven-install-plugin/install-file-mojo.html


4
Gradle'a geçerek bitirin. Çalışmıyor Yerel kavanoz bağımlılıklar olarak tanımlanırsa, maven bağımlılıkları çözmeden önce eklentileri yürütmez, manuel kurulum kaçınılmazdır. bu durumla ilgili bir
tartışma


6

Bir başka ilginç durum, projenizde özel maven kavanozlarına sahip olmak istediğinizde. Geçişli bağımlılıkları çözme konusunda Maven'in yeteneklerini korumak isteyebilirsiniz. Çözüm oldukça kolaydır.

  1. Bir klasör kütüphanesi oluşturmaProjenizde
  2. Pom.xml dosyanıza aşağıdaki satırları ekleyin

    <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 klasörünü açın ve içe aktarmak istediğiniz projenin dizin yapısını libs klasörüne kopyalayın.

Örneğin, bağımlılığı içe aktarmak istediğinizi varsayalım

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

Sadece .m2 / repository adresine gidin ve aşağıdaki klasörü göreceksiniz

com / firmam / myproject / 1.2.3

Libs klasörünüzdeki her şeyi kopyalayın (yine, .m2 / repository altındaki klasörler dahil ) ve işiniz bitti.


6

Komut satırı :

mvn install:install-file -Dfile=c:\kaptcha-{version}.jar -DgroupId=com.google.code
-DartifactId=kaptcha -Dversion={version} -Dpackaging=jar

5

Bağımlılığın önemli kısmı: $ {pom.basedir} (sadece $ {basedir} yerine)

<dependency>
    <groupId>org.example</groupId>
    <artifactId>example</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${pom.basedir}/src/lib/example.jar</systemPath>
</dependency>

4

Bu sorun için daha iyi bir çözüm maven-install-plugin kullanmak olduğunu düşünüyorum , dosyaları yükleme zamanında otomatik olarak yüklemek için kullanmaktır. Projem için böyle ayarladım.

İlk olarak, yolu (yerel .jar dosyalarını depoladığınız yer) özellik olarak ekleyin.

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

Ardından, pluginsderleme sırasında kavanozları yüklemek için bir eklenti ekleyin.

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

Son olarak, bağımlılıklarda, kavanozları ekleyebilirsiniz

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

Projenizi bu şekilde ayarladığınızda, proje başka bir bilgisayara götürseniz bile derlemeye devam edecektir (özellik tarafından belirtilen yoldaki tüm jar dosyalarına sahip olduğu göz önüne alındığında) local.sdk ).

İçin groupId olmadığından emin olmak için benzersiz bir ad kullanın.

Artık siz mvn installveya mvn testyerel kavanozlar otomatik olarak eklenecektir.


3

Tercih edilen yol, kendi uzak deponuzu oluşturmaktır.

Nasıl yapılacağı ile ilgili ayrıntılar için buraya bakın . ' Uzak Depoya Yükleme ' bölümüne bakın.


3

Kavanozlarla dolu bir klasör yükleyebileceğiniz bir kodu paylaşmak istiyorum. Bir sağlayıcının genel bir deposu yoksa ve manuel olarak çok sayıda kitaplık eklemeniz gerektiğinde yararlıdır. Bellek yetersiz hataları olabilir çünkü doğrudan maven için çağrı yerine bir .bat inşa etmeye karar verdim. Windows ortamı için hazırlanmıştır, ancak linux işletim sistemine uyarlamak kolaydır:

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();
    }

}

Bu main'i herhangi bir IDE'den çalıştırdıktan sonra update_repo_maven.bat dosyasını çalıştırın.


Kodunuz String symbolicName = attributes.getValue("Bundle-SymbolicName"); if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject"))yalnızca özel kavanozların destekleneceğini gösteriyor. İhtiyacımız olan bu değil: bunun yerine bir grup üçüncü parti kavanoz. Herhangi bir kavanozu bu şekilde nasıl kuracağınız konusunda önerileriniz var mı?
javadba

Ben var sabit kodunuzu i altındaki bir cevap koydu.
javadba


2

Ayrıca ...

<scope>compile</scope>

Maven Bağımlılıkları . Bu varsayılan ama bazı durumlarda açıkça bu kapsamı Maven yerel depoda yerel kütüphaneleri bulmak için ayar buldum.


2

Nedense, web uygulamasında ne Alireza Fattahi'nin çözümüne ne de JJ Roman'ın çözümüne bakım veriyorum düzgün çalışmıyor. Her iki durumda da, derleme tamamlanır (kavanozu görür), ancak ambalaj kavanozu savaşın içine dahil edemez.

Çalışmasını sağlamanın tek yolu kavanozu /src/main/webapp/WEB-INF/lib/giyip Fattahis ya da Roman'ın çözümü ile birleştirmektir.


1

Yerel bir repo kullanmanın mutlaka iyi bir fikir OLMADIĞINI unutmayın. Bu proje başkalarıyla paylaşılıyorsa, o zaman herkes işe yaramadığında sorunlar ve soruları olacaktır ve kavanoz kaynak kontrol sisteminizde bile mevcut olmayacaktır!

Paylaşılan repo en iyi cevap olsa da, bunu bir nedenden dolayı yapamazsanız, kavanozu gömmek yerel bir repodan daha iyidir. Yalnızca yerel repo içerikleri, özellikle zaman içinde birçok soruna neden olabilir.


1
kavanozları kaynak kontrol sistemine eklerseniz, kütüphaneler her zaman kaynak ile birlikte kullanılabilir olacaktır. Kaynak yok, kütüphane yok. Maven ile kaynak tamam olabilir ama depo kullanılamıyor olabilir.
sarah.ferguson

@Frank ... harici bağımlılıklar (kütüphane dosyaları) içermeden yürütülebilir kavanoz oluşturma hakkında herhangi bir fikir?
Satish Karuturi

Yenmek için yeni olan ve orijinal soruya cevap arayan biri için, "kavanozun gömülmesi" ne anlama gelir?
cdock

1

Yerel deponuza, komutları vererek kavanozunuzu kurabilirsiniz

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

Aynı şeyi mkyoung'un web sitesinden yapmak için bu yararlı bağlantıyı takip edin . Ayrıca maven kılavuzunu da kontrol edebilirsiniz.


1

Üçüncü taraf kavanozunu kurmak için lütfen aşağıdaki gibi komutu arayın

mvn install:install-file -DgroupId= -DartifactId= -Dversion= -Dpackaging=jar -Dfile=path

1
  1. mvn yüklemek

Komut satırına aşağıdaki kodu yazabilir veya eclipse yerleşik maven kullanıyorsanız projeye sağ tıklayın -> Farklı Çalıştır -> yapılandırmaları çalıştır ... -> sol panelde Maven Build'a sağ tıklayın -> yeni yapılandırma -> Hedefler ve temel dizindeki kod: $ {project_loc: NameOfYourProject} -> Çalıştır

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

Her biri aşağıdakileri ifade eder:

<dosya yolu>: yüklenecek dosya yolu örn. -> c: \ kaptcha-2.3.jar

<grup kimliği>: Dosyanın örneğin - - com.google.code altında kaydedilmesi gereken grup

<artifact-id>: dosya için artefakt adı örn. -> kaptcha

<sürüm>: dosyanın sürümü ör. -> 2.3

<ambalaj>: dosyanın ambalajı örneğin -> kavanoz

2. yükledikten sonra, sadece pom.xml'de kavanoz ilan eder.

 <dependency>
      <groupId>com.google.code</groupId>
      <artifactId>kaptcha</artifactId>
      <version>2.3</version>
 </dependency>

1

1. Adım: Yapılandırma maven-install-pluginhedefi install-filede seninpom.xml

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <executions>
        <execution>
            <id>install-external-non-maven-jar-MWS-Client-into-local-maven-repo</id>
            <phase>clean</phase>
            <configuration>
                <repositoryLayout>default</repositoryLayout>
                <groupId>com.amazonservices.mws</groupId>
                <artifactId>mws-client</artifactId>
                <version>1.0</version>
                <file>${project.basedir}/lib/MWSClientJavaRuntime-1.0.jar</file>
                <packaging>jar</packaging>
                <generatePom>true</generatePom>
            </configuration>
            <goals>
                <goal>install-file</goal>
            </goals>
        </execution>
    </executions>
</plugin>

fileYolu gerçek dosya yolunuza göre düzenlediğinizden emin olun (önerilen bu harici maven olmayan kavanozları bir klasörün içine yerleştirmek, diyelim libve libprojeye özgü göreceli yol kullanmak ve sistem eklemekten kaçınmak için bu klasörü projenizin içine yerleştirmek mutlak mutlak yol.

Birden fazla harici kavanozunuz varsa <execution>, aynı kavanozdaki diğer kavanozlar için tekrarlayın maven-install-plugin.

2. Adım: Dosyanızda maven-install-pluginyukarıda gösterildiği gibi yapılandırdıktan sonra pom.xml, bu kavanozları pom.xmlher zamanki gibi kullanmanız gerekir :

    <dependency>
        <groupId>com.amazonservices.mws</groupId>
        <artifactId>mws-client</artifactId>
        <version>1.0</version>
    </dependency>

Not o maven-install-pluginyerel yalnızca kopyalar dış kavanoz.m2 maven depo. Bu kadar. Bu kavanozları projenize maven bağımlılıkları olarak otomatik olarak dahil etmez.

Bu küçük bir nokta, ama bazen kaçırmak kolaydır.


0

Benim pom.xml bağımlılıkları bir dizi için aynı hatayı vardı pomsxml bağımlılıkları sürümleri belirtilmedi ve üst depoda bahsedildi çıkıyor. Nedense sürüm detayları bu repo ile senkronize değildi. Bu yüzden manuel olarak etiketini kullanarak sürümleri girdi ve bir cazibe gibi çalıştı. Üst öğedeki sürümleri aramak ve burada belirtmek için biraz zaman gerekiyordu. Ancak bu sadece artefakt hatasını gösteren kavanozlar için yapılabilir ve işe yarar. Umarım bu birine yardımcı olur.


0

Apache Maven 3.5.4'te çift tırnak eklemek zorunda kaldım. Çift tırnak olmadan benim için işe yaramadı.

örnek: mvn install: install-file "-Dfile = jar dosyasının konumu" "-DgroupId = grup kimliği" "-DartifactId = yapı kimliği" "-Dversion = sürüm" "-Dpackaging = paket türü"


0
  1. Yerel bir Maven depo dizini oluşturun, Proje kökünüz şu şekilde başlamalıdır:
yourproject
+- pom.xml
+- src
  1. Com.example ve sürüm 1.0 grubu için repo adlı standart bir Maven depo dizini ekleyin:
yourproject
+- pom.xml
+- src
+- repo
  1. Eseri Repo'ya Dağıtma, Maven sizin için eseri mvn deploy: deploy-file hedefini kullanarak dağıtabilir:
mvn deploy:deploy-file -Durl=file:///pathtoyour/repo -Dfile=your.jar -DgroupId=your.group.id -DartifactId=yourid -Dpackaging=jar -Dversion=1.0
  1. projenizin yerel repodan maven yapımı sırasında kavanoz bulabilmesi için kavanozunuza karşılık gelen pom dosyasını yükleyin:
mvn install:install-file -Dfile=/path-to-your-jar-1.0.jar -DpomFile=/path-to-your-pom-1.0.pom
  1. pom dosyanıza repo ekleyin:
<repositories>
    <!--other repositories if any-->
    <repository>
        <id>project.local</id>
        <name>project</name>
        <url>file:${project.basedir}/repo</url>
    </repository>
</repositories>
  1. pom'a bağımlılığı ekle:
<dependency>
    <groupId>com.groupid</groupId>
    <artifactId>myid</artifactId>
    <version>1.0</version>
</dependency>

-2

BU CEVAP SADECE ECLIPSE KULLANICILARI İÇİNDİR:

Eclipse kullanıyorsanız, kavanozu lib / dizinine yerleştirin, kavanoz adına sağ tıklayın ve "yol oluşturmak için ekle" ye tıklayın. Eclipse "referans verilen kütüphaneler" yaratacak ve kavanozu sizin için yerleştirecek

Kavanozun programdaki ithalatını hemen benim için çözdü


5
Bu Eclipse's giriş ekleyecektir .classpath, ancak maven inşamvn package maven bunun bir tanımı olmadığı için bu bağımlılığı kullanmaya başladıktan sonra broket olacaktır ve sadece içinde olmalıdırpom.xml
Paul Verest

evet, haklısın, paket yerel kavanozu içermeyecek. Ama ben bir projeye nasıl ekleneceği sorusuna cevap verdim (tutulma şeklinde).
Anandkumar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.