如何解决用Spring Boot找不到或加载主类错误?

时间:2019-07-13 11:28:49

标签: java maven spring-boot

我为Spring Boot创建了一个Maven项目。我有很多Spring依赖项和一个主类:

// Custom class - 3 integers and a Compare function
class Sums 
{
    public:
        Sums(int v1, int v2, int v3) : val1(v1), val2(v2), val3(v3) {};
        bool operator<(const Sums &v) const { return val3 < v.val3; }

        int val1;
        int val2;
        int val3;
};

// Multiset using the above class, sorted using val3
multiset<Sums> b;
b.insert(Sums(1, 2, 11));
b.insert(Sums(0, 1, 20));

// This works.
auto i = b.find(Sums(1,2,11));
cout << i->val1 << ' ' << i->val2 << ' ' << i->val3 << endl;

/* But, suppose I only know that the element of the multiset which I have to find has val1=1 and val2=2, and I don't know the corresponding value of val3.
Is it possible to somehow overload the [] operator, so that the following works? Because, I can't use find() without knowing the values of all three data members of the class.*/

cout << b[1].val3 << endl;  // I want this to print 11.
cout << b[1][2].val3 << endl; // Is this also possible?

package com.vastserver; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class MyArtifactApplication { public static void main(String[] args) { // SpringApplication.run(MyArtifactApplication.class, args); System.out.println("hello!"); } } 目录的文件夹结构为:

src

在pom.xml中,我使用. └── main ├── java │   └── com │   └── vastserver │   └── MyArtifactApplication.java └── resources └── application.properties 来在独立的.jar文件中构建项目。即使我三重检查了目录结构和主类文件在pom.xml中是否正确显示,我仍然收到以下错误:maven-assembly-plugin,当我先运行Error: Could not find or load main class com.vastserver.MyArtifactApplication然后运行mvn package或{{1 }}。如果从Intellij运行它,主类就可以工作,因此我知道代码不是问题,而是Maven构建设置。我迷失了我的问题所在。

我的pom.xml如下所示:

java -cp target/vast-ad-server-artifactId-1.0-SNAPSHOT-jar-with-dependencies.jar com.vastserver.MyArtifactApplication

7 个答案:

答案 0 :(得分:4)

对我来说:Maven-更新项目有效。

答案 1 :(得分:1)

我认为您应该检查由maven构建的工件的目录结构。 通常,Spring Boot工件是由特殊的Spring Boot插件而非Maven组件插件准备的。

尽管它共享“ jar”后缀,但实际上不是jar,它具有特殊的类加载器,可以从BOOT-INF/lib文件夹中加载类。

我已经提供了有关Spring Boot应用程序启动here时到底发生了什么的详细解答,但是最重要的是,如果您使用程序集插件,则必须准备清单文件和相当复杂的文件夹结构。坦白地说,我认为您应该将Spring Boot插件用作构建Spring Boot应用程序的首选方法。

答案 2 :(得分:1)

maven->更新项目 对我有用

答案 3 :(得分:0)

我意识到spring-boot-maven-plugin实际上是在建造建筑物,因此不需要其他插件。如果将maven中的“插件”部分编辑为:

<plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
</plugins>

然后运行mvn packagejava -jar target/vast-ad-server-artifactId-1.0-SNAPSHOT.jar即可。

答案 4 :(得分:0)

添加到以上所有答案 右键点击project-> Maven ->update project-> force update

这将下载所有缺少的依赖项。

如果还是不行,还是要走吗?右键单击pom.xml并按配置运行。检查您使用的是正确的JRE。然后将目标设置为安装并运行它。

重要,如果pom.xml中的Java版本与您安装的JRE版本不匹配,则可能会出现此错误。因此,请确保其相同。 还是不行?? 从工作区中删除项目,然后将其重新导入

答案 5 :(得分:0)

右键单击项目-> Maven-> UpdateProject->选中“强制更新快照/发布-确定”复选框

花些时间来更新项目。然后只需运行应用程序Rightclickonproject-> Runas-> Spring Boot App

答案 6 :(得分:0)

尝试在 Maven 中更新项目。有时,在添加新依赖项时,它希望更新 Maven,那里开发工具将不起作用

---右键项目 ---去maven ---更新项目