java-problem

2023/4/6

# 1.Java打包后没有主属性清单

问题背景:在使用SpringBoot架构搭建父子工程时,使用IDEA可以正常启动,但打成jar包后使用jar方式启动时,会报错xx.jar中没有主清单属性。

java -jar .\HuangHeLou-basic-0.0.1-SNAPSHOT.jar
.\HuangHeLou-basic-0.0.1-SNAPSHOT.jar中没有主清单属性

原因:原因主要是在使用jar方式启动时,没有指定Main-Class,导致启动时找不到主方法,使得SpringBoot项目无法启动。

尝试解压jar包,进入META-INF目录,查看MANIFEST.MF文件,里面确实没有指定Start-Class和Main-Class

解决方案:指定Main-Class即可。在子工程的pom.xml文件中添加配置

 <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version><!-- 对应springboot版本-->
                <configuration>
                    <mainClass>com.dataojo.huangheloubasic.HuangHeLouBasicApplication</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

# 2 打包选择环境 dev prod

yml配置文件
spring:
  profiles:
    active: prod
pom文件    
    
    <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <profileActive>dev</profileActive>
            </properties>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
        </profile>

        <profile>
            <id>prod</id>
            <properties>
                <profileActive>prod</profileActive>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
    </profiles>