Java maven添加项目&x27;s jar lib到可执行jar

Java maven添加项目&x27;s jar lib到可执行jar,java,maven,jar,dependencies,executable-jar,Java,Maven,Jar,Dependencies,Executable Jar,我有一个项目,在项目的子目录(我将称之为myLib)中包含所需的lib(jar文件)。我想使用maven和myLib中的依赖项将项目构建为一个可执行的jar,以避免ClassNotFoundException。我计划做的是使用maven shade插件;但是,myLib中的大多数依赖项不在maven存储库中,因此我不确定如果不在maven存储库中安装myLib的JAR,是否可以做到这一点: <artifactSet> <include>groupI

我有一个项目,在项目的子目录(我将称之为myLib)中包含所需的lib(jar文件)。我想使用maven和myLib中的依赖项将项目构建为一个可执行的jar,以避免ClassNotFoundException。我计划做的是使用maven shade插件;但是,myLib中的大多数依赖项不在maven存储库中,因此我不确定如果不在maven存储库中安装myLib的JAR,是否可以做到这一点:

    <artifactSet>
        <include>groupId:artifactId</include>
    <artifactSet>

groupId:artifactId
maven是否可以将这些“myLib依赖项”包含到打包的可执行jar中,而不使用mvn install:install将它们安装到maven存储库中

我还试图通过将myLibs jar移动到src/main/resources/中来添加它们,以便将它们添加到可执行jar文件中,但我无法通过将它们添加到清单文件的类路径头中来引用它们,如docs.oracle.com/javase/tutorial/deployment/jar/downman.html中所述


您不能只在jar中包含第三方jar。清单中的类路径是相对于您正在运行的jar的

例如,如果您有依赖于
my utils.jar
my application.jar
,并且两者位于同一目录中,则清单类路径为:

Class-Path: my-utils.jar
Class-Path: lib/my-utils.jar  
而如果您只是将
my utils.jar
移动到一个
lib
目录,给我这个布局:

+ my-application.jar
+ lib
  + my-utils.jar
您的清单类路径将是:

Class-Path: my-utils.jar
Class-Path: lib/my-utils.jar  
现在谈谈你的问题

首先,您真的应该将所有LIB放入存储库。Maven是从存储库构建的,违反“Maven方式”通常会导致以后出现问题

另一种方法(我不推荐)是使用
system
范围声明依赖项,它允许您指定路径,例如:

<dependency>
  <groupId>com.mycompany</groupId>
  <artifactId>my-utils</artifactId>
  <version>1.0</version>
  <scope>system</scope>
  <systemPath>lib/my-utils.jar</systemPath>
</dependency>
(您可能需要稍微使用
include

还可以包括运行应用程序的脚本和程序集中所需的属性