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