为了账号安全,请及时绑定邮箱和手机立即绑定

如何告诉 Maven 项目在目标文件夹中包含依赖项?

如何告诉 Maven 项目在目标文件夹中包含依赖项?

FFIVE 2021-10-13 13:53:51
我正在学习使用 Maven。所以,我创建了一个简单的程序,它只解析一些 JSON 文本。为此,我使用了一个外部库“jackson”,并将其作为依赖项包含在 pom.xml 文件中,以及“jackson”本身所需的依赖项,如下所示。<?xml version="1.0"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>alex</groupId>  <artifactId>test</artifactId>  <version>0.0.1-SNAPSHOT</version>  <packaging>jar</packaging>  <name>test</name>  <url>http://maven.apache.org</url>  <properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>    <jackson.version>2.9.5</jackson.version>    <maven.compiler.source>1.8</maven.compiler.source>    <maven.compiler.target>1.8</maven.compiler.target>  </properties>  <dependencies>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>3.8.1</version>      <scope>test</scope>    </dependency>    <dependency>      <groupId>com.fasterxml.jackson.core</groupId>      <artifactId>jackson-databind</artifactId>      <version>${jackson.version}</version>    </dependency>    <dependency>当我输入时mvn clean package,程序编译正常,我可以看到在文件target夹中创建的 jar 文件。但是,当我尝试通过java -jar test-0.0.1-SNAPSHOT.jar从那里键入来运行该 jar 文件时,它抱怨找不到依赖项。它给了我这样的错误。    Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper        at alex.test.App.main(App.java:20)Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.ObjectMapper        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)        ... 1 more所以,我的问题是,我需要进行哪些更改,以确保所有依赖项最终都在目标文件夹中,并且我不再收到此错误。
查看完整描述

3 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

尝试将此添加到您的pom.xml:


<project>

...

    <build>

        <plugins>

            <plugin>

                <artifactId>maven-assembly-plugin</artifactId>

                <version>3.0.0</version>

                <configuration>

                    <archive>

                        <manifest>

                            <mainClass>com.yourpackage.MainClass</mainClass>

                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>

                            <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>

                        </manifest>

                    </archive>

                    <descriptorRefs>

                        <descriptorRef>jar-with-dependencies</descriptorRef>

                    </descriptorRefs>

                </configuration>

                <executions>

                    <execution>

                        <id>make-assembly</id> <!-- this is used for inheritance merges -->

                        <phase>package</phase> <!-- bind to the packaging phase -->

                        <goals>

                            <goal>single</goal>

                        </goals>

                    </execution>

                </executions>

            </plugin>

        </plugins>

    </build>

</project>

它将在您的目标中生成一个可运行的 jar 文件,其中包含所有依赖项。请务必设置主类的路径。


查看完整回答
反对 回复 2021-10-13
  • 3 回答
  • 0 关注
  • 179 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信