【问题标题】:Building jar from Intelli-J won't execute从 Intelli-J 构建 jar 不会执行
【发布时间】:2019-04-01 01:32:49
【问题描述】:

我整个晚上都在挖掘有关此问题的帖子,但似乎找不到适合我的解决方案。我得到了所有的工件,构建了我的 jar,运行了“java -jar myProject.jar”并收到了这个:

Error: Could not find or load main class com.myProject.MyProject
Caused by: java.lang.ClassNotFoundException: com.myProject.MyProject

我已经提取了 jar 文件和类文件。我对Java还是比较陌生,所以我不确定这是否相关,但是如果我点击编辑“MyProject.class”,在jar文件中,内容如下所示:

Êþº¾

除此之外,我不知道还能去哪里看。我的源码目录设置正确,“com”包在jar文件的第一层。

同样值得注意的是,这是一个使用 Maven 的 Spring-boot 应用程序。

编辑:

上面我将包编辑为 com.myProject.MyProject(为简单起见),但其中还有另一层,反映在下面的代码中,“com.myProject.myProject.MyProject”。抱歉,如果这令人困惑:/

MyProject.java:

package com.myProject.myProject;

// imports excluded for brevity

@SpringBootApplication
public class MyProject {

public static void main(String[] args) {
    SpringApplication.run(MyProject.class, args);
}

// Fix the CORS errors
@Bean
public FilterRegistrationBean simpleCorsFilter() {
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    CorsConfiguration config = new CorsConfiguration();
    config.setAllowCredentials(true);
    // *** URL below needs to match the Vue client URL and port ***
    config.setAllowedOrigins(Collections.singletonList("http://localhost:8080"));
    config.setAllowedMethods(Collections.singletonList("*"));
    config.setAllowedHeaders(Collections.singletonList("*"));
    source.registerCorsConfiguration("/**", config);
    FilterRegistrationBean bean = new FilterRegistrationBean<>(new CorsFilter(source));
    bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
    return bean;
}
}

pom.xml:

<?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>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.1.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.myProject</groupId>
<artifactId>myProject</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>myProject</name>
<description>My Project</description>

<properties>
    <start-class>com.myProject.myProject.MyProject</start-class>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-rest</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.session</groupId>
        <artifactId>spring-session-core</artifactId>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.4</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.security.oauth</groupId>
        <artifactId>spring-security-oauth2</artifactId>
        <version>2.3.4.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-acl</artifactId>
        <version>5.1.3.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-jwt</artifactId>
        <version>1.0.8.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-impl</artifactId>
        <version>2.2.11</version>
    </dependency>

    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-core</artifactId>
        <version>2.2.11</version>
    </dependency>

</dependencies>

</project>

清单.MF:

Manifest-Version: 1.0
Main-Class: com.myProject.myProject.MyProject
Start-Class: com.myProject.myProject.MyProject

更新: 我也尝试过使用 mvn install 创建 jar,结果 jar 文件在尝试运行时会抛出相同的错误。

【问题讨论】:

  • 提取出来的jar是什么结构?
  • jar 的结构是 com.myProject.MyProject,其中 META-INF 在基础级别,com 也是。
  • jar里面META-INF/MANIFEST.MF文件的内容是什么?参见例如logicbig.com/tutorials/spring-framework/spring-boot/… 以内容为例。你看有例如Main-ClassStart-Class 已定义。
  • 我更新为包含到 MANIFEST.MF 的内容中 - 以前没有包含 Start-Class,所以我添加了它并再次尝试但没有运气。

标签: java maven spring-boot intellij-idea


【解决方案1】:

Spring Boot 要求您在 pom.xml 中属性的 &lt;start-class&gt; 标记中指定主类

<properties>
<!-- The main class to start by executing "java -jar"-->
<start-class>com.myProject.MyProject</start-class>
</properties>

编辑

根据您的 pom.xml 文件,您的包结构应如下所示

如果您确定您的应用程序只有一个主要入口点。然后尝试将您的 starter pom.xml 更新为以下基本依赖项,并在执行生成的 jar 之前执行mvn clean install

    <?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.myProject</groupId>
    <artifactId>myProject</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>myproject</name>
    <description>My Project</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

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

</project>

【讨论】:

  • 我正在使用:org.springframework.bootspring-boot-starter-parent2.1.1.RELEASE 并添加: com.myProject.MyProject 到我的属性中,但我仍然没有运气。我遇到了同样的错误
  • 你能用 MyProject.java 和 pom 文件更新你的问题吗?我想看看使用的包结构和注解。
  • 当然,我编辑了帖子以包含主类以及 pom 文件。
  • 昨晚我得到了这个工作 - 我添加了:org.springframework.bootspring-boot-maven-plugin 到 pom 然后做了mvn clean install,它现在正在工作。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
  • 2020-05-21
  • 2020-03-09
相关资源
最近更新 更多