[顶部]
Maven Archiver 可以将项目的类路径添加到清单中。这是通过<addClasspath>配置元素完成的。
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
...
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
...
</plugin>
</plugins>
</build>
...
<dependencies>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-utils</artifactId>
<version>1.1</version>
</dependency>
</dependencies>
...
</project>
使用上述配置生成的清单如下所示:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven ${maven.version}
Built-By: ${user.name}
Build-Jdk: ${java.version}
Class-Path: plexus-utils-1.1.jar commons-lang-2.1.jar
[顶部]
如果要创建可执行的 jar 文件,则需要相应地配置 Maven Archiver。你需要告诉它使用哪个主类。这是通过<mainClass>配置元素完成的。这是配置为添加类路径并使用类fully.qualified.MainClass作为主类的示例pom.xml :
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
...
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>fully.qualified.MainClass</mainClass>
</manifest>
</archive>
</configuration>
...
</plugin>
</plugins>
</build>
...
<dependencies>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-utils</artifactId>
<version>1.1</version>
</dependency>
</dependencies>
...
</project>
使用上述配置生成的清单如下所示:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven ${maven.version}
Built-By: ${user.name}
Build-Jdk: ${java.version}
Main-Class: fully.qualified.MainClass
Class-Path: plexus-utils-1.1.jar commons-lang-2.1.jar
[顶部]
有时能够更改类路径很有用,例如在创建瘦 war-files时。这可以通过<classpathPrefix>配置元素来实现。
<project>
...
<build>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
...
<dependencies>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-utils</artifactId>
<version>1.1</version>
</dependency>
</dependencies>
...
</project>
使用上述配置生成的清单类路径如下所示:
Class-Path: lib/plexus-utils-1.1.jar lib/commons-lang-2.1.jar
[顶部]
(自:2.3,见下文)
有时,您可能希望在存档中包含 Maven 存储库样式的目录结构。如果您希望在清单类路径中引用这些目录中的依赖档案,请尝试使用值为'repository'的<classpathLayoutType>元素,如下所示:
<project>
...
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<classpathLayoutType>repository</classpathLayoutType>
<!-- NOTE: Deprecated in version 2.4. Use 'classpathLayoutType' instead.
<classpathMavenRepositoryLayout>true</classpathMavenRepositoryLayout>
-->
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
...
<dependencies>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-utils</artifactId>
<version>1.1</version>
</dependency>
</dependencies>
...
</project>
注意:在 2.3 版中,可以通过将<classpathMavenRepositoryLayout>元素设置为值true来使用此功能。此配置选项在 2.4 版中已*弃用*,支持更通用的<classpathLayoutType>元素,其中'repository'的值将呈现相同的行为。
使用上述配置生成的清单类路径如下所示:
Class-Path: lib/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar lib/commons-lang/commons-lang/2.1/commons-lang-2.1.jar
[顶部]
(自:2.4)
有时,您可能在自己的存档中拥有自定义格式的依赖存档,它不符合上述任何类路径布局。如果您希望在存档的清单类路径中为依赖存档定义自定义布局,请尝试使用值为'custom'的<classpathLayoutType>元素以及<customClasspathLayout>元素,如下所示:
<project>
...
<build>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathLayoutType>custom</classpathLayoutType>
<customClasspathLayout>WEB-INF/lib/$${artifact.groupIdPath}/$${artifact.artifactId}-$${artifact.version}$${dashClassifier?}.$${artifact.extension}</customClasspathLayout>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
...
<dependencies>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-utils</artifactId>
<version>1.1</version>
</dependency>
</dependencies>
...
</project>
这个类路径布局比前面的例子更复杂一些。要了解如何解释<customClasspathLayout>配置的值,了解解析值中的表达式时应用的规则很有用:
使用上述配置生成的清单类路径如下所示:
Class-Path: WEB-INF/lib/org/codehaus/plexus/plexus-utils-1.1.jar WEB-INF/lib/commons-lang/commons-lang-2.1.jar
[顶部]
(从 2.4 开始)
根据您构建存档的方式,您可能能够指定快照依赖存档是否包含在版本后缀'-SNAPSHOT'中,或者是否使用该存档的唯一时间戳和内部版本号。例如,Assembly Plugin允许您在其<dependencySet > 描述符部分的<outputFileNameMapping>元素中做出此决定。
要强制使用“-SNAPSHOT”版本命名,只需禁用<useUniqueVersions>配置元素,如下所示:
<useUniqueVersions>false</useUniqueVersions>
要强制使用“-SNAPSHOT”版本命名,只需将上面自定义布局示例中的“$ artifact.version”替换为“ $ artifact.baseVersion ” ,如下所示:
<customClasspathLayout>WEB-INF/lib/${artifact.groupIdPath}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}</customClasspathLayout>
完整的示例配置如下所示:
<project>
...
<build>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathLayoutType>custom</classpathLayoutType>
<customClasspathLayout>WEB-INF/lib/${artifact.groupIdPath}/${artifact.artifactId}-${artifact.version}${dashClassifier?}.${artifact.extension}</customClasspathLayout>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
...
</project>