maven-assembly-plugin 前置到类路径
maven-assembly-plugin prepending to classpath
我有一个模块,我正在使用 maven-assembly-plugin 创建一个具有依赖项的可执行 jar。当我 运行 安装时,插件会在 jar 名称和所有 jar 内容之前添加项目名称 ("vicinity"),即:
$ 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>
预计到达时间:"vicinity" 前缀来自父 pom 的 <build><finalName>vicinity</finalName>...</build>
。但是将它添加到 jar 中包含的每个文件和依赖项之前是没有意义的。我尝试在我的模块的 pom 中用一个空的 <finalName></finalName>
标记覆盖,但随后我得到了一个破折号。我如何完全摆脱它,只在 jar 中包含正确命名的内容?
另外:我遇到的问题是,当我尝试从命令行 运行 我的主要 class 时,我得到:
$ 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
我猜有两个原因,并且前置来自于这是一个子模块这一事实。第二个是来自父 pom,我猜。
我是否正在尝试做一些不能/不应该做的事情?
万一其他人遇到这个问题,我发现您可以控制 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>
...
我有一个模块,我正在使用 maven-assembly-plugin 创建一个具有依赖项的可执行 jar。当我 运行 安装时,插件会在 jar 名称和所有 jar 内容之前添加项目名称 ("vicinity"),即:
$ 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>
预计到达时间:"vicinity" 前缀来自父 pom 的 <build><finalName>vicinity</finalName>...</build>
。但是将它添加到 jar 中包含的每个文件和依赖项之前是没有意义的。我尝试在我的模块的 pom 中用一个空的 <finalName></finalName>
标记覆盖,但随后我得到了一个破折号。我如何完全摆脱它,只在 jar 中包含正确命名的内容?
另外:我遇到的问题是,当我尝试从命令行 运行 我的主要 class 时,我得到:
$ 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
我猜有两个原因,并且前置来自于这是一个子模块这一事实。第二个是来自父 pom,我猜。
我是否正在尝试做一些不能/不应该做的事情?
万一其他人遇到这个问题,我发现您可以控制 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>
...