2015-01-20 137 views
0

我有一个模块,我使用maven-assembly-plugin创建一个可执行的jar与依赖关系。当我运行安装,插件会预先考虑罐子名之前的项目(“附近”)的名称和所有jar内容,即: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:在 “附近” 前面加上从父POM的<build><finalName>vicinity</finalName>...</build>到来。但是将这个前置到jar中包含的每个文件和依赖项是没有意义的。我试着用模块的pom中空的<finalName></finalName>标签覆盖,但是后来我得到了一个破折号。我如何摆脱这一切,只是在罐子里包含正确命名的内容?

ALSO:我遇到的问题是,当我尝试在命令行中运行我的主类,我得到:

$ 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

万一别人有这个问题,我发现,你可以控制的基本目录是否包含在dist.xml <includeBaseDirectory>false</includeBaseDirectory>

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