【问题标题】:Add 3rd Party Jars with Maven Package使用 Maven 包添加 3rd 方罐子
【发布时间】:2017-05-02 06:28:20
【问题描述】:

我有一个非常简单的 spring boot 项目,我使用了一个名为 jsoup 的 3rd 方 jar。

当我从 Eclipse 运行项目时,代码运行良好。但是当我使用 mvn clean package 命令并将其导出到可执行 jar 时;项目仍然有效,但我使用 jsoup 的部分会引发无法找到 jsoup 的异常。所以我的可执行 jar 不包含 jsoup。

我搜索并尝试了一些方法,但它们不起作用。如果你能帮助我,我将不胜感激。

这是我的 pom 文件,

<modelVersion>4.0.0</modelVersion>

<groupId>com.tools</groupId>
<artifactId>parser</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>parser</name>
<description>Demo project for Spring Boot</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.2.RELEASE</version>
    <relativePath /> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.7</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <scope>system</scope>
        <version>1.0</version>
        <systemPath>${basedir}\src\lib\jsoup-1.10.1.jar</systemPath>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

【问题讨论】:

  • 更好的方法是添加以下配置,当你构建它时,它将通过 maven 下载工件。是否有任何具体原因提及系统路径? org.jsoupjsoup1.10.1
  • 问题是因为 3rd 方类未编译到您生成的 JAR 中。您要做的是创建通常称为“Fat JAR”的内容,其中包含您的所有课程 + 所有第 3 方课程。有多种机制:请参阅此处了解初学者。 mkyong.com/maven/create-a-fat-jar-file-maven-shade-plugin
  • @AlanHay 你可能想检查一下 Spring Boot ......这正是 Spring Boot 的作用。
  • 您正在使用 &lt;scope&gt;system&lt;/scope&gt; 并且它不包含在工件中(maven 会像提供的依赖项一样忽略它)。您应该使用来自 maven Central 的 jsoup 版本(就像所有其他依赖项一样)。
  • 我没有注意到 jsoup 有 maven 支持。我刚刚下载了jar并添加为依赖项。胖罐子也可以解决我的问题。谢谢。

标签: java eclipse maven spring-boot jar


【解决方案1】:

如果您的 3-rd 方 jar 不支持 Maven 并且不在任何 Maven 存储库中,您可以从那里下载它,您需要为其制作一个 Maven 工件,然后使用 Maven deploy 将其部署到某个 Maven 存储库中插件。

它可以是您的本地存储库、公司存储库或您想使用的任何公共存储库。

请在以下位置查看: Guide to deploying 3rd party JARs to remote repository

这是来自它的 Maven 命令格式:

mvn deploy:deploy-file -DgroupId=<group-id> \
 -DartifactId=<artifact-id> \
 -Dversion=<version> \
 -Dpackaging=<type-of-packaging> \
 -Dfile=<path-to-file> \
 -DrepositoryId=<id-to-map-on-server-section-of-settings.xml> \
 -Durl=<url-of-the-repository-to-deploy>

【讨论】:

    【解决方案2】:

    您使用的是 JSoup 版本 1.10.1,但将其与 &lt;scope&gt;system&lt;/scope&gt; 一起使用。 Maven 不会在工件构建中包含这些 jar,就像 &lt;scope&gt;provided&lt;/scope&gt; 一样。另请参阅this Stackoverflow 问题和答案。

    但是 JSoup 是一个普通的 jar,就像您的其他依赖项一样,位于 Maven Central 中。如您所见here。只需将其添加为常规依赖项即可。

    <dependency>
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>1.10.1</version>
    </dependency>
    

    而不是你现在拥有的。这将使它包含在 Spring Boot 将为您创建的可执行 jar 中。 (并且使您免于手动查找该 jar 和更新等)。

    【讨论】:

      猜你喜欢
      • 2015-06-27
      • 2013-09-30
      • 2018-01-01
      • 2013-09-04
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      • 2016-07-24
      • 2013-04-19
      相关资源
      最近更新 更多