2016-12-16 55 views
0

我有一个非常简单的弹簧引导项目,我使用名为jsoup的第三方jar。使用Maven包添加第三方罐子

当我从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> 
+1

更好的aproach是添加下面的配置将被行家当你建立了下载文物。有没有具体的理由提及系统路径? org.jsoup jsoup 1.10.1 Nagaraddi

+1

的问题是由于第三方类不会被编译到您的生成JAR。你想要做的是创建所谓的“胖JAR”,其中包含所有课程+所有第三方课程。有各种机制:参见这里的初学者。 https://www.mkyong.com/maven/create-a-fat-jar-file-maven-shade-plugin/ –

+0

@AlanHay你可能想检查Spring Boot ...这正是春季启动。 –

回答

1

如果你的第三方jar没有Maven支持并且不在任何Maven仓库中,你可以从它下载它,你需要为它创建一个Maven工件,然后用Maven将它部署到一些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> 
1

您使用JSoup版本1.10.1但<scope>system</scope>使用它。 Maven不包括那些制作神器的罐子,就像<scope>provided</scope>一样。另请参阅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和更新等)。