agent 属于基础必备服务时,可以用这种方式 当目标应用程序启动之后,并没有添加-javaagent加载我们的 agent,依然希望目标程序使用我们的 agent,这时候就可以使用 attach 方式来使用...包,有两种常见的使用姿势 a. pom 指定配置 在 pom.xml 文件中,添加如下配置,请注意一下manifestEntries标签内的参数 ...MANIFEST.MF 配置文件 通过配置文件MANIFEST.MF,可能更加常见,这里也简单介绍下使用姿势 在资源目录(Resources)下,新建目录META-INF 在META-INF目录下,新建文件...然后我们的pom.xml配置,需要作出对应的修改 org.apache.maven.plugins...jvm 方式加载时调用,即目标应用在启动时,指定了 agent -javaagent:xxx.jar agentmain() agent 以 attach 方式运行时调用,目标应用程序正常工作时使用
如下增加buildnumber-maven-plugin插件,并给maven-jar-plugin插件指定写入MANIFEST.MF的参数。...那么程序在开发调试的时候,并没有生成pom.properties,和MANIFEST.MF,也就无法读取版本信息了。...所以另一种思路就是用 template-maven-plugin插件让maven自动生成一个包含版本信息的代码如Version.java。这样任何时候,程序都能很方便的知道自己的版本号了。...maven内置变量${maven.build.timestamp}做时间戳,实际运行并没有被正确替换,不知道原因。...插件会将/src/main/java/java-templates/文件夹下的所有模板中的${xxx}占位符都用maven中同名的变量替换一遍, 生成的Version.java在${project.build.directory
今天新写的SpringBoot项目打jar包部署的时候遇到一个问题,xxx.jar包中没有主清单属性。...如下图所示: 主清单属性是jar包中MANIFEST.MF文件中的一个属性,MANIFEST.MF文件位于jar包的META_INF路径下 打开MANIFEST.MF文件,里面有如下属性: Manifest-Version...,以及配置文件,都存储在该路径下 Spring-Boot-Lib:属性值代表了表示依赖的jar包存储的位置 以上这些属性是Springboot打包插件默认生成,缺少这些属性项目无法运行。...一顿操作之后你的项目可能会OK了,但也可能仍然有问题 我项目的POM文件是自动生成的在build标签里面附带了一个pluginManagement标签,我们知道pluginManagement一般是在父...当我百思不得其解的时候 ,我比较了我之前项目的pom文件,发现没有这个标签,然后我尝试删除pluginManagement标签之后。再次编译的jar包终于运行成功。
主要包含两个部分,一部分是实现代码,一部分是配置文件。 配置文件放在 META-INF 目录下,文件名为 MANIFEST.MF 。...MANIFEST.MF 配置文件 在目录 resources/META-INF/ 下创建文件名为 MANIFEST.MF 的文件,在其中加入如下的配置内容: Manifest-Version: 1.0...在 pom 文件中加入以下配置 org.apache.maven.plugins<...上面这是一种打包方式,需要单独的 MANIFEST.MF 配合,还有一种方式,不需要在项目中单独的添加 MANIFEST.MF 配置文件,完全在 pom 文件中配置上即可。...运行打包命令 接下来就简单了,执行一条 maven 命令即可。
主要包含两个部分,一部分是实现代码,一部分是配置文件。 配置文件放在 META-INF 目录下,文件名为 MANIFEST.MF 。...MANIFEST.MF 配置文件 在目录 resources/META-INF/ 下创建文件名为 MANIFEST.MF 的文件,在其中加入如下的配置内容: Manifest-Version: 1.0Created-By...在 pom 文件中加入以下配置 org.apache.maven.plugins</groupId...上面这是一种打包方式,需要单独的 MANIFEST.MF 配合,还有一种方式,不需要在项目中单独的添加 MANIFEST.MF 配置文件,完全在 pom 文件中配置上即可。...运行打包命令 接下来就简单了,执行一条 maven 命令即可。
那你有没有想过一个问题,那就是当我们执行 java -jar 命令后,到底底层做了什么就启动了我们的 SpringBoot 应用呢? 或者说一个 SpringBoot 的应用到底是如何运行起来的呢?...jar 文件的解压跟我们平常的 zip 解压是一样的,jar 文件采用的是 zip 压缩格式存储,所以任何可以解压 zip 文件的软件都可以解压 jar 文件。...对比我们上面解压后的文件,可以看到在左侧的资源文件 MANIFEST.MF 文件中有如图所示的一行。 !...由此我们先大胆的猜测一下,当我们在执行 java -jar 的时候,由于我们的 jar 里面存在 MANIFEST.MF 文件,并且其中包含了 Main-Class 属性且配置了 org.springframework.boot.loader.JarLauncher...总结 通过上面的内容我们知道了当我们在执行 java -jar 的时候,根据 java 官方规范会引导 jar 包里面 MANIFEST.MF 文件中的 Main-Class 属性对应的启动类,该启动类中必须包含
不依赖任何外界包,maven如何生成可以执行的jar? pom中不包含任何引用的情况下,只需要在pom中添加 maven-jar-plugin即可。...复制代码 对jar进行解压缩jar xvf xixi-1.0-SNAPSHOT.jar查看对应文件MANIFEST.MF ⇒ cat META-INF/MANIFEST.MF Manifest-Version...> 复制代码 执行成功输出 ⇒ java -jar xixi-1.0-SNAPSHOT.jar Xixi Say: hello 复制代码 再对解压缩后的MANIFEST.MF文件查看为 ⇒ cat...META-INF/MANIFEST.MF Manifest-Version: 1.0 Built-By: paxi Created-By: Apache Maven 3.3.3 Build-Jdk: 1.8.0...> 复制代码 再次运行 ⇒ java -jar xixi-1.0-SNAPSHOT.jar Xixi Say: hello 复制代码 MANIFEST.MF文件为 ⇒ cat META-INF/MANIFEST.MF
---- 打包插件 事实上,Java没有提供任何标准的方式来加载嵌套的jar文件 (jar中包含jar ,即Spring Boot 中的fat jar) Spring Boot 默认的打包插件如下:... 执行maven clean package之后,会生成两个文件,刚才我们也看到了 ?...spring-0.0.1-SNAPSHOT.jar ├── META-INF │ └── maven(主要是pom文件) │ └── MANIFEST.MF ├── BOOT-INF │ ├...在创建JarLauncher时,父类ExecutableArchiveLauncher找到自己所在的jar,并创建archive。...通过spring-boot-plugin 生成了MANIFEST.MF , main-class 指定运行java -jar的主程序把依赖的jar文件 打包在fat jar. ?
常用MAVEN打包方式总结 Maven可以使用mvn package指令对项目进行打包,如果使用Java -jar xxx.jar执行运行jar文件,会出现"no main manifest attribute...> maven-jar-plugin用于生成META-INF/MANIFEST.MF文件的部分内容,com.xxg.Main指定MANIFEST.MF...例如下面是一个通过maven-jar-plugin插件生成的MANIFEST.MF文件片段: [plain] view plain copy Class-Path: lib/commons-logging...-1.2.jar lib/commons-io-2.4.jar Main-Class: com.xxg.Main 只是生成MANIFEST.MF文件还不够,maven-dependency-plugin...和maven-assembly-plugin一样,生成的jar文件包含了所有依赖,所以可以直接运行。
mvn package指令对项目进行打包,如果使用java -jar xxx.jar执行运行jar文件,会出现”no main manifest attribute, in xxx.jar”(没有设置Main-Class...> maven-jar-plugin用于生成META-INF/MANIFEST.MF文件的部分内容, com.xxg.Main指定MANIFEST.MF中的...例如下面是一个通过maven-jar-plugin插件生成的MANIFEST.MF文件片段: Class-Path: lib/commons-logging-1.2.jar lib/commons-io...-2.4.jar Main-Class: com.xxg.Main 只是生成MANIFEST.MF文件还不够,maven-dependency-plugin插件用于将依赖包拷贝到<outputDirectory...和maven-assembly-plugin一样,生成的jar文件包含了所有依赖,所以可以直接运行。
会直接报错:无法找到主类或者找不到 xxx 依赖包/类,这是由于你没有定义 MANIFEST.MF 资源描述文件所致, 或者你直接把依赖的 jar 包打进了你最终的 jar,而这种嵌套的依赖...默认Maven生成的JAR包只包含了编译生成的.class文件和项目资源文件,而要得到一个可以直接在命令行通过 java命令运行的JAR文件,还要满足两个条件: JAR包中的/META-INF...比如下面的配置通过设置 assembly 文件的配置节点 dependencySets/includes,来实现 maven build 生成的 jar 包只包含指定的 jar 依赖。 ...mainClass:当用户使用 lib 命令执行 JAR 文件时,使用该元素定义将要执行的类名。.../305865 在Eclipse中创建Maven多模块工程的例子 http://www.blogways.net/blog/2013/05/13/maven-multi-modules-demo.html
这个问题笔者花了一点时间想通了这个问题,通过这篇文章提供一个简单的实现思路。...文件中的版本号都写到jar包的描述文件中,正确来说就是MANIFEST.MF文件中。...把第1步中打包到jar包中的MANIFEST.MF文件的内容读取并且加载到SpringBoot环境属性中的info.*属性中,以便可以通过/actuator/info访问。...了解此解压目录是我们编写MANIFEST.MF文件的解析实现过程的前提。...编写MANIFEST.MF文件的解析类: @SuppressWarnings("ConstantConditions") public enum ManiFestFileExtractUtils {
premain 方法 从字面上理解,就是运行在 main 函数之前的的类 当 Java 虚拟机启动时,在执行 main 函数之前,JVM 会先运行 -javaagent 所指定 jar 包内 Premain-Class...这个类的 premain 方法 使用 JavaAgent 创建一个 Premain-Class 指定的类,类中包含 premain 方法,方法逻辑由用户自己确定 定义一个 MANIFEST.MF 文件...如果代理是在 VM 启动之后某一时刻启动的,则忽略不表示 JAR 文件的路径(可选) Can-Redefine-Classes:true 表示能重定义此代理所需的类,默认值为 false(可选) Can-Retransform-Classes...快速入门 创建一个 Maven 工程: 添加依赖: UTF-8 8
因为这里引用了工程lib下面第三方的jar包,但是该jar包并不在classpath路径下面,所有就没有找到该类。 在MANIFEST.MF文件增加calsspath值即可。...这个jar包里面没有包含依赖的jedis的jar包,且manifest.mf文件中也没有指定入口类和Class-Path(该程序到哪里去加载它依赖的jedis.jar包)。...如果要成功运行这个jar包,我们要在manifest.mf设置Main-Class和Class-Path。...文件中也没有指定Main-Class和Class-Path。...当上面的storm工程需要依赖第三方的mysql包时,我们必须在pom文件中要求把依赖的jar包打进来,不然我们要在manifest.mf指明它要到哪里去加载依赖的mysql包,同时还要把mysql包上传到我们打的
Jar时默认从BOOT-INF/classes加载class,从BOOT-INF/lib加载所依赖的Jar包。...需要在pom文件配置忽略的依赖包。 关键需要配置MANIFEST.MF 文件中加入lib路径。 然后正常启动jar包就可以了。...–MANIFEST.MF 中 Class-Path 加入资源文件目录–>--> ....maven-jar-plugin true lib/ false com.XProApplication ${project.build.directory...--使用外部配置文件,jar包里没有资源文件--> true <outputDirectory
这种方法没有侵入性,只需要在启动命令中加上-javaagent参数就可以。Java6以后,甚至可以通过attach的方式,动态的给运行中的程序设置加载代理类。 有经验的同学肯定要提出异议了。...使用idea创建一个默认的maven工程即可。 创建一个普通java类,添加premain或者agentmain方法,它们的参数完全一样。 ?...MANIFEST.MF文件 那么我们编写的代码是如何让外界知晓呢?那就是MANIFEST.MF文件。...一般的,maven打包会覆盖这个文件,所以我们需要指定需要哪一个。... org.apache.maven.plugins maven-jar-plugin
"(没有设置Main-Class)、ClassNotFoundException(找不到依赖包)等错误。...maven-jar-plugin用于生成META-INF/MANIFEST.MF文件的部分内容,com.xxg.Main指定MANIFEST.MF中的Main-Class...例如下面是一个通过maven-jar-plugin插件生成的MANIFEST.MF文件片段: ?...只是生成MANIFEST.MF文件还不够,maven-dependency-plugin插件用于将依赖包拷贝到${project.build.directory}/lib...和maven-assembly-plugin一样,生成的jar文件包含了所有依赖,所以可以直接运行。
maven项目打包时,由maven生成`META-INF\MANIFEST.MF`文件且设置`Class-Path` 无法重新打包时,修改`META-INF\MANIFEST.MF`文件且设置`Class-Path...java 设置路径的方法 设置 bootclasspath 参考这里 设置 Extensions JAR files 参考这里 设置 classpath 参考这里 测试程序 创建maven项目PrintPath...-cp参数无效 使用-jar选项(形如:java -jar xxx.jar )来运行一个可执行的jar包时,-jar会覆-cp的值。...> maven项目打包时,由maven生成META-INF\MANIFEST.MF文件且设置Class-Path 修改POM.xml 无法重新打包时,修改META-INF\MANIFEST.MF文件且设置Class-Path 尝试手动编辑MANIFEST.MF: 手动编辑MANIFEST.MF。
jar 包通 常是由集成在 pom.xml 文件中的 maven 插件来生成的。 配置在 pom 文件 build 元素中的 plugins 内。...这就为什么当执行 maven clean package 时,spring-boot-maven-plugin 会在 target 目录下生成两个 jar 文件。...jar 包中 Manifest.MF 文件内的 MainClass 值。...用一句话总结上述过程:当符合条件时,对原有 jar 包文件进行备份,并生成新的可以通过 jar-jar 启动的文件。...; META-INF 目录中存放了 MANIFEST.MF、maven 信息和 spring factories 文件。
" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0...再次秀出我蹩脚的英文翻译: 使用-jar参数时,后面的参数是的jar文件名(本例中是springbootstarterdemo-0.0.1-SNAPSHOT.jar); 该jar文件中包含的是class...ClassLoader classLoader = createClassLoader(getClassPathArchivesIterator()); // jarmode是创建docker镜像时用到的参数...插件生成的jar文件中,有常见的class、jar,也有符合java规范的MANIFEST.MF文件,并且,还在MANIFEST.MF文件中额外生成了名为Start-Class的配置,这里面是我们编写的应用启动类...SpringbootstarterdemoApplication: 启动类是JarLauncher,它是如何与MANIFEST.MF文件关联的呢?
领取专属 10元无门槛券
手把手带您无忧上云