Intellij打包Maven项目中那些七七八八

依赖问题

Maven生成的项目中,如果直接使用java -jar xxx.jar指令运行jar文件,会出现”no main manifest attribute, in xxx.jar”(没有设置Main-Class)、ClassNotFoundException(找不到依赖包)等错误。
要想jar包能直接通过java -jar xxx.jar运行,需要满足:
1、在jar包中的META-INF/MANIFEST.MF中指定Main-Class,这样才能确定程序的入口在哪里;
2、要能加载到依赖包。
可以使用插件来解决打包依赖的问题;
修改pom文件, 在后面加上以下内容:

<build> 
  <plugins> 
    <plugin> 
      <groupId>org.apache.maven.pluginsgroupId>  
      <artifactId>maven-assembly-pluginartifactId>  
        
      <version>2.6version>  
      <configuration> 
        <archive> 
          <manifest> 
            <mainClass>task.PersonalInfoTaskmainClass> 
          manifest> 
        archive>  
        <descriptorRefs> 
          <descriptorRef>jar-with-dependenciesdescriptorRef> 
        descriptorRefs> 
      configuration>  
      <executions> 
        <execution> 
          <id>make-assemblyid>  
          <phase>packagephase>  
          <goals> 
            <goal>singlegoal> 
          goals> 
        execution> 
      executions> 
    plugin> 
  plugins> 
build>

打包时,使用Maven Project视图里的package进行打包。

主函数问题

调用时,如果想运行时指定想要运行的类,此时应该用-cp / –classpath来指定,例如:

java -cp XXX.jar com.HelloWorld

运行时报错UnsupportedClassVersionError

出错信息如下:

Exception in thread "main" java.lang.UnsupportedClassVersionError: task/PersonalInfoTask : Unsupported major.minor version 52.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:803)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

其原因在于jar包的打包环境和运行环境的JDK版本不同,在开发环境中更改下再打包就可以了。
52代表jdk1.8,具体对照表如下:

J2SE 8 = 52,
J2SE 7 = 51,
J2SE 6.0 = 50,
J2SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45

你可能感兴趣的:(IDE,Maven)