今天在维护一个遗留了很久很久的用Java开发的系统的时候,在做了一些修改后,报了一个类找不到,由于这个系统实在是上了年纪了,里面很多类估计都有二十多岁了,实在不知道这个类是在哪个包里,于是乎想到能不能写个工具来查找.../bin/sh find_dir=$1 find_key=$2 jars=`find $find_dir -name '*.jar'` for jar in $jars do ret=`jar...tvf $jar | grep $find_key` if [ "$?"...= "0" ]; then ret=`echo $ret | awk '{print $8}'` echo -e "\e[1;34m${jar}\e[0m: \e[2;34m...echo $ret | awk '{print $8}'` echo -e "\e[1;34m${war}\e[0m: \e[2;34m${ret}\e[0m" fi done 使用方法
二、制作jar的步骤 一、先写一个java类-Timestamp.java代码如下: package timestamp; import java.text.SimpleDateFormat; import...2、通过jar命令将timestamp.class 文件打包成jar包,我把整个包打包,如下: 运行jar命令后,当前目录下会生成一个jar包,如下: 3、用压缩软件打开jar包,找到META-INF...到此为止jar制作完成,那么怎么在jmeter里面应用呢?请继续看下去哦!!...三、jar包在jmeter的应用 1、在jmeter新建一个线程组,且在线程组把刚才生成jar添加到classpath,如下: 2、然后新建一个BeanShell Sampler,且写下java代码...目前jar包制作和jar在jmeter中应用中就差不多就是这样子。
它与传统 jar 包最大的不同是包含了一个 lib 目录和内嵌了 web 容器(以下均以 tomcat 为例)。 jar 包通 常是由集成在 pom.xml 文件中的 maven 插件来生成的。...在打包的时候默认使用的是 repackage。...RepackageMojo 类就是 提供重新打包现有的 jar 或 war 包文件,使得它们可以使用 javajar 来进行启动。 RepackageMojo 的 execute 方法如下。...很显然,使用了相同的实现类来处理 ZIP 文件和 DIR 文件。 jar 类型为 Layouts 类的内部类,可以简单看一下 jar 类型的处理类都包含 了哪些内容。...JarLauncher 类位 于 spring-boot-loader 项目中,在 jar 包的 org 目录中便存储着 Launcher 相关类的 class 文件。
spring-boot-maven-plugin SpringBoot 的可执行jar包又称fat jar ,是包含所有第三方依赖的 jar 包,jar 包中嵌入了除 java 虚拟机以外的所有依赖,是一个...普通插件maven-jar-plugin生成的包和spring-boot-maven-plugin生成的包之间的直接区别,是fat jar中主要增加了两部分,第一部分是lib目录,存放的是Maven依赖的...在构造的时候会解析内部结构,去获取jar包里的各个文件或文件夹类。我们可以看一下该类的注释。...包依赖的所有类和资源,将该urls参数传递给父类java.net.URLClassLoader,由父类的java.net.URLClassLoader#findClass执行查找类方法,该类的查找来源即构造方法传递进来的...,这里使用了2个URL,分别对应jar包中依赖包spring-boot-loader和spring-boot,使用 "!
前言 在Mac中用android studio 导出jar包最重要的是需要配置gradle ,它包的导出也是通过gradle命令进行的。...所以,如果想成功打包,要先配置好gradle环境,这样你才可以在android studio中的terminal中直接使用gradle命令了。下面话不多说了,来一起看看详细的介绍吧。...1.在你需要打包的module的builde.gradle文件中 将 apply plugin: 'com.android.application' 中的 application 改成 library...,并注释掉 applicationId 这一行 2.在build.gradle文件中添加下面类容(内容和android{……}模块平级,不要加到android 模块中去了): task clearJar...) { baseName 'sdk' //指定生成的jar名 //从哪里打包class文件,这个是你module中生成的class文件,如果没有classes文件夹,不妨先运行下你的应用 from
使用-jar参数时,后面的参数是的jar 【spring-0.0.1-SNAPSHOT.jar】,该jar文件中包含的是class和资源文件; 在manifest文件中有Main-Class的定义;Main-Class...spring-boot-maven-plugin默认有5个goals:repackage、run、start、stop、build-info。在打包的时候默认使用的是repackage。...spring-boot-maven-plugin的repackage在代码层面调用了RepackageMojo的execute方法,而在该方法中又调用了repackage方法。...,将maven生成的jar重新打包成可执行jar Repackager repackager = getRepackager(source.getFile()); // 查找并过滤项目运行时依赖的...而在SpringBoot打包的fatJar中,则是使用后者JarFileArchive ---- JarFile JarFile:对jar包的封装,每个JarFileArchive都会对应一个JarFile
spring-boot-autoconfigure 模块 Spring的出现给我们管理 Bean 的依赖注入提供了便捷,但是当我们需要使用通过 pom 引入的 jar 里面的一个 Bean 时候,还是需要手动在...spring-boot-loader 模块 Java 原生类加载器局限及改进思路 Java 中每种 ClassLoader 都会去自己规定的路径下查找字节码文件并加载到内存(可以参考《Java 类加载器揭秘...如上图 Application 假设为含有 main 函数的类,之前是直接使用 AppClassLoader 进行加载,那么现在我们先使用 APPClassLoader 加载 Launcher 类,该类内部在创建一个...首先在打包时候会使用 spring-boot-maven-plugin 插件重写打成的 jar 文件,会设置META-INF/MANIFEST.MF 中的 Main-Class:org.springframework.boot.loader.JarLauncher...spring-boot-maven-plugin 插件打包流程分析 SpringBoot 应用打包时候需要引入如下 Maven 插件才会生成上面介绍的结构的 jar。
Spring Boot Maven Plugin 上篇文章我们提到了Spring Boot Maven Plugin,通过使用该插件,可以有效的提高部署效率,并打包成为fat jar/war包。...在打包成fat jar/war包的时候,背后实际上做了如下的事情: 管理了classpath的配置,这样我们在运行java -jar的时候不用手动指定-cp 。...通过manifest自动查找main() ,这样我们就不需要在java -jar中手动指定main方法。...使用Maven命令来运行应用程序 要使用maven命令来运行应用程序可以在程序的根目录下面执行: mvn spring-boot:run 它会自动下载所需要的依赖,并运行,运行日志如下: mvn spring-boot...如果想打包成fat jar/war, 需要使用Maven Spring Boot plugin,如下所示,否则打包出来的jar包并不包含外部依赖:
[Jar|War]Launcher固定去查找当前jar的lib目录里面的嵌套jar文件里面的资源。...首先在打包时候会使用spring-boot-maven-plugin插件重写打成的jar文件,会设置META-INF/MANIFEST.MF中的 Main-Class: org.springframework.boot.loader.JarLauncher...三、spring-boot-maven-plugin插件打包流程分析 ?...image.png 看完这个流程在分析下第三节留的问题,如流程图首先使用Appclassloader加载了JarLauncher类并创建了LaunchedURLClassLoader类,而LaunchedURLClassLoader...五、总结 spring-boot-load模块通过自定义jar包结构自定义类加载器优雅的实现了嵌套jar资源的加载,通过打包时候重新设置启动类和组织jar结构,通过运行时设置自定义加载器来实现嵌套jar
文章目录 一、扩展方法示例 二、静态扩展方法配置 三、编译静态扩展类 四、打包静态扩展类字节码到 jar 包中 五、测试使用 Thread 静态扩展类 一、扩展方法示例 ---- 为 Thread 扩展...静态扩展方法 ; 配置完成后的项目结构如下 : 三、编译静态扩展类 ---- 在 Terminal 面板中 , 执行 cd src/main/groovy 命令 , 进入到 src/main/groovy...中定义了 Thread 类的扩展方法 ; 编译过程及结果如下 : 四、打包静态扩展类字节码到 jar 包中 ---- 在 执行 jar -cf thread.jar -C classes ....命令 , 将 classes 中的字节码文件按照 manifest/ 规则 , 打包到 thread.jar 文件中 ; 五、测试使用 Thread 静态扩展类 ---- 创建一个 Groovy 脚本..., 执行为 Thread 扩展的静态方法 hello 方法 ; Thread.hello{ printf "Hello" } 在 Terminal 面临中 , 使用命令行执行该 Groovy
对于SpringBoot项目,我们会在pom.xml文件添加打包插件spring-boot-maven-plugin,那么执行打包的时候,会生成相应的jar文件,比如: spring-boot-hello...MANIFEST.MF; 2、把依赖的jar包进行打包; 在jar包里打包进去了别的jar包,这样的jar成为fat jar,也叫作uber jar。...使用百度翻译如下: 使用-jar参数时,后面的参数是jar的文件名称(本例子中是spring-boot-hello-0.0.1-SNAPSHOT.jar),该jar文件中包含的是class和资源文件;在...1)加载jar中的jar文件以及class文件; (2)启动main方法; 对于main方法启动类上的注解@SpringBootApplication注解是在相应的jar中的,很显然不能直接先启动...中是由classloader来完成的,java内置的classloader不能满足要求,也就需要Spring Boot自定义ClassLoader来搞定这个事情了,也就是JarLauncher是一个自定义的类加载器
【背景】spring-boot项目,打包成可执行jar,项目内有两个带有main方法的类并且都使用了@SpringBootApplication注解(或者另一种情形:你有两个main方法并且所在类都没有使用...清单文件中的Main-Class由layout控制 这里的Start-Class就是我们配置的,而Main-Class受layout属性的控制,别被名字搞乱了(是不是很诡异...来张图直观的感受下,对应使用上面xml配置打包后的清单文件(MANIFEST.MF): ? layout属性默认不需要配置,插件会自动推断。...简单点说,这货重新打包个可执行的jar/war,可以在命令行使用-jar执行。如果指定layout为NONE那就没有主类只是打个普通的jar(不可执行),一般不会这么做。 ...一般情况,这个目标会打一个新的jar/war,并把maven默认打的jar/war添加.original后缀,在target目录下可以看到: ?
即使能打包成功,用java -jar启动jar包也会报Class Not Found,依赖的producer工程的类找不到。...如果你在producer中使用了spring-boot-maven-plugin的默认配置build,或者在parent工程中使用spring-boot-maven-plugin的默认配置build。...那么在clean package的时候会发现moduleA找不到base中的类。原因就是默认打包出来的jar是不可依赖的。...as a dependency 总结:回到聚合maven上,如果你在parent工程中使用了spring-boot-maven-plugin作为builder,那么你的依赖module一定要用解决方案二来设置...否则你不在parent工程中用spring-boot-maven-plugin作为builder,而在需要打包的module上使用。
基于SpringBoot开发的项目代码可以打包成可执行jar,也可以打包成war,这个视不同需求而定,下面以SpringBoot2.4.0版本为例,分别列举了不同使用方式下的jar和war打包操作。...jar,需要在pom中配置packaging=jar,就是下面这样: jar 接着,使用finalName标签配置最终jar包的名字,然后配置spring-boot-maven-plugin... 以上就是pom中的配置了,接下来执行jar打包操作,如果使用IDEA图形化工具打包...,接下来执行jar打包操作,如果使用IDEA图形化工具打包,双击执行Maven窗口下Lifecycle中的package,即执行打jar包;如果想通过执行mvn指令打jar,需要cd到源码根目录,即pom.xml...因为spring-boot-starter-parent pom.xml中已经帮我们管理好了打包需要用到的spring-boot-maven-plugin插件和它需要依赖的其它插件,所以通过继承可以直接使用
这个插件,它是继承的父工程 spring-boot-starter-parent 的 spring-boot-maven-plugin 插件,父 pom 中的 spring-boot-maven-plugin...如果在项目 pom 文件中,没有继承 spring-boot-starter-parent 的话,那么 spring-boot-maven-plugin 插件就没有了继承关系,所以只能自己手动指定主类加载...三、后续 但是在使用过程中,我发现修改 conf 里面的 yml 配置文件没有生效: ? ? 经过排查之后才发现,生成的 jar 包文件中,有相关 yml 文件,所以修改 conf 目录才会不生效。...四、总结 1、如果需要打成可执行 jar 包的话,可以使用 spring boot 的打包插件:spring-boot-maven-plugin 。...2、不过还是推荐第二种打包方式,因为使用很方便,特点如下: 可以将 jar 包操作脚本写入到 bin 目录下,方便程序的启动与停止。
接下来我们基于之前练习使用的应用程序,看看如何构建Spring Boot Uber JAR。...Note:Uber JAR是将应用程序打包到单独的jar包中,该jar包包含了应用程序依赖的所有库和二进制包。...运行Jar启动Java web应用 分析 如上所示,打包成可执行的jar包这种方法相当直观,背后的工作由spring-boot-maven-plugin插件实现:先通过maven-shade-plugin...生成一个包含依赖的jar,再通过spring-boot-maven-plugin插件把spring boot loader相关的类,还有MANIFEST.MF打包到jar里。...总结下Spring Boot应用的启动流程:(1)spring boot应用打包之后,生成一个fat jar,里面包含了应用依赖的jar包,还有Spring boot loader相关的类;(2)Fat
Boot的任何Launcher NONE,将所有的依赖库打包,但是不打包Spring Boot的任何Launcher 打包后观察下 jar包 的大小 和 里面的内容 重点关注下Main-Class...org.springframework.boot.loader.Launcher类是特殊的引导程序类,用作可执行jar的主要入口点。...它们的目的是从目录中的嵌套jar文件或war文件(而不是在类路径中显式的文件)加载资源(.class文件等)。 对于JarLauncher和WarLauncher,嵌套路径是固定的。...如果需要,可以在这些位置添加额外的罐子。 默认情况下,PropertiesLauncher在应用程序存档中的BOOT-INF / lib /中查找。...可以通过在loader.properties(这是目录,归档文件或归档文件中的目录的逗号分隔列表)中设置一个称为LOADER_PATH或loader.path的环境变量来添加其他位置 概括一下: 启动器
一、打成jar部署 利用springboot的插件打包 org.springframework.boot spring-boot-maven-plugin 打jar的小细节 当有引入本地jar配置,如下图 ?...会发现无法把本地的jar打进Boot-INF中,则此时要做如下配置 方法一 在pom.xml的resources节点添加如下内容 <directory...生成器的json文件,则也要把相应的文件打进resources中,否则项目启动会因找不到配置文件,而报错,配置文件如下 ${basedir...,不使用spring-boot-maven-plugin插件打包,因为这个打包插件会把jar打包在Boot-INF目录下导致别的项目引用时引用不到,此时改用maven-war-plugin打包,具体配置如下
以前写过一个 http 框架 cicada,其中有一个可拔插 IOC 容器的功能: 就是可以自定义实现自己的 IOC 容器,将自己实现的 IOC 容器打包为一个第三方包加入到依赖中,cicada 框架就会自动使用自定义的...ServiceLoader 类中会会去查找 META-INF/services 的文件,然后解析其中的内容从而反射生成对应的接口对象。...这里还有一个关键是通常我们的代码都会打包为一个 JAR 包,类加载器需要加载这个 JAR 包,同时需要在这个 JAR 包里找到我们之前定义的那个 spi 文件,如果这里查不到文件那就认为没有定义 SPI...这是不配置 agent 的时候使用的 classLoader: 使用这个 loader 是可以通过文件路径在 jar 包中查找到我们配置的文件。...初步判断使用 opentelemetry-javaagent.jar的 agent 之后,它的类加载器优先于了 spring boot ,从而导致后续的加载失败。
今天在类中使用 uasort() 函数时发现报了错误:Warning: uasort() expects parameter 2 to be a valid callback ..., 然而直接在纯 php...array('id' => 3, 'margin' => 300), ); uasort($ary, 'compareByMargin'); } } 直接调用类里的...uasrot() 里的回调函数'compareByMargin'调用不明确, 编译器不知道是调用的哪里的这个函数....之后搜索了一下, 解决方案如下: 在类里这样调用:uasort($ary, array($this,"compareByMargin")) 就可以了....这样明确告诉编译器是指向当前类的compareByMargin函数.
领取专属 10元无门槛券
手把手带您无忧上云