JAR 包要在预装 JRE 环境的系统上执行。如果没有预先安装 JRE 环境,又想直接运行 Java 程序,该怎么办呢?...这篇文章我们会先学习如何将 Java 程序打包成一个可执行的 Java JAR 文件。然后演示如何使用这个 JAR 文件生成 Windows、Linux、MacOS 上的可执行程序。...我们将使用 Java 自带的 jar 命令行工具来创建 JAR 文件。然后学会使用 jpackage 工具创建各个系统上的可执行程序。...jpackage 命令 jpackage 命令是从 Java 14 开始提供的,可以帮助我们为模块化或非模块化 Java 应用程序生成指定系统平台的可执行程序,而不用预先安装 JRE 环境。...我们知道 Java 程序必须在 JRE环境才能运行, jpackage 其实是把 JRE 和 JAR 文件以及所有必要依赖项一起打包生成指定平台的可执行程序。
这里先给出一些Docker Image制作的要求,之后我们再看怎么做。...制作过程要融合在项目构建过程中 使用官方Image作为基础Image 设定正确的时区 Container内的程序以非root用户启动 指定Web程序的接口 能够传递JVM参数、Java System Properties...、程序自定义的参数 下面具体讲一下具体怎么做到以上几点: 制作过程要融合在项目构建过程中 这里推荐使用Spotify的dockerfile-maven-plugin,理由是这个plugin用起来最简单且容易掌握...EXPOSE 8080 能够传递JVM参数、Java System Properties、程序自定义的参数 我们需要能够在启动Docker Image的时候将一些参数传递进去: JVM参数 Java System...样例项目 样例项目源代码在这里:https://github.com/chanjarster/dockerfile-examples/ 目录结构 所有与程序相关的东西都存放在/home/java-app
文章目录 背景 制作条件 Dockerfile指令: 实践步骤 使用官网提供的基础镜像作为镜像基础 设定容器的正确的时间和时区 容器中采用非 root 用户权限启动应用程序 DockerFile样例 COPY...请往下看,Dockerfile就是制作镜像的原始武器: Dockerfile由一行行命令语句组成,并且支持用“#”开头作为注释,一般的,Dockerfile分为四部分:基础镜像信息,维护者信息,镜像操作指令和容器启动时执行的指令...制作条件 在制作 JAVA 应用的镜像过程中,一般情况下,我们制作出来的镜像文件都需要满足以下的需求: 使用官网提供的或者基于官网提供的自定义的基础镜像作为基础 设定容器的正确的时间和时区 容器中采用非...root 用户权限启动应用程序 指定 WEB 应用程序的端口 启动容器过程中能够传递 JVM、Java System Properties、程序自定义参数 Dockerfile指令: 1、FROM...//启动容器过程中能够传递 JVM、Java System Properties、程序自定义参数 # 在项目启动过程中新增参数 docker run -p 8080:8080 -e JAVA_OPTS
此外还会介绍Java程序所占用的内存是被如何管理的:堆、栈和方法区都各自负责存储哪些内容。最后用一小块代码示例来帮助理解Java程序运行时内存的变化。...Java程序执行过程 ZOYfmKJIopUDleP.jpg 步骤 1: 写源代码,源代码将以.java的文件格式保存在电脑硬盘中。...那么JIT编译器(Just-In-Time Compiler)是如果参与进程序的执行过程中呢?让我们来看以下两个例子。...当然,这只是JIT编译器的优化手段之一,不同公司设计的JIT编译器对Java程序的运行会有不同的优化方式。此外需要知道的是,JIT编译器并不是每次都会参与到执行过程中来。...最后让我们通过一个小例子来理解Java程序执行时内存的变化。
Java程序main方法执行流程 当我们编写完java源代码程序后,经过javac编译后,执行java命令执行这个程序时,是怎么一步步的调用到我们程序中的main方法的呢?...java命令是在安装jre/jdk时配置到系统环境路径中去的,执行java命令时会找到bin目录下的java可执行程序,并将我们编译后的java程序类名传递进去就可以执行了。...java可执行程序是由C++编写的,它的内部会启动一个Java虚拟机实例。 虚拟机启动入口函数位于src/java.base/share/native/launcher/main.c。...// src/java.base/share/native/launcher/main.c // java程序启动入口主函数 JNIEXPORT int main(int argc, char **argv...命令执行一个应用程序时,首先会先启动虚拟机实例,启动过程中包含了很多初始化工作,这些工作是为java程序提供运行环境的必要条件。
System.out.println(a); System.out.println(b); } } 2.示例 package com.joshua317; import java.util.Date...long total = endTime - startTime; System.out.println("耗时时间" + total +"ms"); } } Java
一、业务场景 基于HUE系统,使用平台自带的hadoop-mapreduce-examples.jar对一个文本文件执行wordcount操作。...WordCount的程序片段如下图所示: ? 三、两种方式 目前有两种方法可以执行jar包程序。一种是作业设计器,另一种是直接编辑workflow。...然后点击“创建”,选择“Java”。如下图所示: ? 我们主要配置: Jar路径:jar包在HDFS上的路径。...执行成功后如下图所示: ? 点击“定义按钮”,可查看workflow.xml的内容,可以看到里面有我们的输入路径及输出路径。如下图所示: ?...选择“Java程序”,将其拖动到“灰色模块”处,如下图所示: ?
Java 程序执行过程的内存分析 内存分析先知 栈: 1、每个线程私有,不能实现线程间的共享! 2、局部变量放置于栈中。 3、栈是由系统自动分配,速度快!栈是一个连续的内存空间!...2、用来存放程序中永远不变或唯一的内容。(类代码信息、静态变量、字符串常量) ? 注:常量池具有共享的机制,不同类的常量池之间共享数据。...; } } Test1类 重点:注意看代码里的注释,我把每一条的语句的执行过程都做了很详细的讲解 public class Test1 { public static void...赋值为这个字符串的引用 s1.name = "老叶"; //通过 s1 这个引用先找到Student对象,然后找到 study() 方法的引用,然后去方法区内找到方法,执行该方法...,开一个栈帧,执行完成后释放这个栈帧。
doSomeThing(); //测试的代码段 long endTime=System.currentTimeMillis(); //获取结束时间 System.out.println( "程序运行时间...doSomeThing(); //测试的代码段 long endTime=System.currentTimeMillis(); //获取结束时间 System.out.println( "程序运行时间...获取开始时间 doSomeThing(); //测试的代码段 long endTime=System.nanoTime(); //获取结束时间 System.out.println( "程序运行时间...获取开始时间 doSomeThing(); //测试的代码段 long endTime=System.nanoTime(); //获取结束时间 System.out.println( "程序运行时间
IDEA 导出可执行的Jar 换了Idea后今天需要把项目打成 jar放到服务器上运行,稍微整理一下。...在如下的图形中需要注意两个地方: 1) 需要选择jar包默认运行的入口类 2) 需要设置MANIFEST.MF的位置,在选择好入口类后系统会将MANIFEST.MF默认放在src/main/java...,如: java -jar mqproducer.jar args0 args1 args2 2....常见问题 本地执行java -jar出现下面的错误 Error: Invalid or corrupt jarfile xxx.jar 通常的原因在于xxx.jar文件过大,建议在pom.xml文件中排除不必要的依赖...发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/185771.html原文链接:https://javaforall.cn
应用程序镜像制作 准备好应用程序 [root@VM_8_24_centos testapp]# ls Dockerfile testapp.tar.gz 编写Dockerfile [root@VM_8...testapp-app && mkdir -p /data1/run/testapp-app ADD testapp.tar.gz /data1/testapp-app/ # 设置环境变量 # ENV JAVA_HOME.../usr/local/jre1.8.0_212 # ENV PATH ${PATH}:${JAVA_HOME}/bin # 容器启动时运行的命令 CMD ["/data1/testapp-app/bin.../launch.sh", "start"] # 暴漏端口 EXPOSE 10030 制作应用程序镜像 [root@VM_8_24_centos testapp]# docker build -t core-harbor.minminmsn.com
timeInterval = new TimeInterval(); // 开始时间 timeInterval.start("checkOperation"); // 代码块 // 结束时间 log.info("执行时长...simpleCourseInfo = this.getSimpleCourseInfo(courseId); // 结束时间 stopWatch.stop(); System.out.printf("执行时长
Java程序执行过程 那有了Java程序的运行环境等一些列支持后,Java程序是如何做到从一个只有代码的.java源文件变成计算机可执行的文件的呢?如下图,是Java程序的执行过程。 ?...Java字节码:是Java虚拟机执行的一种指令格式。 解释器:是一种电脑程序,能够把高级编程语言一行一行直接翻译运行。...其制成品无需依赖编译器而运行,程序运行速度比较快 通过上图我们知道Java程序的执行会经过以下几个步骤:编译-->装载字节码-->校验字节码-->解释字节码-->执行,然后我们看一下这几个步骤具体执行过程...,以及Java程序的执行过程对应到我们的实际操作: 1、编译 在windows环境中,打开命令窗口,切换到java文件的目录,使用 javac 命令,执行 javac xxx.java 把.java文件编译成...结语 实际上JVM执行字节码文件远比这复杂,其中还包括即时编译器、指令重排等优化。这里只是对Java程序的执行过程做一个大致的介绍,让Java程序员能够明白自己写的程序在JVM里到底是如何执行的。
过程: 1、(之前需要有安装协议)检查环境(操作系统、php版本、数据库、附件上传、目录权限、特殊环境要求(pdo、rewrtie、gd2、短标签等)) 2...
只要把Form的Visible属性设为False,ShowInTaskBar设为False,程序运行时就不会出现在任务栏中了。在任务管理器中隐形:将程序设为“系统服务”可以很轻松地伪装自己。...1.2、木马程序原理 木马病毒的工作原理:一个完整的特洛伊木马套装程序含了两部分:服务端(服务器部分)和客户端(控制器部分)。植入对方电脑的是服务端,而黑客正是利用客户端进入运行了服务端的电脑。...通过这类木马,攻击者可以在匿名情况下使用Tenlet、ICO、IRC等程序,从而在入侵的同时隐蔽自己的足迹,谨防别人发现及自己的身份。...这是一个比较简单的正向连接后门程序。这个程序之所以说比较简单,系统重启这个木马就会被清除了。因为你并没有添加进系统启动项,隐藏进程。这个涉及的技术比较复杂,以后讲解。...接下来我们就将编译好的木马放在测试机上进行测试 可以发现运行程序并没有什么事情发生,但是程序已经在默默的在运行了,而且打开了我们的5210端口。
icns 图片转换器 Burp-Suite汉化及兼容调试 Mac air M1 上手及环境配置 我们以 Burp-Suite 为例子 Burp-Suite 结构 image.png 编写 .shell java...BurpSuiteLoader.jar -javaagent:BurpSuiteCn.jar -Dfile.encoding=utf-8 -jar bp.jar 但是每次都要终端启动,挺麻烦的 编写 .command java...noverify -javaagent:BurpSuiteLoader.jar -javaagent:BurpSuiteCn.jar -Dfile.encoding=utf-8 -jar bp.jar 无需后缀 java...自动操作 .app 前提 配置绝对路径 或者设置一个变量,我设置的是my_path 首先刷新 bash.profile,接着拼接地址,看不懂可以看一下文首链接 source /etc/profile java...Dfile.encoding=utf-8 -jar ${my_path%/BAT/PATH}/DATA/Burp-Suite/burpsuite_pro_v2020.12.1.jar 然后就可以添加到 应用程序啦
程序执行的本质 程序执行的过程:代码区的指令不断执行,驱使动态数据区和静态数据区产生数据变化。 这一过程需要计算机的管控。下面我们着重介绍对代码区和动态数据区的管控。...对代码区和动态数据区的管控 其中eip永远指向代码区将要执行的下一条指令,它的管控方式有两种,一种是“顺序执行”,即程序执行完一条指令后自动指向下一条执行;另一种是跳转,也就是执行完一条跳转指令后跳转到指定的位置...初始情景: eip指向main函数的第一条指令,此时程序还没有运行,栈空间里还没有数据,ebp和esp指向的位置是程序加载时内核设置的(详情请看《Linux内核设计的艺术》一书)。...ESP寄存器存放当前线程的栈顶指针; EBP寄存器中保存当前线程的栈底指针; call main下面的一条指令地址EIP(也称返回地址)寄存器; 程序开始执行main函数第一条指令,eip自动指向下一条指令...第一条指令的执行,致使ebp的地址值被保存在栈中,保存的目的是本程序执行完毕后,ebp还能返回现在的位置,复原现在的栈。随着ebp地址值的压栈,esp自动向栈顶方向移动,它将永远指向栈顶。
0x0:想必大家都听说过计算机病毒或者木马吧,看着电影里面的黑客敲几下键盘就能控制你的系统,窃取你的隐私资料,执行任意命令,很炫酷吧,其实这种技术不难实现,接下来我就带领大家来玩一玩木马的制作....选择好PAYLOAD后设置目标回连的IP和端口即可. 0x04:把木马文件复制到目标机器上并执行. 0x05:查看监听状态,会发现有一个Meterpreter回连会话,这是你就可以使用migrate...迁移进程,然后安装后门程序,再窃取隐私信息......End:这次渗透测试还是很简单的,蛋疼的是看《Metasploit渗透测试魔鬼训练营》的木马程序制作时一直不成功,研究了几天后偶然在国外的技术文章中收获了点灵感————不使用-K参数,虽然生成的木马程序不能拥有源程序的完整功能...,但图标和程序大小没有改变,足够诱惑小白用户了,虽然msfencode在2015年就宣布停止了,但我还是想把这块硬骨头啃烂,如果各位同道能找到解决方法,请联系我,谢谢!
本在这里提出一种 Java 一句话木马:利用 Java 中 JS 引擎实现的一句话木马。 基本原理 Java没有eval函数,Js有eval函数,可以把字符串当代码解析。...综上所述,我们可以利用Java调用JS引擎的eval,然后在Payload中反过来调用Java对象,这就是本文提出的新型Java一句话的核心原理。...() {{ put("response", response); put("request", request); }})); %> 以执行命令为例...: ❝ POST:mr6=java.lang.Runtime.getRuntime().exec("calc"); ❞ java调用本地计算器 即可达到命令执行的效果...我们可以用java调用js后,再调用defineClass来实现: 编写一个命令执行的类:calc.java import java.io.IOException; public class calc
众所周知,高级编程语言编写的程序,最终要转化为机器码,才可以在计算机上运行。我们在编写完一段Java代码后,如果想要运行它,需要通过Java编译器,将其编译为JVM认识的字节码文件。...这样的话,Java程序就可以在任何安装了JVM的平台上运行。这就是Java语言一次编写到处运行的跨平台特性。翻译字节码的工作,是由JVM的执行引擎完成。...在程序启动时,解释器可以立即发挥作用,省去编译时间;随着程序运行时间的推移,JIT编译器逐渐发挥作用,将越来越多的热点代码编译为本地机器码,以提高执行效率。Main方法什么时候被执行?...运行时数据区域开始工作执行引擎工作期间,会和运行时数据区域有大量的交互。线程私有的空间调用main方法时,会创建一个线程并在运行时数据区中分配线程私有的空间:栈帧以及程序计数器。...程序计数器初始时会指向第一条指令, 然后随着指令的执行而递增。执行静态变量赋值的指令时,会把整数推送到栈帧中的操作数栈,随后赋值给静态变量。
领取专属 10元无门槛券
手把手带您无忧上云