java.lang.NoClassDefFoundError,no main manifest attribute in xxx.jar

  1. 问题:
    在linux中maven进行打包时出现java.lang.NoClassDefFoundError的错误,在idea中不会出现此类问题
    原因:
    对比linux中打的jar包和idea中打的jar包,发现linux中的jar包明显小于idea的jar包
    可见在打jar包时没有将依赖包导入
    解决方案:
    使用Maven Assembly插件jar-with-dependencies将它打包为一个jar
	<build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>com.hbase2Redis.Hbase2Redis</mainClass>
                            //这个是打包程序的主程序类
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
  1. 问题:
    no main manifest attribute, in xxx.jar
    原因:
    一般情况下,java 打包成 jar 包需要在 MANIFEST.MF 中指定 Main-Class 项,以便运行 java -jar xxx.jar 时找到对应的主类。
    因为-jar的含义就是后面跟的jar包是有main class可独立运行,所以需要在打包成jar包时指定这个类;否则,需要在执行的时候手动指定
    解决方案1:
    在pom文件中指定main class
	<build>
    <plugins>
        <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.1.0</version>
        <configuration>
            <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
                <mainClass>ParserLog</mainClass>(指定main class)
            </manifest>
            </archive>
        </configuration>
        </plugin>
    </plugins>
    </build> 

解决方案2:

java -cp SPARQLParser.jar ParserLog

你可能感兴趣的:(jar,maven,java)