Maven:简单的 classpathLayoutType 正在生成类似于存储库 classpathLayoutType 的类路径
Maven: Simple classpathLayoutType is generating classpath similar to repository classpathLayoutType
我有一个 Maven 项目,它执行以下操作:生成 jar 并将其复制到 target/dist
目录中。将所有依赖项 jar 复制到 target/dist/lib
目录中。 dist
文件夹将被分发。执行生成的jar 时,需要在类路径中执行依赖jar。当我在 pom.xml、
中添加以下代码时
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
在生成的jar文件中,生成classpath如下:
Class-Path: lib/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar lib/com/google/code/gson/gson/2.8.2/gson-2.8.2.jar
显然,这行不通,因为类路径不同。我希望类路径如下:
Class-Path: lib/commons-logging-1.1.1.jar lib/gson-2.8.2.jar
我提到了 this page。根据文档,默认情况下 classpathLayoutType 很简单,这就是我所需要的。但是在存储库布局类型中生成的类路径。我什至尝试明确添加以下标签,但没有成功。
<classpathLayoutType>simple</classpathLayoutType>
为什么 simple layoutType 会像 repository layoutType 一样生成类路径?
我已经使用自定义布局类型实现了我需要的功能,如下所示:
<classpathLayoutType>custom</classpathLayoutType>
<customClasspathLayout>lib/$${artifact.artifactId}-$${artifact.version}$${dashClassifier?}.$${artifact.extension}</customClasspathLayout>
我唯一的问题是为什么简单的布局类型不起作用?
您使用的是哪个 MavenArchiver 插件? 3.0.2 有 a bug in ManifestConfiguration.class:
public String getClasspathLayoutType()
{
return "simple".equals(this.classpathLayoutType) ? "repository" : this.classpathLayoutType;
}
如您所见,ClasspathLayoutType 的方法returns 类型错误。
在 MavenArchiver 版本 3.1.1 中,错误已修复。
布局类型的可能 returns 是:
public static final String CLASSPATH_LAYOUT_TYPE_SIMPLE = "simple";
public static final String CLASSPATH_LAYOUT_TYPE_REPOSITORY = "repository";
public static final String CLASSPATH_LAYOUT_TYPE_CUSTOM = "custom";
只需尝试更高的固定版本。
我有一个 Maven 项目,它执行以下操作:生成 jar 并将其复制到 target/dist
目录中。将所有依赖项 jar 复制到 target/dist/lib
目录中。 dist
文件夹将被分发。执行生成的jar 时,需要在类路径中执行依赖jar。当我在 pom.xml、
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
在生成的jar文件中,生成classpath如下:
Class-Path: lib/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar lib/com/google/code/gson/gson/2.8.2/gson-2.8.2.jar
显然,这行不通,因为类路径不同。我希望类路径如下:
Class-Path: lib/commons-logging-1.1.1.jar lib/gson-2.8.2.jar
我提到了 this page。根据文档,默认情况下 classpathLayoutType 很简单,这就是我所需要的。但是在存储库布局类型中生成的类路径。我什至尝试明确添加以下标签,但没有成功。
<classpathLayoutType>simple</classpathLayoutType>
为什么 simple layoutType 会像 repository layoutType 一样生成类路径?
我已经使用自定义布局类型实现了我需要的功能,如下所示:
<classpathLayoutType>custom</classpathLayoutType>
<customClasspathLayout>lib/$${artifact.artifactId}-$${artifact.version}$${dashClassifier?}.$${artifact.extension}</customClasspathLayout>
我唯一的问题是为什么简单的布局类型不起作用?
您使用的是哪个 MavenArchiver 插件? 3.0.2 有 a bug in ManifestConfiguration.class:
public String getClasspathLayoutType()
{
return "simple".equals(this.classpathLayoutType) ? "repository" : this.classpathLayoutType;
}
如您所见,ClasspathLayoutType 的方法returns 类型错误。 在 MavenArchiver 版本 3.1.1 中,错误已修复。 布局类型的可能 returns 是:
public static final String CLASSPATH_LAYOUT_TYPE_SIMPLE = "simple";
public static final String CLASSPATH_LAYOUT_TYPE_REPOSITORY = "repository";
public static final String CLASSPATH_LAYOUT_TYPE_CUSTOM = "custom";
只需尝试更高的固定版本。