我正在使用Dropwizard构建一个Web应用程序,并尝试使用Shiro bundle module(Maven 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
,以便在类路径中获取它,但它并不是真正的解决方案。有没有办法:
io.ifar.dw-shiro-bundle-0.0.1-20130412.232035-4.jar
条目我的插件如下:
在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
答案 0 :(得分:2)
我发布这个后就找到了答案。我猜这就是它的原因。
在Maven Archiver的文档中埋藏了Handling Snapshot Versions部分,其中说${artifact.version}
替换为${artifact.baseVersion}
。它的工作原理!最后的20130412.232035-4
将替换为SNAPSHOT
。