规范化远程Maven repo JAR文件名?

时间:2014-02-24 12:45:57

标签: java maven dependencies

我正在使用Dropwizard构建一个Web应用程序,并尝试使用Shiro bundle moduleMaven repo)来集成Shiro身份验证。

我的问题是,在远程Maven仓库中,文件名是dw-shiro-bundle-0.0.1-20130412.232035-4.jar,而不是dw-shiro-bundle-0.0.1-SNAPSHOT.jar。我理解当你构建相同的SNAPSHOT版本四次以避免破坏前三个版本时会发生这种情况,并且索引会负责查找最新的版本。

但是我也在关注this advice以避免使用maven-shade-plugin并自己有效地进行着色,因为最终的JAR太大了。 maven-assembly-plugin配置为将Shiro捆绑JAR复制到lib/dw-shiro-bundle-0.0.1-SNAPSHOT.jar,但在最终JAR的MANIFEST.MF中,依赖关系列为io.ifar.dw-shiro-bundle-0.0.1-20130412.232035-4.jar,因此我得到{{1}在运行时。

解决方法是手动将ClassDefNotFoundError jar重命名为lib,以便在类路径中获取它,但它并不是真正的解决方案。有没有办法:

  1. 修复io.ifar.dw-shiro-bundle-0.0.1-20130412.232035-4.jar条目
  2. 规范化第三方JAR的名称,因为它们被Maven下载以删除任何内部版本号,或
  3. 自动重命名JAR文件以包含内部版本号?
  4. 我的插件如下:

    MANIFEST.MF

    maven-jar-plugin

    <configuration> <forceCreation>true</forceCreation> <archive> <manifest> <mainClass>${mainClass}</mainClass> <addClasspath>true</addClasspath> <classpathLayoutType>custom</classpathLayoutType> <customClasspathLayout>lib/${artifact.groupId}.${artifact.artifactId}-${artifact.version}${dashClassifier?}.${artifact.extension}</customClasspathLayout> </manifest> </archive> </configuration>

    maven-dependency-plugin

    <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <overWriteReleases>true</overWriteReleases> <overWriteSnapshots>true</overWriteSnapshots> <overWriteIfNewer>true</overWriteIfNewer> <prependGroupId>true</prependGroupId> </configuration> </execution> </executions>

    assembly.xml

1 个答案:

答案 0 :(得分:2)

我发布这个后就找到了答案。我猜这就是它的原因。

在Maven Archiver的文档中埋藏了Handling Snapshot Versions部分,其中说${artifact.version}替换为${artifact.baseVersion}。它的工作原理!最后的20130412.232035-4将替换为SNAPSHOT