繁体   English   中英

Maven:下载源github,编译成jar,包含Z68995FCBF432492D150Z84目录下的Z68995FCBF432492D150Z84

[英]Maven: download source from github, compile into jar, include jar in WEB-INF/lib directory

这个问题有很多“解决方案”,我尝试过都无济于事,所以如果这看起来多余,请原谅我。

我有一个使用 Intellij IDEA 构建的 Java/Maven 项目,该项目依赖于从该 GitHub 项目构建的 jar 文件: https-spar.com/protegeproject

不幸的是,jar 不在任何外部存储库中,因此必须由我构建。 我有构建工作并手动将 jar 复制到我的父项目的 WEB-INF/lib 文件夹中。 Intellij 然后正确运行,即使生成的 war 文件不包含 snap-sparql-query jar,也会在执行时找到所有相关的 jars。 我猜它被缓存在某个地方。

如果我从命令行( $ mvn clean package )构建项目,它会构建,但上面的 jar 文件仍然不包含在生成的 war 文件中,即使它在打包之前存在于父级的 WEB-INF/lib 文件夹中作为战争文件。

理想的解决方案是父级中的 Maven 命令:

  1. 下载 snap-sparql-query 的源代码
  2. 将源代码编译成 jar
  3. 将 jar 复制到父 WEB-INF/lib 目录
  4. 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 不会在打包的应用程序中包含系统范围的 jars。 为了包含系统范围的依赖项,您需要使用 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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM