
在工作做时,有时会碰到开发人员并没有把配置文件独立出来,而量把他打包进了jar包里面,这里运维人员会产生很大的影响,特别的是在调试需要经常修改配置文件的时候,运维人员需要把jar包下载到本地,解压,修改配置文件,打包,在上传。 极大的影响效率。其时在Linux下通过jar命令,就可以直接解压和打包,省去了下载上传的时间。
jar包服务端解压
jar包的本质其时就是一个压缩包,甚至可以使用unzip命令去解压,但是我并推荐这种方式,因为unzip虽然可以解压jar包,但可能会有意想不到的问题。这里还是使用Java官方的jar命令。具体请看以边。
1 |
jar -xvf test<span class="hljs-preprocessor">.jar</span> |
和linux下的tar命令的参数是一样的。这个就可以方便的修改配置文件了。
linux下打包jar包
现在已把jar解压了,并且已经修改完配置文件了。那么如果把他更新到jar包里呢,其实和tar的压缩很相似,就是用jar -cvf0m 具体如下。
1 |
jar -cvf0m test<span class="hljs-preprocessor">.jar</span> MANIFEST<span class="hljs-preprocessor">.MF</span> * |
其中-0代表不压缩,有些jar里会包含有其它jar包,此时不哪不加-0参数,会报类似如下错误
1 2 3 4 5 6 7 8 9 10 |
Exception in thread <span class="hljs-string">"main"</span> java.lang.IllegalStateException: Unable to open nested entry <span class="hljs-string">'BOOT-INF/lib/sansec.SwxaJCE-2.1.3.jar'</span>. It has been compressed and nested jar files must be stored without compression. Please check the mechanism used to create your executable jar file at org.springframework.boot.loader.jar.JarFile.createJarFileFromFileEntry(JarFile.java:<span class="hljs-number">285</span>) at org.springframework.boot.loader.jar.JarFile.createJarFileFromEntry(JarFile.java:<span class="hljs-number">260</span>) at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:<span class="hljs-number">248</span>) at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:<span class="hljs-number">237</span>) at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchive(JarFileArchive.java:<span class="hljs-number">103</span>) at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchives(JarFileArchive.java:<span class="hljs-number">87</span>) at org.springframework.boot.loader.ExecutableArchiveLauncher.getClassPathArchives(ExecutableArchiveLauncher.java:<span class="hljs-number">72</span>) at org.springframework.boot.loader.Launcher.launch(Launcher.java:<span class="hljs-number">49</span>) at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:<span class="hljs-number">58</span>) |
-m 为指定MANIFEST.MF文件,包括启动类及依赖关系等。都是在这个文件下描述的。

请问如果是多个文件夹,要打成一个jar包,怎么办?只能zip成一个zip文件,然后把XXX.zip手动改成XXX.jar?