什么是MANIFEST.MF?...MANIFEST.MF 文件存储的实际上是 Bundle 的元数据,可以定义 Bundle 的各种特征,同时能更好的对 Bundle 进行标识同时帮助用户对Bundle进行理解。...MANIFEST.MF文件格式: 1、属性声明一般为:name:value 2、换行缩进一个空格 3、每个子句(clause)进一步分解为一个目标(target)和一组由分号分隔的name-value对参数
打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录, 这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息,下面将详细介绍MANIFEST.MF...文件的内 容,先来看struts.jar中包含的MANIFEST.MF文件内容: Manifest-Version: 1.0 Created-By: Apache Ant 1.5.1 Extension-Name...Digest: ZnTIQ2aQAtSNIOWXI1pQpw== 这段内容定义类签名的类名、计算摘要的算法名以及对应的摘要内容(使用BASE方法进行编码) 七.自定义属性 除了前面提到的一些属性外,你也可以在MANIFEST.MF...Java 2 平台识别并解释 META-INF 目录中的下述文件和目录,以便配置应用程序、扩展和类装载器: MANIFEST.MF。这个 manifest 文件定义了与扩展和包相关的数据。...签名 JAR 中的 Manifest 和 signature 文件 Contents of signature file META-INF/MANIFEST.MF Manifest-Version: 1.0
MANIFEST.MF是个什么? 写这篇文件主要记录JRA文件里面到底是什么?然后MANIFEST.MF又是什么?Springboot 如何只有Main方法就可以运行的?...DskipTests=true -P test ,生成的文件如下 这个JAR我们分两部分来讲解请看下图 BOOT-INF 注意了这个是我们自己写的代码生成的class和配置文件 META-INF 包含了MANIFEST.MF...Apache Maven #Fri May 29 16:56:23 CST 2020 version=1.0-SNAPSHOT groupId=com.xxx artifactId=xxxxxService MANIFEST.MF...来源 接下来看打包文件中的MANIFEST.MF Manifest-Version: 1.0 Implementation-Title: xxxxService Implementation-Version
(manifest.mf文件中可以对jar包及其中的内容作一些一设置) -0 产生jar包时不对其中的内容进行压缩处理 -M 不产生所有文件的清单文件(Manifest.mf)。...文件的jar包 jar cvfm hello.jar manifest.mf hello 创建的jar包多了一个META-INF目录,META-INF止录下多了一个manifest.mf文件,至于manifest.mf...注意:manifest.mf这个文件名,用户可以任指定,但jar命令只认识Manifest.mf,它会对用户指定的文件名进行相应在的转换,这不需用户担心。...三.Manifest.mf文件编写规则: manifest.mf的编写一定要注意一些细节,它是很苛刻的,我在此也载过不少跟头,谁让它这么小气呢,没办法,所以专门给大家列出来。 ...manifest.mf填写内容。
这样的问题是因为,jar包中的META-INF文件夹下的MANIFEST.MF文件缺少定义jar接口类。说白了就是没有指定class类。...这里说明一下MANIFEST.MF就是一个清单文件,通俗点将就相当于WINDOWS中ini配置文件。用来配置程序的一些信息。所以才造成这样的问题。...解决这个问题的方法就是要在MANIFEST.MF文件中添加一个入口类。即需要一个Main-Class定义行。更详细的MANIFEST.MF文件定义说明,请参考官方MANIFEST.MF文件定义手册。...下面是一个完整的详细的MANIFEST.MF文件信息: 2 、解决办法很简单。就是在MANIFEST.MF添加入口。...之后,在双击打开这个文件夹META-INF: 再选择MANIFEST.MF文件,用记事本打开它: 现在看看文件中是否有Main-Class这样一行文字,如果没有的话那么添加一行。
、test2.java、Main.java,其内容就是上面文章内的内容 3、 在当前目录编译:javac -d . test1.java test2.java Main.java 4、 在当前目录创建MANIFEST.MF...1.8.0_101 (Oracle Corporation) Main-Class: cn.mymain.Main 注意:文件要4行,最后一行是空行 5、 打包:jar cvfm test.jar MANIFEST.MF...test.jar 1 2 3 这个时候显示:错误: 找不到或无法加载主类 cn.mymain.Main 7、 解包jar后发现少了个cn目录,因此修改打包的命令为:jar cvfm Test.jar MANIFEST.MF... cn/*" output2=`jar cvfm test.jar MANIFEST.MF cn/*` echo $output2 echo "java -jar test.jar 1 2 3" output3...=`java -jar test.jar 1 2 3` echo $output3 使用的时候执行:sh do.sh 如果执行的时候是指定java的类执行,就不需要编写MANIFEST.MF文件,因此shell
1.这样的问题是因为,jar包中的META-INF文件夹下的MANIFEST.MF文件缺少定义jar接口类。说白了就是没有指定class类。...这里说明一下MANIFEST.MF就是一个清单文件,通俗点将就相当于WINDOWS中ini配置文件。用来配置程序的一些信息。 所以才造成这样的问题。...2.解决办法很简单,就是在MANIFEST.MF添加入口。 3.首先找到你的jar文件,双击打开这个文件夹META-INF,选择MANIFEST.MF文件,用记事本打开它。 4....5.保存MANIFEST.MF,更新你的jar包,再次运行
然后,再逐条计算MANIFEST.MF文件中每一个块的SHA1,并经过BASE64编码后,记录在CERT.SF中的同名块中,属性的名字是“SHA1-Digest”。...首先,如果你改变了apk包中的任何文件,那么在apk安装校验时,改变后的文件摘要信息与MANIFEST.MF的检验信息不同,于是验证失败,程序就不能成功安装。...其次,如果你对更改的过的文件相应的算出新的摘要值,然后更改MANIFEST.MF文件里面对应的属性值,那么必定与CERT.SF文件中算出的摘要值不一样,照样验证失败。...我们还是用前面的例子分析,假设签名后,apk文件中多了一个META-INF目录,里面有三个文件,分别是MANIFEST.MF、CERT.SF和CERT.RSA: 通过前面的分析,我们可以知道,MANIFEST.MF...MANIFEST.MF文件中记录的一致。
要想jar包能直接通过java -jar xxx.jar运行,需要满足: 1、在jar包中的META-INF/MANIFEST.MF中指定Main-Class,这样才能确定程序的入口在哪里; 2、要能加载到依赖包...maven-jar-plugin用于生成META-INF/MANIFEST.MF文件的部分内容,com.xxg.Main指定MANIFEST.MF中的Main-Class...,true会在MANIFEST.MF加上Class-Path项并配置依赖包,lib/</classpathPrefix...例如下面是一个通过maven-jar-plugin插件生成的MANIFEST.MF文件片段: ?...只是生成MANIFEST.MF文件还不够,maven-dependency-plugin插件用于将依赖包拷贝到${project.build.directory}/lib
参数 说明 -c 创建一个jar包 -t 显示jar中的内容列表 -x 解压jar包 -u 添加文件到jar包中 -f 指定jar包的文件名 -v 输出详细报告 -m 指定MANIFEST.MF文件 -...0 生成jar包时不压缩内容 -M 不生成清单文件MANIFEST.MF -i 为指定的jar文件创建索引文件 -C 可在相应的目录下执行命令 关于MANIFEST.MF定义: https://baike.baidu.com.../item/MANIFEST.MF 演示 往jar包添加文件 jar uf xxx.jar BOOT-INF/classes/application.yml 解压jar包 jar -xvf xxx.jar
可以看到,上一步骤生成了一个test.jar,并且外边的test.jar还需要再重新创建一个MANIFEST.MF文件 ?...经过测试,即使我创建外边的MANIFEST.MF文件时,把里面的test.jar包打进去,依然会报错:找不到或无法加载主类。 ?...综上所诉, 我又尝试在最开始选择配置的时候,如果选择extract to the target JAR(提取到目标jar包) 这个选项,那么对于我这个测试项目就完全没问题了,生成的test.jar包里包含MANIFEST.MF...至于这里的classpath如何填写,相当于在之前错误用法时生成的META-INF/MANIFEST.MF文件里所引用的jar包一样。
-jar test.jar java -classpath test.jar com.test_maven.App 会直接报错:无法找到主类或者找不到 xxx 依赖包/类,这是由于你没有定义 MANIFEST.MF...项目所有的依赖都必须在Classpath中,其可以通过 MANIFEST.MF 指定或者隐式设置。...maven-jar-plugin 可以做很多事情,但在这里,我们只对使用它来修改默认 MANIFEST.MF 文件的内容感兴趣。...当您使用这 3 个元素配置好了 MANIFEST.MF 文件之后,下一步是将所有的依赖项复制到 lib 文件夹。...将您的依赖项和修改的 MANIFEST.MF 放在适当的位置后,您就可以用一个简单的命令启动应用程序: java -jar jarfilename.jar 更多技巧,您可以参考: 关于
下面分析一下3个文件的具体如何生成的apksinger: 1、MANIFEST.MF 逐一遍历里面的所有条目,如果是目录或者三个文件(MANIFEST.MF,CERT.RSA,CERT.SF)就跳过...,如果是一个文件,就用SHA1(或者SHA256)消息摘要算法提取出该文件的摘要然后进行BASE64编码后,作为“SHA1-Digest”属性的值写入到MANIFEST.MF文件中的一个块中。...首先,如果你改变了apk包中的任何文件,那么在apk安装校验时,改变后的文件摘要信息与MANIFEST.MF的检验信息不同,于是验证失败,程序就不能成功安装。...其次,如果你对更改的过的文件相应的算出新的摘要值,然后更改MANIFEST.MF文件里面对应的属性值,那么必定与CERT.SF文件中算出的摘要值不一样,照样验证失败。...最后,如果你还不死心,继续计算MANIFEST.MF的摘要值,相应的更改CERT.SF里面的值,那么数字签名值必定与CERT.RSA文件中记录的不一样,还是失败。 那么能不能继续伪造数字签名呢?
MANIFEST.MF文件 Manifest-Version: 1.0 Main-Class: cn.intsmaze.A 这里指定入口类 把上面代码打包为B.jar ?...MANIFEST.MF文件 Manifest-Version: 1.0 Main-Class: cn.intsmaze.demo 这里指定入口类 ?...在MANIFEST.MF文件增加calsspath值即可。...lib/jaxen-1.1-beta-7.jar 注意: manifest.mf文件最后一行必须是一个空行。...如果要成功运行这个jar包,我们要在manifest.mf设置Main-Class和Class-Path。
应用会使用Maven插件打包(笔者不熟悉Gradle,所以暂时不对Gradle做分析),所以可以这样考虑: Maven插件打包的时候,把构建时间和pom文件中的版本号都写到jar包的描述文件中,正确来说就是MANIFEST.MF...把第1步中打包到jar包中的MANIFEST.MF文件的内容读取并且加载到SpringBoot环境属性中的info.*属性中,以便可以通过/actuator/info访问。...了解此解压目录是我们编写MANIFEST.MF文件的解析实现过程的前提。...编写MANIFEST.MF文件的解析类: @SuppressWarnings("ConstantConditions") public enum ManiFestFileExtractUtils {...public Map extract() { return RESULT; } } 可以通过一个CommandLineRunner的实现把MANIFEST.MF
maven项目打包时,由maven生成`META-INF\MANIFEST.MF`文件且设置`Class-Path` 无法重新打包时,修改`META-INF\MANIFEST.MF`文件且设置`Class-Path...Java\lib\ext java.class.path: - target\PrintPath.jar -cp参数无效 jar 文件的 Class-Path 在jar中存在一个名为META-INF\MANIFEST.MF...其替代方法是,在JAR中的META-INF\MANIFEST.MF文件里设置Class-Path。 推荐此法:在JAR中的META-INF\MANIFEST.MF文件里设置Class-Path。...文件且设置Class-Path 尝试手动编辑MANIFEST.MF: 手动编辑MANIFEST.MF。...替换掉JAR中的MANIFEST.MF。 尽量选择个靠谱的压缩包操作软件,比如winrar。
2.选中导出的jar文件用压缩文件管理器打开 3.有个META-INF文件夹,把里面的MANIFEST.MF文件拖出来。..._2_9115505" name="code" class="html"> Manifest-Version:1.0 4.改动MANIFEST.MF...(没有为什么,就是MANIFEST.MF文件格式的要求==) 5.将改动后的MANIFEST.MF文件再拖回到原来的jar中,覆盖掉原有的MANAFEST.MF。
在打包时会同时生成一个MANIFEST.MF文件,描述了jar包的基本信息 Main-Class 指定程序的入口,可以用java -jar *.jar 来启动 Class-Path 指定jar包依赖关系...,类加载器会根据该路径来加载class 好的,我们了解了MANIFEST.MF文件,那么我们看下这个文件,可能有的读者还不清楚怎么找这个文件,解压你程序的jar就行,unzip *.jar 就可以看到了...Class-Path中报错的类在我用红框圈起的jar包中,可以发现这个jar包的名字和我们的lib包中对应的jar名字并不一样 lib包中是dspadinfo.client-0.0.41-SNAPSHOT.jar 而在MANIFEST.MF...> 修改完pom文件后,重新打包部署后,MANIFEST.MF
通过maven将应用打成jar包之后,可以通过java -jar ***.jar来执行,会运行指定的main方法,主要是 MANIFEST.MF 中指定的 main 方法;那么如果有多个main方法的时候如何运行指定的...****指的是包名; ****.className是类名称; args指传递进去的参数; 综上:运行jar有两种情况 1>maven打包之后通过MANIFEST.MF指定main方法 java -jar... 主要是这里面的mainfest代码块;mainClass中指定执行的main方法的包名+类名;然后指定maven package命令,可以看到打包出来的jar中的META-INF中MANIFEST.MF...然后打包成jar运行的时候,如果要添加参数,直接添加在后面就可以了; java -jar mplus-service-jar-with-dependencies.jar aaa bbb 2>如果没有在MANIFEST.MF...然后再main方法中添加打印的逻辑,来看下执行的参数情况 其实就是把aaa,bbb的值作为args参数传递进去了; 总结:通过maven 把项目打包成jar,然后运行main方法,有两种情况,一种是在MANIFEST.MF
这是一个简单的jar包结构: META-INF/ MANIFEST.MF com/ baeldung/ MyApplication.class META-INF/MANIFEST.MF...META-INF/ MANIFEST.MF WEB-INF/ web.xml jsp/ helloWorld.jsp classes/ static...templates/ application.properties lib/ // *.jar files as libs 包里有 META-INF目录MANIFEST.MF
领取专属 10元无门槛券
手把手带您无忧上云