Maven依赖条带版本会创建错误的类路径

时间:2015-07-27 12:03:32

标签: java eclipse maven

我正在尝试使用Maven(通过Eclipse)编译项目,同时从依赖项JAR中剥离版本。我的pom.xml中有以下内容:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<executions>
    <execution>
        <id>copy-dependencies</id>
        <phase>prepare-package</phase>
        <goals>
            <goal>copy-dependencies</goal>
        </goals>
        <configuration>
            <outputDirectory>${project.build.directory}/lib</outputDirectory>
            <overWriteReleases>false</overWriteReleases>
            <overWriteSnapshots>false</overWriteSnapshots>
            <overWriteIfNewer>true</overWriteIfNewer>
            <stripVersion>true</stripVersion>
        </configuration>
    </execution>
</executions>
</plugin>

实际上,JAR被复制到lib /而没有版本号。唉,我得到ClassNotFound,因为生成的可执行JAR中的MANIFEST.MF包含一个引用文件的类路径,包括版本号,当然不存在。

我做错了什么,我该如何解决?

编辑:使用maven-jar-plugin:

创建JAR
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
    <archive>
        <manifest>
            <addClasspath>true</addClasspath>
            <classpathPrefix>lib/</classpathPrefix>
            <mainClass>my.main.class</mainClass>
            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
          <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
        </manifest>
    </archive>
</configuration>
</plugin>

我正在使用Run as -> Maven Install(带有m2e插件的Eclipse)

1 个答案:

答案 0 :(得分:4)

更改maven-jar-plugin以创建不带版本

的自定义类路径布局

示例:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.0.2</version>
            <configuration>
                <archive>
                    <manifest>
                        <classpathLayoutType>custom</classpathLayoutType>
                        <customClasspathLayout>lib/$${artifact.artifactId}.$${artifact.extension}</customClasspathLayout>
                        <addClasspath>true</addClasspath>
                    </manifest>
                </archive>
            </configuration>
        </plugin>