java - Maven:从github下载源码,编译成jar,在WEB-INF/lib目录下包含jar
问题描述
这个问题有很多“解决方案”,我尝试过都无济于事,所以如果这看起来多余,请原谅我。
我有一个使用 Intellij IDEA 构建的 Java/Maven 项目,它依赖于从这个 GitHub 项目构建的 jar 文件:https ://github.com/protegeproject/snap-sparql-query
不幸的是,jar 不在任何外部存储库中,所以必须由我构建。我有构建工作并手动将 jar 复制到我的父项目的 WEB-INF/lib 文件夹中。Intellij 然后正确运行,即使生成的 war 文件不包含 snap-sparql-query jar,也会在执行时找到所有依赖的 jar。我猜它被缓存在某个地方。
$ mvn clean package
如果我从命令行(.
理想的解决方案是父级中的 Maven 命令:
- 下载 snap-sparql-query 的源代码
- 将源码编译成jar
- 将jar复制到父WEB-INF/lib目录
- WEB-INF/lib 目录中的所有 jars 都包含在 war 文件中
至少我会满意手动执行上面的 1-3 项,但让 Maven 执行 #4。
这是 snap-sparql-query 的 Maven 条目:
<!-- SNAP SPARQL API -->
<!-- https://github.com/protegeproject/snap-sparql-query -->
<dependency>
<groupId>edu.stanford.protege</groupId>
<artifactId>snap-sparql-query-api</artifactId>
<version>4.0.0-SNAPSHOT</version>
<!-- this library isn't found in the maven repository, must be externally compiled -->
<!-- and copied to the ...WEB-INF/lib directory so this pom can find it -->
<scope>system</scope>
<systemPath>${basedir}/WEB-INF/lib/snap-sparql-query-api-4.0.0-SNAPSHOT.jar</systemPath>
<exclusions>
<exclusion>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>edu.stanford.protege</groupId>
<artifactId>de-derivo-sparqldlapi</artifactId>
<version>2.0.0</version>
<!--<version>3.0.0</version>-->
</dependency>
有人警告我使用 systemPath is bad,所以如果可能的话,我也想避免这种情况。
我可以让 Maven 至少执行上述第 4 项和/或理想情况下的 1-4 项吗?
解决方案
你问了很多事情,为了回答所有问题,我需要更多细节。一旦您提供这些详细信息,我将更新答案。但是现在,以下是您列表中第 4 项的答案。
默认情况下,Maven 不会在打包的应用程序中包含系统范围的 jar。为了包含系统范围的依赖项,您需要使用 maven-dependency-plugin 的 copy-dependency 目标。
请注意<phase>prepare-package</phase>
. 有阶段prepare-package
对于在 WAR 文件中包含依赖项非常重要,因为这个目标需要在执行 maven-war-plugin 之前执行。
<build>
<finalName>maven-sys-scope</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dep</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<includeScope>system</includeScope>
<outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
推荐阅读
- design-patterns - 轮询数据仓库设计
- python - 如何将两个列表与第三个列表进行比较,如果存在匹配项,则将它们分组到 Python 中的嵌套列表中?
- swift - 将字典映射到 Swift 中的结构数组
- django - Django:从不同的网络访问
- c# - creating a list of anonymous type and passing to view
- javascript - 在 XML 文件中搜索
- php - Display json api data in html
- python - Python Requests Module Not Getting Latest Data from Web Server
- apache-spark - 如何使用 scala 在 Spark 中评估 minHashLSH?
- c++ - How can I make clang-format put the first arg/param on its own line when arguments are split into lines?