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

10

我是maven环境的新手,需要有人帮助。 在pom.xml中将我的外部jar文件(directoryhelper.jar)添加到lib文件夹中,如下所示:

<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添加到类路径中。


你是如何尝试运行的? - Sander Verhagen
构建完成后,我使用mvn clean install命令将apk安装到手机上,然后尝试从浏览器中访问。 - prGD
1
好的,没有人提到APK :) 能否给一个标签? - Sander Verhagen
2个回答

5
默认情况下,Maven会生成一个JAR文件(默认打包方式),该JAR文件仅包含项目的主要构件(main)。如果只使用该文件运行,则会发现缺少依赖项--这是有意设计的。
通常情况下,Maven构件与其POM一起重复使用,以便在使用时知道依赖关系。编辑:如果您正在使用APK并将其安装到手机上,则可能有机制来处理依赖项,我仅从Maven的角度回答此问题。
如果您想创建带有依赖项的JAR文件,则必须告诉Maven这样做,这不是默认设置。让Maven执行此操作的方法有很多种(可能不尽全面):
  • Maven Assembly plugin, jar-with-dependencies predefined descriptor:

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


谢谢您的回答,我在Eclipse中导入了一个简单的应用程序,并了解了JAR依赖项,然后将这些依赖项添加到pom.xml中,问题得到了解决。 - prGD

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>

为了让它在我的电脑上运行,我必须在Java命令中包含“-cp lib/*:fully.qualified.MainClassName.jar”,以运行该jar文件。 - Martin Andersson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接