在JAVA中将class文件编译成jar文件包,运行提示没有主清单属性

Maven 项目生成jar运行时提示“没有主清单属性”

新建了一个Maven的项目,mvn compilemvn package后生成了jar文件,然后直接到target目录下去执行Java -jar xxx.jar命令运行jar包时出现了“xxx.jar没有主清单属性”的错误提示。 
根据我的经验,肯定是没有找到入口类(即main函数所在的类),在pom.xml里面加上入口类的配置就好了!第一次直接用maven来打包jar,记录一下。

关于可执行程序(需要指定一个 main 类)打 jar 包就没这么方便了,我们需要考虑以下几个问题:

    • 配置文件需要打进 jar 包;
    • 需要指定 main 入口类;
    • 所依赖的第三方库也要打进 jar 包;
      • 只有同时满足以上三点,我们才可以直接使用 java -jar swiftonrsa-1.0.0.jar 命令成功执行该程序。
      • 2.1 配置文件打包不需要额外关注

        只要你项目所依赖的配置文件都按照 maven 规范放对位置(src/main/resources),那么打好的 jar 包就会把它们一起打包:

      • 但是这样打好的 jar 包既没有指定 main 入口类,也没有将依赖包打进来,我们运行它:
        • 提示"swiftonrsa-1.0.0.jar中没有主清单属性",我们查看打好 jar 包下 META-INF 目录中的 MANIFEST.MF,其内容如下:
          Manifest-Version: 1.0
          Built-By: Defonds
          Build-Jdk: 1.7.0_67
          Created-By: Apache Maven 3.2.3
          Archiver-Version: Plexus Archiver
          确实没有指出 main 入口类。

          2.2 maven-assembly-plugin 插件

          于是我们引入了 maven-assembly-plugin 插件,pom.xml 中加入如下代码:

          • 确实没有指出 main 入口类。

            2.2 maven-assembly-plugin 插件

            于是我们引入了 maven-assembly-plugin 插件,pom.xml 中加入如下代码:

            [html] view plain copy

            print?

            1. <build>
            2. <plugins>
            3. <plugin>
            4. <artifactId>maven-assembly-plugin</artifactId>
            5. <configuration>
            6. <appendAssemblyId>false</appendAssemblyId>
            7. <descriptorRefs>
            8. <descriptorRef>jar-with-dependencies</descriptorRef>
            9. </descriptorRefs>
            10. <archive>
时间: 2024-10-16 03:40:29

在JAVA中将class文件编译成jar文件包,运行提示没有主清单属性的相关文章

IDEA编译的JAR包运行出现“没有主清单属性”

运行编译好的包出现: 解决方案就是: 确保MANIFEST.MF文件在src/main/resources/META_INF/而不是src/main/java/META_INF/

xxx.jar或者xxx.war中没有主清单属性和spring-boot-maven-plugin的作用

因为springboot本身集成了tomcat插件,所以我们可以直接使用mvn clean package命令打成jar包或者war包,然后使java -jar xxx.jar 或者 java -jar xxx.war命令非常方便的去部署运行项目. 但是在执行命令时提示: PS F:\wkh_code\my-blog\target> java -jar myblog.war myblog.war中没有主清单属性 PS F:\wkh_code\my-blog\target> 这里引出一个问题:主

android studio 将文件打包成jar文件

1. File ->new Moudle -> android library 这样就创建了一个library工程 打开他的build.gradle 工程 apply plugin: 'com.android.library' android { compileSdkVersion 23 buildToolsVersion "23.0.3" defaultConfig { minSdkVersion 16 targetSdkVersion 23 versionCode 1

使用cython将py文件编译成so文件

一.环境准备    安装cython,以及gcc编译环境    wget https://bootstrap.pypa.io/get-pip.py    python get-pip.py pip install cython    yum install -y gcc python-devel 二.编写测试脚本   test.py,内容如下   import os   def test():       print  os.path.realpath('.')   三.将其拷贝到python系

java运行jar命令提示没有主清单属性

右键点击项目->导出 这儿需要注意的是:修改MANIFEST.MF文件,后面加Main-Class:[空格]包名/主类 自己也可写个脚本运行,不用命令行运行,和linux下的shell是一样的道理!! 但是运行脚本过程中出现乱码了,我是醉了!!编码的问题,批处理只支持ANSI编码,而你的批处理可能是Unicode,用记事本打开,另存为ANSI编码的bat文件

JAVA核心技术I---JAVA基础知识(Jar文件导入导出)

一:Jar初识 (一)定义 同c++中的DLL一样 jar文件,一种扩展名为jar的文件,是Java所特有的一种文件格式,用于可执行程序文件的传播. jar文件实际上是一组class文件的压缩包 (二)优势 –jar文件可以包括多个class,比多层目录更加简洁实用–jar文件经过压缩,只有一个文件,在网络下载和传播方面,更具有优势–jar文件只包括class,而没有包含java文件,在保护源文件知识版权方面,能够可以起到更好的作用–将多个class文件压缩成jar文件(只有一个文件),可以规定

Java前端编译:Java源代码编译成Class文件的过程

Java前端编译:Java源代码编译成Class文件的过程 在上篇文章<Java三种编译方式:前端编译 JIT编译 AOT编译>中了解到了它们各有什么优点和缺点,以及前端编译+JIT编译方式的运作过程. 下面我们详细了解Java前端编译:Java源代码编译成Class文件的过程:我们从官方JDK提供的前端编译器javac入手,用javac编译一些测试程序,调试跟踪javac源码,看看javac整个编译过程是如何实现的. 1.javac编译器 1-1.javac源码与调试 javac编译器是官方

将引用了第三方jar包的Java项目打包成jar文件的两种方法

方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 “MANIFEST.MF”, 由于是打包引用了第三方jar包的Java项目,故需要自定义配置文件MANIFEST.MF,在该项目下建立文件MANIFEST.MF,内容如下: Manifest-Version: 1.0 Class-Path: lib/commons-codec.jar lib/commons-httpclient-3.1.jar lib/commons-logging-1.1.jar lib/log4j-1.

Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法

方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 “MANIFEST.MF”, 由于是打包引用了第三方jar包的Java项目,故需要自定义配置文件MANIFEST.MF,在该项目下建立文件MANIFEST.MF,内容如下: Manifest-Version: 1.0 Class-Path: lib/commons-codec.jar lib/commons-httpclient-3.1.jar lib/commons-logging-1.1.jar lib/log4j-1.