Maven不会将目标依赖项添加到目标jar

我有一个maven项目,除了使用普通的repos还使用本地jar。 jar以清单的方式定义:

 com.mirrorworlds lstnef 1.0.0 false system ${basedir}/lib/lstnef-1.0.0.jar  

安装脚本成功运行,但在应用程序启动后我得到了这个:

 Exception in thread "main" java.lang.NoClassDefFoundError: com/mirrorworlds/lifestreams/mail/tnef/internet/TnefMultipart at ...processMails(MailProcessor.java:57) at ...main(MailReader.java:42) 

当我查看目标jar时,我也找不到这些类,尽管它们应该在lstnef-1.0.0.jar

我会感谢任何解决这个谜团的建议。

我使用的可能解决方案是在编译阶段之前将此系统JAR安装到本地Maven存储库中,然后将此JAR作为Maven工件引用。 即

  org.apache.maven.plugins maven-install-plugin 2.2   your-file false validate  ${pom.basedir}/lib/your-file-4.8.jar default your-file your-file 4.8 jar true   install-file     

然后引用它:

  your-file your-file 4.8  

检查Maven文档: http : //maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope

 system This scope is similar to provided except that you have to provide the JAR which contains it explicitly. The artifact is always available and is not looked up in a repository. 

您需要自己手动将此JAR提供给运行时环境。

或者,我会推荐这种方法,设置你自己的存储库,你可以添加JARS并以正常的maven方式管理它们

使用系统范围告诉maven,在您提供的系统位置的maven“工作时间”内,依赖关系是可用的(这与使用正常依赖关系解析的提供范围不同)。 之后,您必须自己“提供”文件 – 例如将其放入CLASSPATH(因此与提供的范围相似)。 要将文件安装到本地存储库缓存,您可以参考以下文章:

http://maven.apache.org/plugins/maven-install-plugin/examples/specific-local-repo.html

你可以省略localrepository路径,maven将安装在他的本地“缓存”中,它会在转到远程存储库之前查找任何依赖关系。

当您使用Class-Path条目构建manifest.mf时,Maven也会支持您(例如,当您的应用程序在localhost上运行时):要查看它的工作原理,请阅读此处 。

你需要使用shade插件http://maven.apache.org/plugins/maven-shade-plugin/

  ...    org.apache.maven.plugins maven-shade-plugin 2.1   package  shade      org.sonatype.haven.ExodusCli 123          ...