Soru POM'ları Maven'de bağımlılık olarak nasıl kullanırız?


Eklemek için bir yolu var mı pom POM'uma bağımlılık ve tüm modüllerini alabilir miyim?

JavaMail iyi bir örnek. Maven Central Repo adlı bir ana POM’un adı: com.sun.mail: hepsi: 1.5.0 modülleri ile: posta, mailapi, mailapijar, smtp, imap, gimap, pop3 ve dsn.

Ancak, "tüm" eserlerin yalnızca tek bir dosya vardır: pom.xml  Bu "tüm" eseri POM'uma bir bağımlılık olarak eklemenin ve tüm modüllerini almanın bir yolu var mı? Maven'deki bağımlılıkları kullanmanın doğru bir yol olmadığından emin olduğumdan% 90 eminim, ancak bunu Stack'daki bir uzmandan duymak istiyorum.

fikirler:

  • <dependencies><dependency>...<type>pom</type></dependency></dependencies>
  • <dependencyManagement><dependencies><dependency>...<type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

İlgili: Netbeans: tip pompalı maven bağımlılıkları


25
2018-06-03 09:51


Menşei


Not: Burada harika bir tut var: books.sonatype.com/mvnref-book/reference/... - Andrejs


Cevaplar:


Gitmelisin

<dependencies>
  <dependency>
     <groupId>com.my</groupId>
     <artifactId>commons-deps</artifactId>
     <type>pom</type>
  </dependency>
</dependencies>

Bu, bildirilen tüm bağımlılıkları geçici olarak ekleyecektir com.my:commons-deps şu anki POM'ınıza.

kullanma

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>...</groupId>
            <artifactId>...</artifactId>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Bağımlılık yönetiminde yapay sürümlerin basit bir 'içerir' olarak çalışır. Böylece, projenize herhangi bir bağımlılık eklemez.


41
2018-06-03 09:54



Bu, çoğu insanın burada en muhtemel olanı sorduğu soruya cevap verirken, OP'nin sorduğu şey değil. - inovaovao


İstediğiniz bağımlılıkları bir araya getiren kendi POM'ınızı oluşturabileceğinizi ve orijinal projenizde bu toplayıcı pompaya bir bağımlılık ekleyebileceğinizi düşünüyorum. Bağımlılık POM'unuzdaki her bir modülde bağımlılıklar eklemek zorunda kalacaksınız, ancak gerçek proje POM'larından soyutlanacak ve bu bağımlılıkların tek bir yerde yönetilmesine izin verecek, böylece birden fazla projeye sahip olmanız halinde işe yarayacak bağımlılıklar kümesinde.

Örneğinizde bunun gibi yeni bir pompayı yaratabilirsiniz:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                             http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.mycompany</groupId>
    <artifactId>mail-deps</artifactId>
    <version>1.0.0</version>
    <packaging>pom</packaging>

    <dependencies>
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>mailapi</artifactId>
            <version>1.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>mailapijar</artifactId>
            <version>1.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>imap</artifactId>
            <version>1.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>gimap</artifactId>
            <version>1.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>pop3</artifactId>
            <version>1.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>dsn</artifactId>
            <version>1.5.0</version>
        </dependency>
    </dependencies>
</project>

Daha sonra orijinal projenizde sadece ekleyin:

<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                         http://maven.apache.org/maven-v4_0_0.xsd">
 ...
 <modules>
   <module>src/main/java/com/mycompany</module>
 </modules>
 ...
 <dependencies>
     <dependency>
         <groupId>com.mycompany</groupId>
         <artifactId>mail-deps</artifactId>
         <version>1.0.0</version>
         <type>pom</type>
     </dependency>
 </dependencies>
</project>

6
2017-10-07 17:40



Her zaman yaparım ve gerçekten çok yardımcı olur. Ayrıca, posta-deps'lerinizi aynı sayıda JavaMail bağımlılığı ile uyarlamayı öneriyorum. Bu, posta-deps sürüm 1.5.0'ın örneğin JavaMail 1.5.0'daki her şeyi içerdiğini açıkça ortaya koymaktadır. - Alex Oliveira


Kısa cevap: Bunu Maven'de yapamazsın.

Diğer cevaplar sadece "tüm" POM'u bağımlılık yapar. Sorunu çözmez. Başka bir cevap, "tüm" POM'un bağımlılıklarını ithal etmeye çalışır. Bağımlılıklara ihtiyacım yok; "Tüm" POM'un (çocuk) modüllerine ihtiyacım var. Yine, sorunu çözmüyor.

Yan not: JavaMail kitaplığını yanlış kullanıyordum. Sadece bir bağımlılık eklemek için ihtiyacım vardı: com.sun.mail: javax.mail: 1.5.0


3
2018-06-05 04:54



Maven'de tam olarak ne istediğini yapamayacağınız gibi, hayattaki tek amacı bağımlılıkları ve onların versiyonlarını bildiren bir “faturalar” eseri yaratmak yaygınlaşmıştır. - Thorbjørn Ravn Andersen


İçe aktarmaya çalıştığınız pom, bir <dependencies/> bölümü ve hepsini almak istiyorsanız, aşağıdaki kodu deneyebilirsiniz.

(feragat: Bunu bir süredir yapmadım. <dependencyManagement/> bölümünde, bu gibi pom bağımlılığını ekleyin:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>kung.fu<groupId>
            <artifactId>ninja</artifactId>
            <version>1.2.3</version>
            <scope>import</scope>
            <type>pom</type> <!-- Not too sure if you needed this
                                  when it's scoped as import,
                                  but just in case -->
        </dependency>
    </dependencies>
</dependencyManagement>

Bağımlılığı doğrudan doğruya tanımlamanız da söz konusu olabilir. <dependencies/> bölümüne gerek yok <dependencyManagement/> biraz, ama hatırladığım kadarıyla, kapsamlı olmalı import Yukarıda gösterildiği gibi.


1
2018-06-03 11:25





Yukarıda yazmış olduğunuz gibi: Yapamazsın. Ama yaptım ve işte bu. Aşağıdakileri içeren bir pom dosyasını (örneğinizde JavaMail) bulundurduğunuzu varsayalım:

<type>pom</type>
<dependencyManagement><dependencies><dependency></dependencyManagement>

Ve bu pompada adı geçen bütün kavanozları bir yere kopyalamak istiyorsun. Yaptığım buydu ve hızlı çalışma çözümü
Orijinal pompayı açın ve hepsini kopyalayıp yapıştırın bağımlılıklar orijinal pom dosyasından yeni pompanıza olduğu gibi. Tabii ki tüm kopyalamak için maven bağımlılık eklentisi kullanın.


1
2018-01-23 11:42



@Guillaume Darmont'un cevabı nasıl farklı? - Dexter