无法使用maven-assembly-plugin设置类路径

时间:2013-03-28 15:01:50

标签: java maven-2 classpath pom.xml executable-jar

我正在创建控制台应用程序。我想在jar文件夹中的conf文件之外放置配置文件,并希望将此文件夹注册为我的应用程序的类路径。

我运行mvn assembly:single命令,得到一个jar文件,但是当我尝试用java -jar MyApplication.jar运行这个JAR时,它无法读取配置文件。

我的pom.xml

中有这个代码段
<build>
    <finalName>MyApplication</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.1</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-eclipse-plugin</artifactId>
            <version>2.7</version>  
            <configuration>
                <projectNameTemplate>
                    [artifactId]-[version]
                </projectNameTemplate>
                <wtpmanifest>true</wtpmanifest>
                <wtpapplicationxml>true</wtpapplicationxml>
                <wtpversion>2.0</wtpversion>
                <manifest>
                    ${basedir}/src/main/resources/META-INF/MANIFEST.MF
                </manifest>
            </configuration>

        </plugin>

        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <appendAssemblyId>false</appendAssemblyId>
                <archive>
                    <manifest>
                        <mainClass>com.my.test.App</mainClass>
                    </manifest>
                    <manifestEntries>
                        <Class-Path>.conf/</Class-Path>
                    </manifestEntries>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

2 个答案:

答案 0 :(得分:9)

这是我的错,我不得不把

<Class-Path>./conf/</Class-Path>

而不是

<Class-Path>.conf/</Class-Path>

答案 1 :(得分:2)

我通常不使用程序集插件在MANIFEST中生成类路径条目,而是使用此配置生成maven-jar-plugin:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.3.1</version>
    <configuration>
      <archive>
        <index>true</index>
        <manifest>
          <addClasspath>true</addClasspath>
          <addExtensions>false</addExtensions>
          <mainClass>com.my.test.App</mainClass>
        </manifest>
      </archive>
    </configuration>
  </plugin>

我只使用程序集插件将依赖项(包括可传递的)复制到我的构建目录中,并创建分发存档。您也可以使用依赖插件来执行此操作。 如果要将依赖项复制到分发树的子目录中,请使用maven-jar-plugin配置中的classpathPrefix来匹配程序集描述符依赖项目标。

方面