我在互联网上搜索了一段时间,我无法弄清楚如何配置maven-war插件或类似的东西,以便系统依赖包含在内置战争中(WEB-INF / lib文件夹)
我在jar-build的情况下使用maven依赖插件:
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
但是我无法理解在战争构建的情况下要做什么。我尝试过使用maven-war插件,但它不包括构建中的系统依赖项。
[UPDATE]
我有类型的依赖:
<dependency>
<groupId>LoginRadius</groupId>
<artifactId>LoginRadius</artifactId>
<scope>system</scope>
<version>1.0</version>
<systemPath>${basedir}\lib\LoginRadius-1.0.jar</systemPath>
</dependency>
在我的POM中,当构建战争时,这些依赖项不包含在WEB-INF / lib中。
答案 0 :(得分:13)
让我试着总结一下我尝试的选项:
<packagingIncludes>${java.home}/lib/jfxrt.jar</packagingIncludes>
这不起作用!此外,只有罐子名称,排除其他一切,所以如果你愿意尝试,那么尝试
<packagingIncludes>${java.home}/lib/jfxrt.jar,**/*</packagingIncludes>
Jatin的回答似乎有点复杂,我试图再次通过POM&amp;再次弄清楚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中的依赖项更改为
<dependency>
<groupId>LoginRadius</groupId>
<artifactId>LoginRadius</artifactId>
<!--<scope>system</scope>-->
<version>1.0</version>
<!--<systemPath>${basedir}\lib\LoginRadius-1.0.jar</systemPath>-->
</dependency>
注意 - 请参阅我已评论系统范围&amp; Systempath下。
现在构建战争,在WEB-INF / lib
中包含此LoginRadius-1.0.jar答案 1 :(得分:7)
如果您无法将第三方库安装到本地存储库,由于第三方进行了一些愚蠢的命名/打包检查,您仍然可以将system
范围内的依赖项添加到最终包中使用maven-war-plugin
构建时间(至少在构建Web应用程序时),您需要创建这样的配置。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<failOnMissingWebXml>true</failOnMissingWebXml>
<webResources>
<resource>
<directory>path/to/lib/in/project</directory>
<targetPath>WEB-INF/lib</targetPath>
</resource>
</webResources>
</configuration>
</plugin>
不确定,但我相信该库必须位于项目基本目录的本地。我倾向于在src/main/
下创建一个名为lib
的目录来保存这些类型的第三方库。在构建过程中,它们被放置在正确的目录中并添加到war文件中。
答案 2 :(得分:4)
如果您的意思是jar依赖项,那么下面是一个示例pom.xml,它包含所需文件并生成war文件:
<build>
<defaultGoal>install</defaultGoal>
<sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>
<outputDirectory>${project.basedir}/target/classes</outputDirectory>
<testOutputDirectory>${project.basedir}/target/test-classes</testOutputDirectory>
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
</resource>
</resources>
<testResources>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
<debug>true</debug>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<includeEmptyDirs>true</includeEmptyDirs>
<webResources>
<resource>
<directory>ui</directory>
<targetPath></targetPath>
<includes>
<include>**</include>
</includes>
</resource>
<resource>
<directory>lib</directory>
<targetPath>WEB-INF</targetPath>
<includes>
<include>**/*.xml</include>
<include>**/log4j.properties</include>
</includes>
</resource>
//edited below
<resource>
<directory>lib</directory>
<targetPath>WEB_INF/lib</targetPath>
<includes>
<include>**/*.jar</include>
</includes>
</resource>
</webResources>
<webXml>${project.basedir}/WEB-INF/web.xml</webXml>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
答案 3 :(得分:2)
根据您的初始POM,我建议将它们直接发送到WEB-INF / lib目录
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/${project.artifactId}-${project.version}/WEB-INF/lib</outputDirectory>
</configuration>
答案 4 :(得分:1)
您可以根据需要将战争插件配置为全部或一些罐子 或排除如下所述。简单易用
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<webResources>
<resource>
<directory>${project.basedir}\lib</directory>
<targetPath>WEB-INF/lib</targetPath>
<filtering>false</filtering>
<includes>
<include>**/*.jar</include>
</includes>
<excludes>
<include>**/javax.servlet-api-3.1.0.jar</include>
</excludes>
</resource>
</webResources>
</configuration>
</plugin>
答案 5 :(得分:0)
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存储库。
<repositories>
<repository>
<id>local-repo</id>
<url>file://${basedir}/lib</url>
</repository>
</repositories>
最后,在你的pom.xml中声明对本地.jar的依赖,就像你对任何依赖一样。
<dependencies>
<dependency>
<groupId>com.hp.medici</groupId>
<artifactId>medici</artifactId>
<version>1.0.1</version>
</dependency>
</dependencies>
答案 6 :(得分:0)
可能是定义依赖关系的范围的问题:
要在Maven中生成WAR,必须运行2个目标:“compile”和“war:war”。单独运行war目标将无法编译Java源代码。如果您愿意,可以运行其中一个主目标,例如“package”。
如果使用eclipse :
在项目资源管理器中选择POM,然后选择“运行”上下文菜单选项。这将构建并执行Maven运行配置文件(或使用现有配置文件)。 Maven运行配置文件的行为与常规运行/调试配置文件类似,只是它们的配置文件编辑对话框支持Maven特定功能。
来源:https://coderanch.com/t/594897/ide/include-maven-dependencies-war-file