文章目录 拷贝lib的jar,配置可执行main函数 拷贝lib的jar maven-dependency-plugin...excludeTransitive> 配置可执行...main函数 org.apache.maven.plugins maven-jar-plugin</artifactId
摘要 这个技巧阐明了如何不直接处理清单文件而将一个不能运行jar包转换成一个可以执行的jar包。...那么在java的世界里,为什么jar是第二类公民――仅仅用作打包――当他们能成为第一类公民的时候,能和本地执行程序一样吗? 如果想执行jar文件,可以使用java命令的-jar选项。...例如,你有一个可以运行的myjar.jar文件。因为该文件是可以执行的,所以你可以用如下命令执行之:java –jar myjar.jar。...清单文件和主类条目 在大多数jar文件中,在目录META-INF里有个叫MANIFEST.MF的文件。在该文件中,有一个叫Main-Class的特殊条目,它说明了java -jar命令执行的类。...用API修改改配置 从java1.2之后,一个叫java.util.jar的包可以操作jar文件(注:它架构在java.util.zip包之上)。
在某些情况下,我们需要动态生成java代码,通过动态编译,然后执行代码。JAVA API提供了相应的工具(JavaCompiler)来实现动态编译。...下面我们通过一个简单的例子介绍,如何通过JavaCompiler实现java代码动态编译。 ? 1 ▼ 获取JavaCompiler ?...获取JDK提供的java编译器,如果没有提供编译器,则返回null; 2 ▼ 编译 ? 当我们要编译的源代码中,引用了其他代码,我们需要将引用代码路径设置到-classpath中,否则会编译失败。...3 ▼ 执行 ? 4 ▼ 完整代码 ? 5 ▼ 测试 ? 测试结果 ?
本文介绍下Java Jar常见的反编译工具,并给出使用感受。 反编译JAR能干什么: 排查问题、分析商业软件代码逻辑,学习优秀的源码思路。...JD-GUI 下载地址:http://java-decompiler.github.io/ 点评:支持的java版本不会太高,中文注释能够正常显示。 ?...终极大招 实际上面的反编译的工具失败了,我们还可以利用Idea自带的反编译工具。...只需要新建一个Maven项目,在项目的pom中加入需要反编译的Jar包,groupId、artifactId、version可以随便写,pom.xml如下图所示。...名称}.jar ?
作者 | dartagnan 出品 | http://tt316.cn/eTlSp java作为解释型的语言,其高度抽象的特性意味其很容易被反编译,容易被反编译,自然有防止反编译措施存在。...之所以会对java的反编译感兴趣,那是因为自己在学习的过程中,常常需要借鉴一下别人的成果(你懂的...)。或许反编译别人的代码不怎么道德,这个嘛.........废话不多说,正文如下: 常用的保护技术 由于Java字节码的抽象级别较高,因此它们较容易被反编译。本节介绍了几种常用的方法,用于保护Java字节码不被反编译。...符号混淆 在Class中存在许多与程序执行本身无关的信息,例如方法名称、变量名称,这些符号的名称往往带有一定的含义。...例如,对于按次序执行的两个语句A、B,我们可以增加一个控制条件,以决定B的执行。通过这种方式加大反汇编的难度。但是所有的干扰控制都不应该影响B的执行。
作为一种常用的开发语言,Java经常使用可执行的JAR(Java Archive)文件来打包和分发应用程序。使用java -jar命令运行JAR文件是一种方便快捷的方式。...本文将详细介绍java -jar命令的各种参数,帮助您充分利用这个功能。 一、简介 java -jar命令用于运行可执行的JAR文件。...二、常用参数详解 以下是一些常用的java -jar命令的参数,让我们逐一了解它们的功能和用法。 -Xmx:指定Java堆的最大内存大小。例如,-Xmx512m表示将最大堆内存设置为512MB。...以上是一些常用的java -jar命令的参数,通过灵活运用这些参数,您可以对应用程序的性能、内存使用和系统属性进行优化和配置。...-jar命令的常用参数、使用方法及其启动脚本,帮助您更好地掌握Java可执行JAR文件的运行技巧。
包输出路径, 并执行加密. to (File xJar) 指定加密后JAR包输出文件, 并执行加密....将 xjar.go 在不同的平台进行编译即可得到不同平台的启动器可执行文件, 其中Windows下文件名为 xjar.exe 而Linux下为 xjar(再次说) 由于启动器自带JAR包防篡改校验, 故启动器无法通用.../to/java [OPTIONS] -jar /path/to/encrypted.jar [ARGS] 在 Java 启动命令前加上编译好的Go启动器可执行文件名(xjar)即可启动运行加密后的JAR...-jar 后面必须紧跟着启动的加密jar文件路径 例子: 如果当前命令行就在 xjar 所在目录, java 环境变量也设置好了 ..../xjar java -Xms256m -Xmx1024m -jar /path/to/encrypted.jar ☘️加密后反编译jar包效果 待补充插件方式生成加密jar包, Github:xjar-maven-plugin
ava打包成jar jar -cvf [jar包的名字] [需要打包的文件] 执行jar包中的main方法 java -jar ****.jar 执行后总是运行指定的主方法,如果 jar 中有多个 main...用下面的命令试试看: java -classpath ****.jar ****.****.className [args] “****.****”表示“包名”; “className”表示“类名”;...“[args]”表示传入的参数; 直接运行 MANIFEST.MF 中指定的 main 方法: java -jar mplus-service-jar-with-dependencies.jar 运行指定的...main 方法(MANIFEST.MF 中没有指定的main方法): java -cp mplus-service-jar-with-dependencies.jar com.smbea.dubbo.bin.Console
可以通过如下指令使用 java -Djava.ext.dirs=$JAVA_HOME/jre/lib/ext:/xxx/xxx/path1:/xxx/xxx/path2 -jar xxx.jar...arg1 arg2 arg3 参数解读 java -D 是添加一个系统参数,java.ext.dirs 是一个系统参数的key,java回去该路径下寻找相关jar包,和class-path 差不多,不过...java.ext.dirs可以指定一个文件夹。...注意点 需要注意的是 java.ext.dirs 本身是有值的:$JAVA_HOME/jre/lib/ext,所以使用的时候需要将其原来的值给加上去,要不然可能会报缺少某些class的错误,毕竟自带的目录下也有很多是常用的类
下载地址:https://gitee.com/li_kun_zang/jd-gui/releases/v1.6.6 打开软件 image.png 点击File – Open File,然后选择你的一个Jar...利用IDEA的反编译工具 反编译我们的代码 java -cp java-decompiler.jar org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler
如何编译适配java版本的jar包 在日常浏览github社区的过程中,会碰到一些好用的java项目,但作者往往只提供源码或与本地jdk不适配的jar包,这时候可以自行进行编译 打开项目 build...往往会出现以下报错信息: java: 错误: 不支持发行版本 17 files—>settings ctrl+alt+shift+s project选择对应版本 新建一个maven项目 依次运行...clean、compile、package、install 这样可以成果编译出来,但是运行jar包会提示没有主清单属性 这时候可以选择另一种编译方法 Artifacts ——–> JAR ——–>...From module with depenencies 然后选择主类(程序入口) 重新选择 build artifact 这时候会在项目目录里生成一个out目录,jar包就在里面 成功编译,
编译java程序 javac test.java 执行java程序 java test 附件test.java class test{ public static void main(...String args[]){ System.out.println(“hello,world”); } } 执行结果 hello,java 发布者:全栈程序员栈长
Groovy&Java动态编译执行 工作中,遇到部分业务经常动态变化,或者在不发布系统的前提下,对业务规则进行调整。...Case1: Groovy动态编译执行 闲话少说,直接上代码: static Compilable engine; //获取groovy编译类 static { ScriptEngineManager...以上是使用java的ScriptEngineManager来动态编译、执行Groovy。 如果你觉得这种执行方式效率比较低,那么还可以使用groovy的ClassLoade将其编译成对象来执行。...Case2: Java动态编译执行 以上执行方式已经在生产环境得到验证,但最近压测发现,不管使用Case1中的哪种方法执行的QPS都没有直接使用Java代码的执行效率高。...那么是否可以将Java代码动态编译。结果当然是suer,在JDK6及以上中已经支持了java代码动态编译(JavaCompiler) Java的动态编译对源提供了多个渠道。
那你有没有想过一个问题,那就是当我们执行 java -jar 命令后,到底底层做了什么就启动了我们的 SpringBoot 应用呢? 或者说一个 SpringBoot 的应用到底是如何运行起来的呢?...java -jar 原理 首先我们要知道的是这个 java -jar 不是什么新的东西,而是 java 本身就自带的命令,而且 java -jar 命令在执行的时候,命令本身对于这个 jar 是不是 SpringBoot...由此我们先大胆的猜测一下,当我们在执行 java -jar 的时候,由于我们的 jar 里面存在 MANIFEST.MF 文件,并且其中包含了 Main-Class 属性且配置了 org.springframework.boot.loader.JarLauncher...总结 通过上面的内容我们知道了当我们在执行 java -jar 的时候,根据 java 官方规范会引导 jar 包里面 MANIFEST.MF 文件中的 Main-Class 属性对应的启动类,该启动类中必须包含...而对于我们 SpringBoot 项目构建的 jar 包,除了 Main-Class 属性外还会有一个 Start-Class 属性绑定的是我们项目的启动类,当我们在执行 java -jar 的时候优先引导的是
; import javax.tools.ToolProvider; public class DynamicLoader { /** * 通过类名和其代码(Java代码字符串),编译得到字节码...("byte", manager.getClassBytes()); } return map; } /** * 先根据类名在内存中查找是否已存在该类...java.util.jar.JarEntry; import javax.lang.model.element.Modifier; import javax.lang.model.element.NestingKind...> 0) { String jar = ext_form.substring(0, ext_form.lastIndexOf("!"))... * * @param name 此文件对象表示的编译单元的name * @param code 此文件对象表示的编译单元source的code
保证自己的Java代码是没有问题的,在IDEA里面是可以正常运行的,然后,按下面步骤: 打开File -> Project Structure -> Artifacts,如下图 点击“+”,选择“Jar...但是这样会有一个问题,即,如果项目中引用的Jar包有签名过,最后打包成的Jar包运行时会抛出错误: “java.lang.SecurityException: Invalid signature file...使用命令java -jar xxxxx.jar来执行jar包。...但是这样会有一个问题,即,如果项目中引用的Jar包有签名过,最后打包成的Jar包运行时会抛出错误: “java.lang.SecurityException: Invalid signature file...使用命令java -jar xxxxx.jar来执行jar包。 参考链接 http://blog.sina.com.cn/s/blog_3fe961ae0102uy42.html
自己在实际工作中的需要,使用Idea打包项目为可执行的jar包,网上找了好多文章但总是不成功,多次尝试后终于跑通,所以记录下来,希望可以帮助各位 步骤: 1....选中Java项目工程名称,在菜单中选择 File->project structure… (快捷键Ctrl+Alt+Shift+S)。 2....4.配置“Directory for META-INF/MAINFEST.MF”,此项配置的缺省值是:D:\Intellij\SeriesPublish\src\main\java,需要改成:D:\Intellij...我个人建议选择“extract to the target JAR”,这样所有依赖的jar包都会放在生成的jar包中。 5....\SeriesPublish\out\artifacts\SeriesPublish_jar下面找到生成的目标jar,可以看到META-INF/MAINFEST.MF文件被正确包含,内容也正确。
IDEA 导出可执行的Jar 换了Idea后今天需要把项目打成 jar放到服务器上运行,稍微整理一下。...2) 需要设置MANIFEST.MF的位置,在选择好入口类后系统会将MANIFEST.MF默认放在src/main/java下,需要将其放在/src/main/resources下 点击确认后,我们可以看一下...其中可以找到对应的jar文件,比如本次的mqproducer.jar 将生成的jar包拷贝到需要的地方,使用如下运行即可: java -jar mqproducer.jar 如果入口类需要参数只需要在命令后面加参数以空格分割即可...,如: java -jar mqproducer.jar args0 args1 args2 2....常见问题 本地执行java -jar出现下面的错误 Error: Invalid or corrupt jarfile xxx.jar 通常的原因在于xxx.jar文件过大,建议在pom.xml文件中排除不必要的依赖
我们都知道java是静态语言,也就是说,如果你想执行java程序,就必须先编译,再执行。 那本文为什么说,java可以不编译直接执行了呢?...其实,这个是OpenJDK11里新加的一个feature,目的是使单个文件的java源码可以无需编译,直接执行。.../Test hello 看到没,我们用java写的代码居然可以像shell脚本一样直接执行了。 那这一切在JVM中又是怎么实现的呢?静态语言为什么也可以像脚本一样动态执行了呢?...pwhat指针指向的是我们最终要执行的带main方法的java类,由上我们可以看到,在mode为LM_SOURCE时,最终执行的java类并不是我们提供的java源文件对应的java类,而是SOURCE_LAUNCHER_MAIN_ENTRY...我们要执行的源码先被java的compiler编译,然后又调用了其main方法继续执行我们写的逻辑。 原来是如此简单。
Java代码编译是由Java源码编译器来完成,流程图如下所示: ? Java字节码的执行是由JVM执行引擎来完成,流程图如下所示: ?...Java代码编译和执行的整个过程包含了以下三个重要的机制: Java源码编译机制 类加载机制 类执行机制 Java源码编译机制 Java 源码编译由以下三个过程组成: 分析和输入到符号表 注解处理 语义分析和生成...1)Bootstrap ClassLoader 负责加载$JAVA_HOME中jre/lib/rt.jar里所有的class,由C++实现,不是ClassLoader子类 2)Extension ClassLoader...负责加载java平台中扩展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目录下的jar包 3)App ClassLoader 负责记载classpath...加载过程中会先检查类是否被已加载,检查顺序是自底向上,从Custom ClassLoader到BootStrap ClassLoader逐层检查,只要某个classloader已加载就视为已加载此类,
领取专属 10元无门槛券
手把手带您无忧上云