Bağımlı bir maven kavanozu yeniden adlandırmak mümkün mü?


138

Şu anda böyle bir kavanoz oluşturmak için bağımlılıkları olan kavanozları kullanıyorum. Ancak, kavanozumun adı biraz uzun.

Bu kavanoz bir AS400 üzerinde RPG programları tarafından kullanıldığından, bu geliştiriciler için hayatı biraz daha kolaylaştırmak için kısaltmak istiyorum. Ancak, elden başka, kavanozu normalden yeniden adlandırmanın bir yolunu bulamadım project-name-version-classifier-jar-with-dependencies.jar. Gibi bir şey istiyorumproject-name-version-classifier-full.jar

Bunu temelde bağımlılıklara sahip jar derleme tanımlayıcısını kopyalayıp tam olarak çağırmadan yapmanın bir yolu var mı?

Ayrıca, sınıf yolu monte edilmemiş kavanozun depoda saklanmasını sağlamaya devam etmek istiyorum.

İki esere ihtiyacım var. Sınıflandırıcı ile yapının bulunduğu bölgeyi tutan kavanoz. Bölgeyi de içeren tüm bağımlılıkları olan kavanoz.

project-name-version-region-full.jarve project-name-version-region.jardepoda saklanmalıdır. İlk örnekte sınıflandırıcı bölge doludur, 2. bölgede bölge. İkincisi çalışıyor.

Yanıtlar:


227

Kavanoza istediğiniz adı vermek için finalName özelliğini belirtebilir ve "bağımlılıklara sahip jar" sonekini önlemek için appendAssemblyId öğesinin false olması gerektiğini belirtebilirsiniz .

Aşağıdaki yapılandırmada "test.jar" adlı bir kavanoz çıkacak

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <version>2.2-beta-4</version>
  <executions>
    <execution>
      <id>jar-with-dependencies</id>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
      <configuration>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <finalName>test</finalName>
        <appendAssemblyId>false</appendAssemblyId>
      </configuration>
    </execution>
  </executions>
</plugin>

Güncelleme: yorumlarınıza dayanarak, dahili tanımlayıcıyı kullanmak işe yaramaz. Bunun montaj eklentisinin son sürümlerinde bir hata olduğuna inanıyorum - sınıflandırıcılar için desteği kaldırdılar, ancak yerleşik bir tanımlayıcı kullanırsanız kimlik düzeltildi, bu yüzden büyük bir daft adı ile sonuçlanıyorsunuz.

Geçici bir çözüm olarak, bağımlılıkları olan jar tanımlayıcısı tarafından kullanılan derleme tanımlayıcısını kopyalayabilir ve kimliği değiştirebilirsiniz.

Bu örnek bir isim olması gerekir eğer öyleyse, finalName kısmına ekleniyor montaj id sonuçlanacaktır bölge full.jar , siz finalName belirtebilirsiniz bölge gibi montaj id dolu . Bu, region-full.jar adlı hedefe giden bir dosyayla sonuçlanır, ancak yine de Maven deposuna , sınıflandırıcı olarak tam kullanılan ekli bir yapı olarak yükleneceğini unutmayın . Bu kimlik diğer toplantınız için olandan farklı olduğu sürece herhangi bir çarpışma olmamalıdır.

Pom konfigürasyonu şöyle görünecektir.

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <version>2.2-beta-4</version>
  <executions>
    <execution>
      <id>jar-with-dependencies</id>
      <phase>prepare-package</phase>
      <goals>
        <goal>single</goal>
      </goals>
      <configuration>
        <descriptors>
          <descriptor>src/main/assembly/jar-assembly.xml</descriptor>
        </descriptors>
        <finalName>region</finalName>
      </configuration>
    </execution>
  </executions>
</plugin>

ve src / main / assembly içindeki jar-assembly.xml şöyle:

<assembly>
  <id>full</id>
  <formats>
    <format>jar</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <dependencySets>
    <dependencySet>
      <unpack>true</unpack>
      <scope>runtime</scope>
    </dependencySet>
  </dependencySets>
  <fileSets>
    <fileSet>
      <directory>${project.build.outputDirectory}</directory>
    </fileSet>
  </fileSets>
</assembly>

Bu ayrıntı üzerinde çalışıyor Zengin. Temel olarak, saklamak için iki sınıflandırıcı esere ihtiyacım var. AppendAssemblyId açıkken, biri sınıflandırıcısız, sınıflandırıcı sürümü ve bağımlılık içeren jar sürümü olan 3 yapay nesne vardı. appendAssemblyID kapalıyken uber kavanoz sınıflandırıcı olmayan sürüme yüklenir. Bu adamlar, onlar için inşa edildiğini söyleyen bir bölge + tam tabanlı sınıflandırıcı kullanmanız gerekir. Ne yazık ki sınıflandırıcı etiketini eklemek işe yaramıyor.
Mike Cornell

36

Ben ayrı bir jar-assembly.xml gerek kalmadan bunu doğrudan pom yapılandırmak için bir yol buldum düşünüyorum.

FinalName artifactId ve sürüm ile belirtilmesi dışında, temel olarak Rich'in cevabı ile aynıdır.

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <finalName>${project.artifactId}-${project.version}-full</finalName>
        <appendAssemblyId>false</appendAssemblyId>
        <archive>
            <manifest>
                <mainClass>com.mycompany.MyMainClass</mainClass>
            </manifest>
        </archive>
    </configuration>
    <executions>
        <execution>
            <id>make-my-jar-with-dependenciess</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

8

Buradaki gönderiler ve maven belgelerinde bazı kazmalar sayesinde, özel bir adla genel bir kerelik yeniden paketlenmiş yürütülebilir kavanoz montajı için aşağıdaki yapılandırmayı buldum.

Pom.xml dosyasında:

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2</version>
    <executions>
        <execution>
            <id>exe</id>
            <phase>package</phase>
            <goals><goal>single</goal></goals>
            <configuration>
                <finalName>MyJarName</finalName>
                <attach>false</attach>
                <appendAssemblyId>false</appendAssemblyId>
                <descriptors>
                    <descriptor>assembly.xml</descriptor>
                </descriptors>
                <archive>
                    <manifest>
                        <mainClass>karlthepagain.MyMain</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </execution>
    </executions>
</plugin>

Assembly.xml dosyasında:

<assembly>
    <id>exe</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <outputDirectory>/</outputDirectory>
            <unpack>true</unpack>
            <scope>runtime</scope>
        </dependencySet>
    </dependencySets>
</assembly>

Bu, MyJarName.jartüm bağımlılıkları aynı kavanoza ve belirtilene yeniden paketlenmiş olarak üretecektir Main-Class: karlthepagain.MyMain.


3

Rich'e beni doğru yöne yönlendirdiği için kredi vereceğim, ancak Rich'in biraz kapalı olduğu için benim için çalışan çözümü göndermek istedim:

Benim jar-assembly.xml, profilimde bir özellik olarak depolanan bölge için derleme kimliğinin değişmesine izin veren şöyle görünüyordu:

<assembly>
  <id>${env}-full</id>
    <formats>
      <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
      <dependencySet>
        <unpack>true</unpack>
        <scope>runtime</scope>
      </dependencySet>
    </dependencySets>
    <fileSets>
      <fileSet>
        <directory>${project.build.outputDirectory}</directory>
      </fileSet>
    </fileSets>
</assembly>

Maven-assembly-plugin ayarlarında finalName parametresini kullanmadım, çünkü bu benim projemi proje adı-sürüm-env-full.jar adıyla oluşturdu, burada env-full sınıflandırıcıydı.

Montaj xml'sinin yapıdaki öğelerle parametrelenebileceğini öğrendiğimde şaşırdım. Tam da aradığım şey buydu.


2

Bu benim için çalıştı

<build>
    <finalName>anynameyoulike</finalName>
    <plugins>           
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>                   
                <appendAssemblyId>false</appendAssemblyId>
                <archive>
                    <manifest>
                        <mainClass>com.mycompany.MyMainClass</mainClass>
                    </manifest>
                </archive>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id> <!-- this is used for inheritance merges -->
                    <phase>package</phase> <!-- bind to the packaging phase -->
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

1

${project.build.finalName}Son ad olarak orijinal jar dosyasının üzerine yazmak da mümkündür :

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
   <executions>
      <execution>
          <phase>package</phase>
          <goals>
             <goal>single</goal>
          </goals>
      </execution>
   </executions>
   <configuration>
     <descriptorRefs>
       <descriptorRef>jar-with-dependencies</descriptorRef>
     </descriptorRefs>
     <finalName>${project.build.finalName}</finalName>
     <appendAssemblyId>false</appendAssemblyId>
   </configuration>
 </plugin>
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.