首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我可以从同一个jar文件中执行两个不同的类吗?

是的,可以从同一个jar文件中执行两个不同的类。在Java中,jar文件是一种压缩文件格式,用于存储Java类、资源文件和其他相关文件。可以使用Java的命令行工具或者Java开发工具(如Eclipse、IntelliJ IDEA等)来执行jar文件中的类。

要执行jar文件中的特定类,可以使用以下命令:

代码语言:txt
复制
java -cp <jar文件路径> <类的完全限定名>

其中,-cp参数用于指定类路径,即jar文件的路径,<类的完全限定名>指定要执行的类。

例如,假设有一个名为myjar.jar的jar文件,其中包含了两个类com.example.ClassAcom.example.ClassB。要执行这两个类,可以使用以下命令:

代码语言:txt
复制
java -cp myjar.jar com.example.ClassA
java -cp myjar.jar com.example.ClassB

这样就可以分别执行jar文件中的两个不同类了。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

同一个报告可以两个同名度量值?试试呗

这事我们得2018年那次更新说起: Power BI在2018年11月更新后,使得我们可以将列和度量值放到一个文件管理,这样我们可以使复杂报告编写环境变得简洁一些。...如果想在FOLDER2将这些度量值再分组呢?自然也是可以,比如在显示文件输入FOLDER2\SUBFOLDER1: ?...这时有同学会说,这样还是将一堆度量值和一堆列放在一张表不想在数据表存放度量值,那有没有办法,将所有的度量值放在单独一个表?当然也是可以。 我们可以新建一个表,输入一个数据,加载: ?...但是有时候我们又会遇到另一个问题: 假设写了一个度量值,这个度量值在多页报告中都要使用,难道同一个度量值要写重复两次?而且两个度量值名还不能是一样。这就比较麻烦了。 但是,请看下图: ?...我们发现,MA这个度量值同时出现在两个文件。 ???难道现在同一个文件可以出现两个相同名称度量值? 自然是不能。这里有什么诀窍呢?请看: ?

1.2K41

可以在不source脚本情况下将变量Bash脚本导出到环境

/usr/bin/env bash export VAR="HELLO, VAR" 当我执行脚本并尝试访问 $VAR 时,没有得到任何值!...echo $VAR 有没有一种方法可以通过只执行 export.bash 而不 source 它获取 $VAR? 答: 不可以。 但是有几种可能解决办法。...在调用 shell 上下文中执行脚本: $ cat set-vars1.sh export FOO=BAR $ . set-vars1.sh $ echo $FOO BAR 另一种方法是在脚本打印设置环境变量命令.../set-vars2.sh)" $ echo "$FOO" BAR 在终端上执行 help export 可以查看 Bash 内置命令 export 帮助文档: # help export export...-f 指 shell 函数 -n 每个(变量)名称删除 export 属性 -p 显示所有导出变量和函数列表 ---- 参考: stackoverflow question 16618071

15820

真不信,这年头还有人能懂SpringBootClassLoader加载机制

如果使用JDK默认双亲委派模式,Tomcat加载器可以加载?我们思考一下Tomcat作为一个Web容器使用场景。 在Web容器,可能同时需要部署两个以上应用程序。...一个典型场景是不同应用程序会依赖同一个第三方不同版本,不能要求同一个库在同一个服务器只有一份,因此要保证每个应用程序库都是独立,保证相互隔离。...Tomcat如果使用默认加载器,是无法加载两个相同类库不同版本。...所以Tomcat团队设计了自己独特加载机制,解决上面的应用jar包冲突等问题,通过自定义加载机制可以完美地解决Tomcat容器不同应用隔离问题。...你可以在Spring Boot工程项目中看到,在pom.xml文件引入了如下依赖: jar包目录结构如下: 从这个目录结构,你可以看到Tomcat启动包(tomcat-embedcore-8.5.29

4.1K20

Java ClassLoader 透析

可以不同文件目录加载,也可以不同 jar 文件中加载,也可以网络上不同服务地址来加载。...URLClassLoader 不但可以加载远程库,还可以加载本地路径库,取决于构造器不同地址形式。...使用 ClassLoader 可以解决钻石依赖问题。不同版本软件包使用不同 ClassLoader 来加载,位于不同 ClassLoader 名称一样实际上是不同。...(depv2Class) 我们还可以两个不同版本 Dep 实现同一个接口,这样可以避免使用反射方式来调用 Dep 里面的方法。...位于同一个 ClassLoader 里面的名是唯一不同 ClassLoader 可以持有同名。ClassLoader 是名称容器,是沙箱。 ?

50720

30道“热乎乎” JVM 典型题目剖析!

问题 您好,不太看懂入栈和出栈有什么意义,可以给我解释一下?谢谢!...问题 自定义加载器本身是由系统加载器加载,也就是说其本身是没有加密,那么拿到该类反编译就可以看到如果解密class文件了,请问老师是这样么?...比如你代码里用两个不同层级加载器,都去尝试加载了某个,如果有双亲委派机制,那么都会先找父加载器去加载,如果加载到了,那么以后就只会是他去加载这个。...否则如果没有双亲委派机制,那么岂不是两个不同层级加载器可以加载同一个,造成重复加载! ? 问题二十三 ? 问题 自定义加载器如何实现?...解答 你好,不是加载两次,是JVM先把“.class”字节码文件加载到内存里,然后执行时候,就直接使用加载好即可,不会重复加载 ? 问题三十 ?

59710

Java 加载机制详解

加载机制是 Java 语言一大亮点,使得 Java 可以被动态加载到 Java 虚拟机。 这次我们抛开术语和概念,例子入手,由浅入深地讲解 Java 加载机制。...开发者也可以把自己编写打包成 jar 文件放入该目录下; 最后还有一种,是动态加载远程 .class 文件。...实际上,针对上面四种来源,分别有不同加载器负责加载。 首先,我们来看级别最高 Java 核心,即$JAVA_HOME/jre/lib 里核心 jar 文件。...下面来实现一个网络加载器,这个加载器可以网络上动态下载 .class 文件并加载到虚拟机中使用。...当然,加载是很有意思技术,很难覆盖所有知识点,比如不同类加载器加载同一个,得到实例却不是同一个等等。 之后还会写作关于热修复/动态更新相关技术,欢迎关注。谢谢。

50610

Jar包冲突问题及解决方案!

maven仲裁机制选择了错误版本 1.2 同一个出现在多个不同Jar 同样出现在了应用程序所依赖两个及以上不同Jar,这会导致什么问题呢?...从上面的描述可以发现出现不同Jar冲突问题有以下三个必要条件: 同一个 M 出现在了多个依赖Jar,为了叙述方便,假设还是两个:A 和 B Jar包 A 和 B 该类 M 有差异,无论是方法签名不同也好...若路径长度一致,则按照“第一声明优先”原则进行仲裁,即选择POM中最先声明版本 maven仲裁机制可以发现,除了第一条仲裁规则(这也是解决Jar包冲突常用手段之一)外,后面的两条原则,对于同一个...对于A、B这两个Jar包,maven就显得无能为力了,因为maven只会为你针对同一个Jar不同版本进行仲裁,而这俩是属于不同Jar包,超出了maven依赖管理范畴。...当然,除了这些方法,还可以加载器角度来解决该问题,可参考博文——如果jar包冲突不可避免,如何实现jar包隔离,其思路值得借鉴。

5K41

SpringBoot和Spring到底有没有本质不同

大家好,又见面了,是你们朋友全栈君。 现在Spring相关开发都是基于SpringBoot。 最后在打包时可以把所有依赖jar包都打进去,构成一个独立执行jar包。...如下图: 使用java -jar命令就可以运行这个独立jar包。...由此可见,名称上解释和刚刚从启动方式上解释是吻合,是一致。 这也说明,“时刻关注细节,你将发现更多”。这句话不仅可以用在工作当中,亦可以用在学习、生活。...细心同学又会发现,后者还有一个Servlet呢,这又怎么解释呢? 这说明这个WebServer是基于Servlet实现。难道还有不是基于Servlet?...也是先定义两个成员变量,和上面的如出一辙,如下图: 也是用相同两个来负责处理,如下图: 编程新说注:实例化时虽然调用构造函数不同,但是最终执行却是相同构造函数。

33600

Java 加载机制详解

加载机制是 Java 语言一大亮点,使得 Java 可以被动态加载到 Java 虚拟机。 这次我们抛开术语和概念,例子入手,由浅入深地讲解 Java 加载机制。...开发者也可以把自己编写打包成 jar 文件放入该目录下; 最后还有一种,是动态加载远程 .class 文件。...实际上,针对上面四种来源,分别有不同加载器负责加载。 首先,我们来看级别最高 Java 核心,即$JAVA_HOME/jre/lib 里核心 jar 文件。...下面来实现一个网络加载器,这个加载器可以网络上动态下载 .class 文件并加载到虚拟机中使用。...当然,加载是很有意思技术,很难覆盖所有知识点,比如不同类加载器加载同一个,得到实例却不是同一个等等。 之后还会写作关于热修复/动态更新相关技术,欢迎关注。谢谢。

71940

JavaInstrumentation原理分析

Jar 文件跟 Premain 那个例子里面的 Jar 文件差不多,也是把 main 和 agentmain ,TransClass,Transformer 等放在一起,打包为“TestInstrument1....jar”,而 Jar 文件当中 Manifest 文件为: Manifest-Version: 1.0 Agent-Class: AgentMain 另外,为了运行 Attach API,我们可以再写一个控制程序来模拟监控过程...而且,这样可能需要编译较大数量动态链接库 —— 比如,我们有三个本地函数,假设每一个都需要一个替换,而在不同应用之下,可能需要不同组合,那么如果我们把三个函数都编译在同一个动态链接库之中,最多我们需要...另外一个事实是,与我们想像不同,对于两个或者两个以上 prefix,虚拟机并不做更多解析;它不会试图去掉某一个 prefix,再来组装函数接口。它做且仅作两次解析。...首先,我们加入到 classpath jar 文件不应当带有任何和系统 instrumentation 有关系统同名,不然,一切都陷入不可预料之中 —— 这不是一个工程师想要得到结果,不是

42830

一步之差进入大厂,下定决心钻透java所有面试题,顺利通过!

我们思考一下:Tomcat是个web容器, 那么它要解决什么问题: 一个web容器可能需要部署两个应用程序,不同应用程序可能会依赖同一个第三方不同版本,不能要求同一个库在同一个服务器只有一份,...部署在同一个web容器相同库相同版本可以共享。否则,如果服务器有10个应用程序,那么要有10份相同库加载进虚拟机。 web容器也有自己依赖库,不能与应用程序库混淆。...第一个问题,如果使用默认加载器机制,那么是无法加载两个相同类库不同版本,默认加器是不管你是什么版本,只在乎你全限定名,并且只有一份。...,每个war包应用都有自己WebappClassLoader,实现相互隔离,比如不同war包应用引入了不同spring版本, 这样实现就能加载各自spring版本; 图中委派关系可以看出:...模拟实现TomcatwebappClassLoader加载自己war包应用内不同版本类实现相互共存与隔离 注意:同一个JVM内,两个相同包名和对象可以共存,因为他们加载器可以不一 样,所以看两个对象是否是同一个

31700

SPI简单应用

在这个方法里,发现在项目启动驱动管理器会系统变量jdbc.drivers获取具体驱动实现并注册,其次会使用SPI注册驱动。这些在 再谈驱动注册 已经讲过了,那么什么是SPI?怎么用?...具体是在JAR/META-INF/services/目录下建立一个文件文件名是接口全限定名,文件内容可以有多行,每行都是该接口对应具体实现全限定名。...这有两个maven子项目,分别是learn-spi和learn-spi-cluster。learn-spi是接口和main方法,learn-spi-cluster写是实现和资源文件。...最后,将两个jar包放到同一个目录下,在该目录下执行 java -jar learn-spi-1.0-SNAPSHOT.jar 你就会看到输出以下内容 你好 SPI HELLO SPI 总结 jdk1.6...开始,java支持了SPI,使用java.util.ServiceLoaderMETA-INF/services/寻找接口全限定名对应文件,在文件每一行加载其实现并实例化。

61910

Java虚拟机--加载器如何加载一个Class文件

加载机制 虚拟机把数据.class文件加载到内存,并对class文件数据进行校验、转换、解析、初始化等操作后,最终形成可以被虚拟机识别并使用Class对象过程就叫做“虚拟机加载”,主要包括为...加载机制 阶段一:加载 加载,加载器通过全限定名来获取二进制字节流,获取方式可以通过jar包、war包、网络、JSP文件获取,绝大部分情况下是通过jar包、war包获取。...例如:,比较两个是否“相等”,只有在这两个是由同一个加载器加载前提下才有意义。...否则,即使两个来源于同一个Class文件,被同一个虚拟机加载,只要加载他们加载器不同,那这两个就必定不相等。...image 执行main()方法,结果如下: sun.misc.Launcher$AppClassLoader@8fd9b4d 输出可以看出,放置到/lib目录下

94250

31道Java核心面试题,一次性打包送给你

Java 中有三个内置加载器: 启动加载器(Bootstrap Class-Loader),加载 jre/lib 包下面的 jar 文件,比如说常见 rt.jar(包含了 Java 标准库下所有文件...也就是说,如果两个加载器不同,即使两个来源于同一个字节码文件,那这两个就必定不相等(比如两个 Class 对象不 equals)。 是不是有点晕,来来来,通过一段简单代码了解下。...,但方法参数个数不同,另外也不涉及到继承,两个方法在同一个。...20、一个 Java 源文件中有多个 public ? 一个 Java 源文件不能有多个 public 。 ? 21、什么是 Java package(包)?...同一个,不管是哪种权限修饰符,都可以访问; 同一个包下,private 修饰无法访问; 子类可以访问 public 和 protected 修饰; public 修饰符面向世界,哈哈,可以被所有的地方访问到

73510

【JVM系统学习之路】一篇看懂加载

通过网络获取,典型场景:Web Applet zip压缩包读取,成为日后 jar、war 格式基础 运行时计算生成,使用最多是:动态代理技术 由其他文件生成,典型场景:JSP 应用专有数据库中提取....class 文件,比较少见 加密文件获取,典型防 Class 文件被反编译保护措施链接阶段验证 Verify 目的在于确保 Class 文件字节流包含信息符合当前虚拟机要求,保证被加载正确性...也就是说,当我们代码包含 static 变量时候,就会有 clinit 方法 构造器方法中指令按语句在源文件中出现顺序执行不同构造器。... (报错:阻止创建 java.lang 开头)如何判断两个class对象是否相同 在JVM中表示两个class 对象是否为同一个存在两个必要条件: 完整名必须一致,包括包名。...换句话说,在 JVM ,即使这两个对象(class对象)来源同一个 Class 文件,被同一个虚拟机所加载,但只要加载它们 ClassLoader 实例对象不同,那么这两个对象也是不相等

41241

深入浅出Java加载机制使用自己类别载入器

lib目录下.jar档案(例如rt.jar载入。...** loadclass方法载入实例时,不会执行静态区域,而是会等到真正使用来初始化实例时候执行 ** 使用自己类别载入器 由同一个classloader载入,会只有一个class对象实例...,如果同一个是由不同loader载入的话,就会有两个不同classloader实例。...如果两个不同类别在搜索同一个,如果在appclassloader就搜到的话,那么class实例就只有一个。...在 不同環境,應用程式可能會設定自己類別載入器,例如在Tomcat類別載入器,會找尋Tomcat目錄libjar檔案之類別,而Web應 用程式也會從WEB-INFlib找尋jar檔案,

72220

java学习笔记 head first java

一些与众不同设计 staic初始化 加载时,会执行static{xxx},这个可以初始化staic final变量 public class Bar{ public static final...如果两个对象引用了同一个对象,那么序列化时候也只会有一份(比较聪明)。 反序列化时。 对象stream读出来 jvm通过存储信息判断出对象class类型 jvm尝试寻找和加载对象。...是个pkzip格式文件,把一组文件包装起来,只需交付一个JAR文件。 可执行JAR代表用户不需要把文件抽出来就能运行。...创建可执行JAR 确定所有文件都在classes目录下 创建manifest.txt(中文:货单)来描述哪个带有main()方法。...把package,com结构打包进jar Step1: 确定所有文件在class目录下正确对应包结构

57520

JavaInstrumentation原理分析

转换发生在 premain 函数执行之后,main 函数执行之前,这时每装载一个,transform 方法就会执行一次,看看是否需要转换,所以,在 transform(Transformer )方法...返回 1 那个 TransClass 文件保留在 jar,而返回 2 那个 TransClass.class.2 则放到 jar 外面。...而且,这样可能需要编译较大数量动态链接库 —— 比如,我们有三个本地函数,假设每一个都需要一个替换,而在不同应用之下,可能需要不同组合,那么如果我们把三个函数都编译在同一个动态链接库之中,最多我们需要...另外一个事实是,与我们想像不同,对于两个或者两个以上 prefix,虚拟机并不做更多解析;它不会试图去掉某一个 prefix,再来组装函数接口。它做且仅作两次解析。...首先,我们加入到 classpath jar 文件不应当带有任何和系统 instrumentation 有关系统同名,不然,一切都陷入不可预料之中 —— 这不是一个工程师想要得到结果,不是

1.3K31

你绝对不知道加载器骚操作

用加载器可以完成什么工作呢 1.加载 这当然是它最本职也是最基础工作 通过使用不同加载器,可以不同来源加载二进制数据,通常有如下几种来源。...本地文件系统加载class文件,这是前面绝大部分示例程序加载方式。 本地加载是优先于jar加载,之前启动应用碰到一个问题。...JAR包加载class文件,这种方式也是很常见,前面介绍JDBC编程时用到数据库驱动就放在JAR文件,JVM可以JAR文件中直接加载该class文件。 通过网络加载class文件。...明明是在自己写String里面执行main方法,却提示找不到main方法,说明真实加载其实是原本String,故而没有main方法,这样就保护了jdk本身存在不会被恶意篡改。...即使这两个来源于同一个 Class文件,被同一个Java虚拟机加载,但只要加载它们加载器不同,那这两个就必定不相等。

60331
领券