如何将外部 jar 文件添加到类路径

问题描述 投票:0回答:3

我是 Maven 环境新手,需要一些帮助。 在 lib 文件夹中添加了我的外部 jar 文件(directoryhelper.jar),如下所示的 pom.xml

<dependency>
      <groupId>com.test.directoryhelper</groupId>
      <artifactId>DirectoryHelper</artifactId>
      <version>1.0</version>
      <scope>system</scope>
      <systemPath>${basedir}/lib/directoryhelper.jar</systemPath>      
</dependency>

编译成功,但在运行时我得到 java.lang.NoClassDefFoundError.

如何将directoryhelper.jar 添加到类路径。

maven apk
3个回答
5
投票

开箱即用的 Maven 会生成一个 JAR 文件(默认打包)。此 JAR 文件仅包含项目的 (

main
) 个工件。如果您仅使用它并运行它,显然,按照设计,依赖项缺失了。

通常,Maven 工件会与其 POM 结合重用,以便在使用时知道依赖项是什么。编辑:如果您使用 APK 并将其安装在手机上,可能会有处理依赖关系的机制,我只是从 Maven 的角度回答这个问题。

如果你想创建一个带有依赖项的 JAR,你必须告诉 Maven 这样做,这不是默认设置。 让 Maven 做到这一点的方法是(可能不是详尽的):

  • Maven Assembly 插件jar-with-dependencies

    预定义描述符:

    <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.4</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> ...
    
    
  • Maven Shade 插件


3
投票
这样,它将创建一个大尺寸的单个 jar,并且每次尝试构建时构建时间都会很长。

我更喜欢将所有 jar 添加到 lib 文件夹中并包含在类路径(jar 的清单)中,因为当我们必须进行一些更改或重新部署到客户端或某个地方时,我们可以简单地提供小 jar(不是所有依赖项合并在 jar 中)

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>com.kalindiinfotech.webcrawler.MainGUI</mainClass> <!-- <mainClass>com.KalindiInfotech.busbookingmaven.form.LoginForm</mainClass>--> </manifest> </archive> </configuration> </plugin> <plugin> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <phase>install</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> </configuration> </execution> </executions> </plugin>
    

0
投票
    我最近遇到了这个问题。这是因为 jar 不存在于
  • classpath 中。
  • 创建一个 lib 文件夹并添加您需要的外部或运行时所需的所有 jar。
  • 使用以下命令。
  • -cp jarName.jar:lib/* com.job.MainClass args
    
    
© www.soinside.com 2019 - 2024. All rights reserved.