十大电子游戏平台网站小红书seo排名帝搜软件
2026/1/17 14:32:38 网站建设 项目流程
十大电子游戏平台网站,小红书seo排名帝搜软件,天元建设集团有限公司建设租赁分公司,公司网站做优化少钱三种方式打 Java 可执行 JAR 包#xff0c;你用对了吗#xff1f;写完代码只是开始#xff0c;如何打包成一个“开箱即用”的 JAR 文件#xff0c;才是交付的关键一步。很多 Java 开发者都遇到过这样的问题#xff1a; 本地跑得好好的程序#xff0c;一打包就报错 ClassN…三种方式打 Java 可执行 JAR 包你用对了吗写完代码只是开始如何打包成一个“开箱即用”的 JAR 文件才是交付的关键一步。很多 Java 开发者都遇到过这样的问题本地跑得好好的程序一打包就报错ClassNotFoundException别慌这很可能不是你的代码问题而是——JAR 包没打好Maven 提供了多种打可执行 JAR 的方式。今天我们就来对比三种主流方案✅maven-jar-plugin轻量外置依赖✅maven-assembly-plugin全家桶打包✅maven-shade-plugin高级防冲突版每种方式配真实pom.xml 配置 执行命令 输出结构让你看完就能上手方式一maven-jar-plugin—— “轻量但依赖外置”它只打包你自己的代码不包含第三方依赖但会在MANIFEST.MF中指定依赖路径。 pom.xml 配置build plugins plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-jar-plugin/artifactId version3.2.0/version configuration archive manifest mainClassorg.example.App/mainClass addClasspathtrue/addClasspath classpathPrefixdependencies//classpathPrefix /manifest /archive /configuration /plugin plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-dependency-plugin/artifactId version3.1.1/version executions execution phasepackage/phase goals goalcopy-dependencies/goal /goals configuration outputDirectory${project.build.directory}/dependencies//outputDirectory includeScoperuntime/includeScope /configuration /execution /executions /plugin /plugins /build 打包后结构jar包解压后看长啥样├── META-INF │ ├── MANIFEST.MF │ └── maven │ └── org.example │ └── java-demo │ ├── pom.properties │ └── pom.xml └── org └── example └── App.classjar包中的MANIFEST.MF文件Manifest-Version: 1.0 Created-By: Maven Jar Plugin 3.2.0 Build-Jdk-Spec: 17 Class-Path: dependencies/fastjson2-2.0.60.jar -第三方依赖包在这里 Main-Class: org.example.App -启动类▶️ 执行命令java -jar java-demo-1.0-SNAPSHOT.jar✅ 优点JAR 小、依赖清晰 ❌ 缺点必须保证dependencies/目录在 JAR 同级否则运行失败方式二maven-assembly-plugin—— “全家桶打包”生成一个fat jar把你的代码 所有依赖的 class 全部塞进去。 pom.xml 配置build plugins plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-assembly-plugin/artifactId version3.1.0/version configuration finalNamejava-demo/finalName descriptorRefs descriptorRefjar-with-dependencies/descriptorRef /descriptorRefs archive manifest mainClassorg.example.App/mainClass /manifest /archive /configuration executions execution phasepackage/phase goals goalsingle/goal /goals /execution /executions /plugin /plugins /build 打包后结构target/ ├── java-demo-jar-with-dependencies.jar ← 可执行 fat jar └── java-demo-1.0-SNAPSHOT.jar ← 原始包不可执行可执行jar包的解压后长啥样jar包的MANIFEST.MF文件Manifest-Version: 1.0 Created-By: Apache Maven 3.9.8 Built-By: Administrator Build-Jdk: 17.0.11 Main-Class: org.example.App▶️ 执行命令java -jar java-demo-jar-with-dependencies.jar✅ 优点一个文件搞定部署简单 ❌ 缺点依赖类直接合并容易因同名类冲突导致运行时错误方式三maven-shade-plugin—— “高级防冲突版”不仅能打包所有依赖还支持类重定位relocation从根本上避免类冲突。类重定位其实就是动态的移动、修改jar包中的类名、包名。 pom.xml 配置基础版plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-shade-plugin/artifactId version3.2.1/version executions execution phasepackage/phase goals goalshade/goal /goals configuration !-- 此处按需编写更具体的配置 -- transformers transformer implementationorg.apache.maven.plugins.shade.resource.ManifestResourceTransformer mainClassorg.example.App/mainClass /transformer /transformers /configuration /execution /executions /plugin 如需解决冲突可加relocations重命名包路径此处略按需扩展。 打包后结构target/ ├── java-demo-1.0-SNAPSHOT.jar ← 可执行最终包把项目中的代码及所依赖的第三方jar的Class文件都打进去了 └── original-java-demo-1.0-SNAPSHOT.jar ← 原始包备份,不能直接执行只包含项目中自有的代码MENIFEST.MF文件中连Main-Class都没有。可执行jar包的解压后长啥样jar包的MANIFEST.MF文件Manifest-Version: 1.0 Created-By: Maven JAR Plugin 3.4.1 Build-Jdk-Spec: 17 Main-Class: org.example.App▶️ 执行命令java -jar java-demo-1.0-SNAPSHOT.jar✅ 优点支持类重定位、稳定性高、被 Spring Boot 等广泛采用 ❌ 缺点JAR 体积大配置略复杂动态重命名包示例如果最终的 jar 包被其他的项目所依赖的话 classpath 中可能存在重复的 class 文件直接地引用此 jar 包中的类可能会导致类加载冲突。为了解决这个问题我们可以使用 shade 提供的重定位功能把部分类移动到一个全新的包中。build plugins plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-shade-plugin/artifactId version3.2.1/version executions execution phasepackage/phase goals goalshade/goal /goals configuration transformers transformer implementationorg.apache.maven.plugins.shade.resource.ManifestResourceTransformer mainClassorg.example.App/mainClass /transformer /transformers relocations relocation !--在打包时将项目中的原始包com.alibaba.fastjson2重命名为com.asia.fastjson2-- patterncom.alibaba.fastjson2/pattern shadedPatterncom.asia.fastjson2/shadedPattern !--排除以下类路径保持不动-- excludes excludecom.alibaba.fastjson2.JSON/exclude excludecom.alibaba.fastjson2.filter.*/exclude /excludes /relocation /relocations /configuration /execution /executions /plugin /plugins /build涉及标签pattern原始包名shadedPattern重命名后的包名excludes原始包内不需要重定位的类类名支持通配符jar包解压后看什么样. ├── com │ ├── alibaba │ │ └── fastjson2 │ │ ├── filter │ │ └── JSON.class │ └── asia │ └── fastjson2 │ ├── annotation │ ├── codec │ ├── function │ ├── internal │ ├── 省略。。。 │ ├── TypeReference.class │ ├── util │ └── writer ├── META-INF │ ├── MANIFEST.MF │ ├── maven │ │ ├── com.alibaba.fastjson2 │ │ │ └── fastjson2 │ │ └── org.example │ │ └── java-demo │ ├── native-image │ │ └── com.alibaba.fastjson2 │ │ └── fastjson2 │ ├── proguard │ │ └── fastjson2.pro │ ├── scm │ │ └── com.alibaba.fastjson2 │ │ └── fastjson2 │ └── versions │ └── 9 │ └── module-info.class ├── org │ └── example │ └── App.class └── schema ├── 2020-12.json └── draft-04.json 一张表看懂怎么选插件是否含依赖是否可直接运行能否防冲突推荐场景maven-jar-plugin❌外置✅需依赖目录❌轻量部署、依赖独立管理maven-assembly-plugin✅✅❌快速打包、简单项目maven-shade-plugin✅✅✅支持重定位复杂项目、生产环境标签

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询