2015-01-20 3 views
0

У меня есть модуль, и я использую maven-assembly-plugin для создания исполняемого баннера с зависимостями. При запуске установки, плагин дописывает имя проекта («окрестности») перед именем баночки и все содержимое фляги, то есть:maven-assembly-plugin, предваряющий путь к классам

$ jar -tvf vicinity-confirm-assets.jar | more 
    0 Tue Jan 20 17:18:10 EST 2015 META-INF/ 
    213 Tue Jan 20 17:18:08 EST 2015 META-INF/MANIFEST.MF 
    0 Tue Jan 20 17:18:10 EST 2015 vicinity/ 
    0 Thu Nov 13 20:52:16 EST 2014 vicinity/META-INF/ 
    134 Thu Nov 13 20:52:14 EST 2014 vicinity/META-INF/MANIFEST.MF 
    0 Thu Nov 13 20:52:06 EST 2014 vicinity/org/ 
    0 Thu Nov 13 20:52:10 EST 2014 vicinity/org/boon/ 
    0 Thu Nov 13 20:52:10 EST 2014 vicinity/org/boon/cache/ 
    0 Thu Nov 13 20:52:10 EST 2014 vicinity/org/boon/collections/ 
    0 Thu Nov 13 20:52:10 EST 2014 vicinity/org/boon/concurrent/ 
    ... 
    0 Tue Jan 20 17:17:50 EST 2015 vicinity/META-INF/maven/com.thingy.webapp/confirmassets/ 
    2208 Tue Jan 20 17:17:44 EST 2015 vicinity/META-INF/maven/com.thingy.webapp/confirmassets/pom.xml 
    127 Tue Jan 20 16:25:22 EST 2015 vicinity/META-INF/maven/com.thingy.webapp/confirmassets/pom.properties 

Вот плагин XML:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.4</version> 
      <configuration> 
       <archive> 
        <manifest> 
         <mainClass>com.thingy.webapp.confirmassets.ToolbarResourcesUrlTester</mainClass> 
        </manifest> 
       </archive> 
       <descriptors> 
        <descriptor>src/main/resources/dist.xml</descriptor> 
       </descriptors> 
      </configuration> 
      <executions> 
       <execution> 
        <id>make-assembly</id> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

и вот dist.xml:

<?xml version='1.0' encoding='UTF-8'?> 
<assembly> 
    <id>confirm-assets</id> 
    <formats> 
     <format>jar</format> 
    </formats> 

    <dependencySets> 
     <dependencySet> 
      <scope>runtime</scope> 
      <unpack>true</unpack> 
      <unpackOptions> 
       <excludes> 
        <exclude>**/LICENSE*</exclude> 
        <exclude>**/README*</exclude> 
       </excludes> 
      </unpackOptions> 
     </dependencySet> 
    </dependencySets> 

    <fileSets> 
     <fileSet> 
      <directory>${project.build.outputDirectory}</directory> 
      <outputDirectory>/</outputDirectory> 
     </fileSet> 
     <fileSet> 
      <directory>src/main/resources/META-INF/services</directory> 
      <outputDirectory>META-INF/services</outputDirectory> 
     </fileSet> 
    </fileSets>  
</assembly> 

ETA: «окрестности» перед именем исходит от родителя пОМ-х <build><finalName>vicinity</finalName>...</build>. Но нет смысла добавлять это к каждому файлу и зависимости, включенным в банку. Я попытался переопределить пустой тег <finalName></finalName> в моем модуле, но затем я получил предел. Как мне избавиться от этого вообще и просто включить правильно названное содержимое в банку?

ТАКЖЕ: Проблема, которую я имею что когда я пытаюсь запустить мой основной класс из командной строки, я получаю:

$ java -jar vicinity-confirm-assets.jar 
Error: Could not find or load main class com.thingy.webapp.confirmassets.ToolbarResourcesUrlTester 

Кроме того, есть два Manifest.mf файлов.

$ jar -tvf vicinity-confirm-assets.jar | grep MANI 
    213 Tue Jan 20 18:07:26 EST 2015 META-INF/MANIFEST.MF 
    134 Thu Nov 13 20:52:14 EST 2014 vicinity/META-INF/MANIFEST.MF 

Первый:

Manifest-Version: 1.0 
Built-By: barclaydunn 
Build-Jdk: 1.6.0_65 
Created-By: Apache Maven 3.1.1 
Main-Class: com.thingy.webapp.confirmassets.ToolbarResourcesUrlTest 
er 
Archiver-Version: Plexus Archiver 

Второе:

Manifest-Version: 1.0 
Built-By: slandelle 
Build-Jdk: 1.7.0_65 
Created-By: Apache Maven 3.2.2 
Archiver-Version: Plexus Archiver 

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

Я пытаюсь сделать что-то, что не может/не должно быть сделано?

ответ

0

В случае, если кто-то имеет эту проблему, я обнаружил, что вы можете контролировать, является ли базовый каталог включены <includeBaseDirectory>false</includeBaseDirectory> в dist.xml:

<?xml version='1.0' encoding='UTF-8'?> 
<assembly> 
    <id>confirm-assets</id> 
    <formats> 
     <format>jar</format> 
    </formats> 

    <includeBaseDirectory>false</includeBaseDirectory> 
    ... 

Для получения дополнительной информации см http://maven.apache.org/plugins/maven-assembly-plugin/advanced-descriptor-topics.html#Using_an_Alternative_Assembly_Base_Directory

Смежные вопросы