如何在使用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中。
让我试着总结一下我尝试的选项:
这不起作用! 此外,只有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