Maven 2 Maven-如何向jar添加任意类路径条目?

Maven 2 Maven-如何向jar添加任意类路径条目?,maven-2,build,jar,classpath,Maven 2,Build,Jar,Classpath,我有一个不寻常的情况,需要将任意类路径条目(指向jar文件)添加到可执行jar的清单中。(这适用于Swing桌面应用程序。) maven jar插件使用maven依赖项为jar清单生成“类路径”条目,并且似乎没有任何添加任意条目的方法 我还研究了使用“-classpath”参数将任意类路径条目硬编码到启动应用程序的批处理文件中,但我不知道如何让Maven将类路径过滤到批处理文件中。更新:下面介绍如何将类路径过滤到自定义清单中 maven依赖插件的构建类路径目标可以配置为将类路径输出到属性格式的文

我有一个不寻常的情况,需要将任意类路径条目(指向jar文件)添加到可执行jar的清单中。(这适用于Swing桌面应用程序。)

maven jar插件使用maven依赖项为jar清单生成“类路径”条目,并且似乎没有任何添加任意条目的方法


我还研究了使用“-classpath”参数将任意类路径条目硬编码到启动应用程序的批处理文件中,但我不知道如何让Maven将类路径过滤到批处理文件中。

更新:下面介绍如何将类路径过滤到自定义清单中

maven依赖插件的
构建类路径
目标可以配置为将类路径输出到属性格式的文件(即类路径=[classpath])。然后配置filters元素以使用生成的类路径文件,并配置要筛选的资源目录

例如:

<build>
  <plugins>
    <plugin>
      <artifactId>maven-dependency-plugin</artifactId>
      <version>2.1</version>
      <executions>
        <execution>
          <phase>generate-resources</phase>
          <goals>
            <goal>build-classpath</goal>
          </goals>
        </execution>
      </executions>
      <configuration>
        <outputFilterFile>true</outputFilterFile>
        <outputFile>${project.build.directory}/classpath.properties</outputFile>
      </configuration>
    </plugin>
    <plugin>
      <artifactId>maven-jar-plugin</artifactId>
      <configuration>
        <archive>
          <manifestFile>
            ${project.build.outputDirectory}/META-INF/MANIFEST.MF
          </manifestFile>
        </archive>
      </configuration>
    </plugin>
  </plugins>
  <filters>
    <filter>${project.build.directory}/classpath.properties</filter>
  </filters>
  <resources>
    <resource>
      <directory>src/main/resources</directory>
      <filtering>true</filtering>
    </resource>
  </resources>
</build>
注意:使用标准窗口路径分隔符(
\
)进行此处理时存在错误,生成路径没有分隔符(注意,它在Linux上工作正常)。通过在
构建类路径
目标的配置中指定
\\\\\\
,可以为Windows正确生成类路径


您可以在的配置中自定义清单。为此,您需要在pom中添加类似的内容

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  ...
  <configuration>
    <archive>
      <index>true</index>
      <manifest>
        <addClasspath>true</addClasspath>
      </manifest>
      <manifestEntries>
        <mode>development</mode>
        <url>${pom.url}</url>
        <key>value</key>
      </manifestEntries>
    </archive>
  </configuration>
  ...
</plugin>

org.apache.maven.plugins
提供了很多选择。有关配置类路径的选项,请参见


如果这些都不适用于您,您可以设置包含所需条目的属性,并使用来使用这些属性填充清单

尝试像在这个bug中那样进行操作,即使用manifestEntries/Class Path元素合并条目


我发现这个问题有一个简单的解决办法。您可以将
元素添加到
元素,并将
true
设置为
元素。所以
元素的值会自动添加到类路径中。示例:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <configuration>
    <archive>
      <manifest>
        <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
        <addClasspath>true</addClasspath>
        <mainClass>your.main.Class</mainClass>
      </manifest>
      <manifestEntries>
        <Class-Path>../conf/</Class-Path>
      </manifestEntries>
    </archive>
  </configuration>
</plugin>

org.apache.maven.plugins
maven jar插件
真的
真的
你的主课
../conf/

出于兴趣,为什么要添加类路径条目,而不是指定依赖项并让Maven计算类路径?这是一种复杂的部署情况——简而言之,我有一个jar,它位于部署目标中的一个众所周知的位置,我想为它添加一个绝对路径。maven知道依赖关系,但不会部署它。在另一个类似的情况下,我想用不同的名称将相同的依赖项添加到类路径中。这是在企业环境中工作时遇到的一件疯狂的一次性事情:)我想使用依赖范围不是一个选项(我想是“提供的”)。是的,我同意,这将是一个令人讨厌的解决办法。我确实处理了“提供的”和“依赖性”作用域,但这些作用域的工作方式与您预期的不同。我知道如何使用过滤,但我不知道如何将类路径过滤到文件中。类路径是否有内置属性?我在《入门指南》中提供了一个指向筛选部分的链接,您只需配置包含清单的资源目录即可启用筛选。页面中包含了一个示例,谢谢,但是将类路径插入筛选清单文件的magic maven属性是什么?谢谢,这是我第一次尝试生成筛选文件,打开了一些有趣的可能性…是的,你可以用过滤做各种有用的事情。注意:这种方法与JAR索引不兼容!有关详细信息,请参阅。@Laf谢谢!这对我有用。但我必须排除addClasspath,因为它将所有内容(lib、jar等)添加到我的清单中,而我只需要一个文件夹(config/)。不过,谢谢!
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <configuration>
    <archive>
      <manifest>
        <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
        <addClasspath>true</addClasspath>
        <mainClass>your.main.Class</mainClass>
      </manifest>
      <manifestEntries>
        <Class-Path>../conf/</Class-Path>
      </manifestEntries>
    </archive>
  </configuration>
</plugin>