Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java NoClassDefFoundErrorSpring引导maven_Java_Maven_Spring Boot_Dependencies_Noclassdeffounderror - Fatal编程技术网

Java NoClassDefFoundErrorSpring引导maven

Java NoClassDefFoundErrorSpring引导maven,java,maven,spring-boot,dependencies,noclassdeffounderror,Java,Maven,Spring Boot,Dependencies,Noclassdeffounderror,我用SpringBoot编写了一个RESTAPI,它使用了一些外部库,这些库通过依赖关系包含在我的pom.xml中。 如果我通过mvn-spring-boot:run在IntelliJ中启动项目,一切正常,但是如果我试图通过mvn-package将所有内容打包到一个jar中,除了spring-boot之外,所有外部依赖性都会丢失。但是,相应的jar文件被复制到jar的lib文件夹中。 因此,如果我启动jar,一切正常(回答getRequests等),但只要我想初始化类型为FFmpegFrameG

我用SpringBoot编写了一个RESTAPI,它使用了一些外部库,这些库通过依赖关系包含在我的pom.xml中。 如果我通过mvn-spring-boot:run在IntelliJ中启动项目,一切正常,但是如果我试图通过mvn-package将所有内容打包到一个jar中,除了spring-boot之外,所有外部依赖性都会丢失。但是,相应的jar文件被复制到jar的lib文件夹中。 因此,如果我启动jar,一切正常(回答getRequests等),但只要我想初始化类型为FFmpegFrameGrabber(来自bytedeco)的变量,我就会得到一个NoClassDefFoundError

我的POM如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<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>spring-boot-test</groupId>
    <artifactId>test</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.7.RELEASE</version>
    </parent>

    <properties>
        <java.version>1.8</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>org.bytedeco</groupId>
            <artifactId>javacv</artifactId>
            <version>1.1</version>
        </dependency>

    </dependencies>

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
以及Application.java

package hello;

import java.util.Arrays;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(Application.class, args);

        System.out.println("Let's inspect the beans provided by Spring Boot:");

        String[] beanNames = ctx.getBeanDefinitionNames();
        Arrays.sort(beanNames);
        for (String beanName : beanNames) {
            System.out.println(beanName);
        }
    }

}
这是直接从春季开机教程。
再次

在您的
pom.xml
中添加下面的插件部分。
构建maven项目并执行jar命令。
这个插件将把所有依赖的jar打包到最终的可执行jar中

        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
        </plugin>


我不熟悉bytedeco,但它的jar也应该在jar的
lib
文件夹中,并且它的所有类都应该可用。也许它做了一些不寻常的事?你能提供一个重现问题的小样本吗?它是ffmpeg的hava包装器。所有的ffmpeg JAR都在libfolder中,但在适当的位置没有类文件。这不起作用,因为它会把spring引导的路径弄乱。通常,springboot:repackage会在maven生成的jar中调整这些名称(如果我是正确的话)。因此,我需要调用springboot:使用依赖项在jar上重新打包。有什么想法吗?使用dependecies启动jar时出错:org.springframework.context.ApplicationContextException:无法启动嵌入式容器;嵌套异常为org.springframework.context.applicationContext异常:由于缺少EmbeddedS ervletContainerFactory bean.ok,无法启动EmbeddedWebApplicationContext。你试过了吗
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
        </plugin>