如何在使用maven构建的war中包含系统依赖项

我已经在互联网上搜索了一段时间,我无法弄清楚如何配置maven-war插件或类似的东西,以便系统依赖项包含在内置战争(WEB-INF / lib文件夹)中

我在jar-build的情况下使用maven依赖插件:

 maven-dependency-plugin   install  copy-dependencies   ${project.build.directory}/lib     

但是我无法理解在战争构建的情况下要做什么。 我尝试过使用maven-war插件,但它不包括构建中的系统依赖性。

[UPDATE]

我有类型的依赖:

  LoginRadius LoginRadius system 1.0 ${basedir}\lib\LoginRadius-1.0.jar  

在我的POM中,当构建war时,这些依赖项不包含在WEB-INF / lib中。

让我试着总结一下我尝试的选项:

${java.home}/lib/jfxrt.jar

这不起作用! 此外,只有jar子名称,排除其他一切,所以如果你愿意尝试然后尝试

${java.home}/lib/jfxrt.jar,**/*

Jatin的答案看起来有点复杂,我试图再次通过POM来弄清楚提到的系统jar在WEB-INF POM中的确切位置。

无论如何,我最终使用了这个解决方案,这个解决方案最初没有工作,但经过一段时间后,一些修正工作:

使用以下命令installed the jar in my local repository中:

mvn install:install-file -Dfile="C:\Users\hp\Documents\NetBeansProjects\TwitterAndLoginRadiusMaven\lib\LoginRadius-1.0.jar" -DgroupId=LoginRadius -DartifactId=LoginRadius -Dversion=1.0 -Dpackaging=jar

运行上面的命令后,我将POM中的依赖项更改为

  LoginRadius LoginRadius  1.0   

注 – 请参阅我已评论系统范围和systemPath。

现在构建战争,在WEB-INF / lib中包含此LoginRadius-1.0.jar

如果您的意思是jar依赖项,那么下面是一个示例pom.xml,它获取所需文件并生成war文件:

   install ${project.basedir}/src/main/java ${project.basedir}/src/test/java ${project.basedir}/target/classes ${project.basedir}/target/test-classes   ${project.basedir}/src/main/resources     ${project.basedir}/src/test/resources      org.apache.maven.plugins maven-compiler-plugin 2.0.2  1.5 1.5 true    maven-war-plugin 2.4  true   ui   **    lib WEB-INF  **/*.xml **/log4j.properties   //edited below  lib WEB_INF/lib  **/*.jar    ${project.basedir}/WEB-INF/web.xml    org.apache.maven.plugins maven-source-plugin   attach-sources  jar         org.apache.maven.plugins maven-compiler-plugin 2.3.2  1.6 1.6     

如果您不能将第三方库安装到本地存储库,由于第三方进行了一些愚蠢的命名/打包检查,您仍然可以在构建时将system范围的依赖项添加到最终包中(至少如果您正在构建一个webapp)使用maven-war-plugin ,你需要创建一个像这样的配置。

  org.apache.maven.plugins maven-war-plugin 3.2.0  true   path/to/lib/in/project WEB-INF/lib     

不确定,但我相信该库必须位于项目基本目录的本地。 我倾向于在src/main/ called lib下创建一个目录来保存这些类型的第三方库。 在构建过程中,它们被放置在正确的目录中并添加到war文件中。

基于您的初始POM,我建议将它们直接发送到WEB-INF / lib目录

   copy-dependencies   ${project.build.directory}/${project.artifactId}-${project.version}/WEB-INF/lib  
 mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file \ -Dfile=~/Desktop/medici-1.0.1.jar \ -DgroupId=com.hp \ -DartifactId=medici \ -Dversion=1.0.1 \ -Dpackaging=jar \ -DlocalRepositoryPath=lib 

如果一切顺利,您可以在lib中找到您发布的工件。

 project$ find lib lib lib/com lib/com/hp lib/com/hp/medici lib/com/hp/medici/1.0.1 lib/com/hp/medici/1.0.1/medici-1.0.1.jar lib/com/hp/medici/1.0.1/medici-1.0.1.pom lib/com/hp/medici/maven-metadata-local.xml Note the structure here mimics what you'd find in ~/.m2. 

现在,在您的pom.xml中,在项目中将其声明为Maven存储库。

   local-repo file://${basedir}/lib   

最后,在你的pom.xml中声明对本地.jar的依赖,就像你对任何依赖一样。

   com.hp.medici medici 1.0.1   

可能是定义依赖关系的范围的问题:

  • 编译 :“编译”范围中的依赖关系将自动复制到目标的WEB-INF / lib,作为Maven构建的一部分。
  • 提供 :不会复制“提供”范围中的依赖关系(您可以将其用于服务器提供的jar,例如JSP-api.jar)。

要在Maven中生成WAR,必须运行2个目标:“compile”和“war:war”。 仅运行war目标将无法编译Java源代码。 如果您愿意,可以运行其中一个主目标,例如“package”。

如果使用eclipse

在项目资源管理器中选择POM,然后选择“运行”上下文菜单选项。 这将构建并执行Maven运行配置文件(或使用现有配置文件)。 Maven运行配置文件的行为与常规运行/调试配置文件类似,只是它们的配置文件编辑对话框支持Maven特定function。

来源: https : //coderanch.com/t/594897/ide/include-maven-dependencies-war-file