当前位置: 首页 > news >正文

设计类型的网站云主机是什么

设计类型的网站,云主机是什么,软件开发项目管理核心,老河口建设局网站Maven打包的类型#xff1f; 以下是几种常见的打包形式#xff1a; 1、jar (Java Archive) 用途#xff1a;用于包含 Java 类文件和其他资源#xff08;如属性文件、配置文件等#xff09;的库项目。特点#xff1a; 可以被其他项目作为依赖引用。适合创建独立的应用程…Maven打包的类型 以下是几种常见的打包形式 1、jar (Java Archive) 用途用于包含 Java 类文件和其他资源如属性文件、配置文件等的库项目。特点 可以被其他项目作为依赖引用。适合创建独立的应用程序或可重用的组件。 生成文件.jar文件。 2、war (Web Application Archive) 用途专为 Web 应用程序设计包含了 Servlets、JSP 页面、静态资源如 HTML、CSS、JavaScript、以及其他必要的配置文件。特点 部署在应用服务器上如 Apache Tomcat、JBoss 等。包含一个特殊的目录结构例如WEB-INF/classes和WEB-INF/lib。 生成文件.war文件。 3、pom (Project Object Model) 用途不是实际的二进制打包格式而是用来表示一个多模块项目的父 POM。特点 不会产生任何输出文件除非指定了具体的构建目标。定义了一组共享的配置信息给子模块使用。有助于管理大型、复杂的企业级项目。 生成文件无直接生成的文件但会生成元数据如.pom文件用于描述项目及其依赖关系。 4、 maven-plugin 用途在自定义插件时需要指定打包类型为 maven-plugin。最后生成的是 jar 包。 为了指定打包类型需要在项目的pom.xml文件中定义packaging元素。例如 project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd...packagingjar/packaging... /project附 1、与 packaging 标签相对的标签是 type表示引入依赖的类型例如 pom 类型、jar 类型默认为 jar 类型。 2、jar 和 war 的比较 3、Maven 打包文件的来源[14] 虽然 src/main 是放置源代码和资源的地方但实际打包的是经过编译和处理后存放在 target 目录下的文件。target 目录是构建工具用来存放所有中间产物和最终产物的地方在每次构建时可能会被清理或更新。 Maven打的jar包有各种依赖吗 Maven 构建的 JAR 文件是否包含依赖项取决于如何配置构建过程。Maven 提供了几种不同的方式来打包项目每种方式对依赖项的处理不同 1、普通 JAR 这是默认的打包方式当运行 mvn clean package 命令时Maven 会编译代码并将其打包成一个 JAR 文件但不会将项目的依赖项包含在这个 JAR 文件中。这意味着生成的 JAR 文件只包含您的项目代码和资源文件。 使用场景运行环境已经提供了所需依赖如 big-marketing 项目就使用 Docker 提供了 MySQL、Redis 等。 2、带有依赖的 JARFat/Uber JAR 有时候可能想要创建一个包含所有依赖项的 JAR 文件这样就可以直接运行而不需要额外的类路径设置。为了实现这一点可以使用 Maven 的插件例如 maven-shade-plugin 或 maven-assembly-plugin。 (1) 使用 maven-shade-plugin 创建 Fat JAR buildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-shade-plugin/artifactIdversion3.2.4/versionexecutionsexecutionphasepackage/phasegoalsgoalshade/goal/goals/execution/executions/plugin/plugins /build(2) 使用 maven-assembly-plugin 创建 Fat JAR buildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-assembly-plugin/artifactIdversion3.3.0/versionconfigurationdescriptorRefsdescriptorRefjar-with-dependencies/descriptorRef/descriptorRefsarchivemanifestmainClasscom.example.MainClass/mainClass/manifest/archive/configurationexecutionsexecutionidmake-assembly/idphasepackage/phasegoalsgoalsingle/goal/goals/execution/executions/plugin/plugins /build使用场景当需要一个独立的、可执行的 JAR 文件时。更确切地说是自定义的归档文件。 Maven打包的插件有几个 maven-jar-plugin:jar将普通项目或模块打成 jar 包maven-war-plugin:war将 JaveWeb 项目或模块打成 war 包maven-shade-plugin:shade在 jar 目标打包的基础上将 compile 和 runtime 的依赖打进 fat jarmaven-assembly-plugin:single个性化打包用户可以自定义打包的类型、打包的文件、打包的目录结构等。spring-boot-maven-plugin:repackage在 jar 目标打包的基础上将 compile、runtime 和 provided 的依赖打进 fat jar。 演示 1、maven-jar-plugin:jar 在父工程 maven-package-demo 中创建一个子模块 jar-project在 pom 文件中指定打包方式 packaging 为 jar默认为 jar所以可不指定执行打包命令 mvn org.apache.maven.plugins:maven-jar-plugin:jar -pl :jar-project 执行流程如下 xxxxxxdeMacBook-Air maven-package-demo % mvn org.apache.maven.plugins:maven-jar-plugin:jar -pl :jar-project [INFO] Scanning for projects... [INFO] [INFO] ---------------------- cn.myphoenix:jar-project ---------------------- [INFO] Building jar-project 1.0-SNAPSHOT [INFO] from pom.xml [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- jar:3.4.1:jar (default-cli) jar-project --- [WARNING] JAR will be empty - no content was marked for inclusion! [INFO] Building jar: /Users/xxx/Code_Workspace/IDEA_Workspace/maven_project/maven-package-demo/jar-project/target/jar-project-1.0-SNAPSHOT.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.313 s [INFO] Finished at: 2024-12-24T21:06:4308:00 [INFO] ------------------------------------------------------------------------2、maven-war-plugin:war 在父工程 maven-package-demo 中创建一个子模块 war-project在 pom 文件中指定打包方式 packaging 为 war执行打包命令 mvn org.apache.maven.plugins:maven-war-plugin:war -pl :war-project 执行流程如下 xxxxxxdeMacBook-Air maven-package-demo % mvn org.apache.maven.plugins:maven-war-plugin:war -pl :war-project [INFO] Scanning for projects... [INFO] [INFO] ---------------------- cn.myphoenix:war-project ---------------------- [INFO] Building war-project 1.0-SNAPSHOT [INFO] from pom.xml [INFO] --------------------------------[ war ]--------------------------------- [INFO] [INFO] --- war:3.4.0:war (default-cli) war-project --- [INFO] Packaging webapp [INFO] Assembling webapp [war-project] in [/Users/xxx/Code_Workspace/IDEA_Workspace/maven_project/maven-package-demo/war-project/target/war-project-1.0-SNAPSHOT] [INFO] Processing war project [INFO] Copying webapp resources [/Users/xxx/Code_Workspace/IDEA_Workspace/maven_project/maven-package-demo/war-project/src/main/webapp] [INFO] Building war: /Users/xxx/Code_Workspace/IDEA_Workspace/maven_project/maven-package-demo/war-project/target/war-project-1.0-SNAPSHOT.war [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.355 s [INFO] Finished at: 2024-12-24T21:14:4408:00 [INFO] ------------------------------------------------------------------------附另外我还将 war 的 packaging 声明删掉了发现依然能够成功将模块打成 war 包。 3、maven-shade-plugin:shade 在父工程 maven-package-demo 中创建一个子模块 shade-project在 pom 文件中引入 maven-shade-plugin 插件并将其 shade 目标绑定到 package阶段在 pom 文件中引入 5 种依赖范围的依赖执行打包命令 mvn package -pl :shade-project pom 文件中引入 maven-shade-plugin并将 shade 目标绑定到 package 阶段 buildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-shade-plugin/artifactIdversion3.6.0/version/plugin/plugins /buildpom 文件中引入的 5 种依赖范围的依赖观察最终打成的 fat jar 中包含哪种类型的依赖 dependencies!-- compile 的依赖--dependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.5.16/versionscopecompile/scope/dependency!-- test 的依赖--dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion3.8.1/versionscopetest/scope/dependency!-- provided 的依赖--dependencygroupIdjavax.servlet/groupIdartifactIdservlet-api/artifactIdversion3.0-alpha-1/versionscopeprovided/scope/dependency!-- runtime 的依赖--dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.33/versionscoperuntime/scope/dependency!-- system 的依赖--dependencygroupIdcn.myphoenix/groupIdartifactIdbig-marketing-wheel/artifactIdversion1.0-SNAPSHOT/versionscopesystem/scopesystemPath/Users/xxx/desktop/big-marketing-wheel-1.0-SNAPSHOT.jar/systemPath/dependency /dependencies命令的执行流程如下 xxxxxxdeMacBook-Air maven-package-demo % mvn package -pl shade-project [INFO] Scanning for projects... [INFO] [INFO] --------------------- cn.myphoenix:shade-project --------------------- [INFO] Building shade-project 1.0-SNAPSHOT [INFO] from pom.xml [INFO] --------------------------------[ jar ]--------------------------------- [WARNING] The artifact mysql:mysql-connector-java:jar:8.0.33 has been relocated to com.mysql:mysql-connector-j:jar:8.0.33: MySQL Connector/J artifacts moved to reverse-DNS compliant Maven 2 coordinates. [INFO] [INFO] --- resources:3.3.1:resources (default-resources) shade-project --- [INFO] Copying 0 resource from src/main/resources to target/classes [INFO] [INFO] --- compiler:3.13.0:compile (default-compile) shade-project --- [INFO] Recompiling the module because of changed source code. [INFO] Compiling 1 source file with javac [debug target 8] to target/classes [INFO] [INFO] --- resources:3.3.1:testResources (default-testResources) shade-project --- [INFO] skip non existing resourceDirectory /Users/xxx/Code_Workspace/IDEA_Workspace/maven_project/maven-package-demo/shade-project/src/test/resources [INFO] [INFO] --- compiler:3.13.0:testCompile (default-testCompile) shade-project --- [INFO] Recompiling the module because of changed dependency. [INFO] [INFO] --- surefire:3.2.5:test (default-test) shade-project --- [INFO] [INFO] --- jar:3.4.1:jar (default-jar) shade-project --- [INFO] Building jar: /Users/xxx/Code_Workspace/IDEA_Workspace/maven_project/maven-package-demo/shade-project/target/shade-project-1.0-SNAPSHOT.jar [INFO] [INFO] --- shade:3.6.0:shade (default) shade-project --- [INFO] Including org.mybatis:mybatis:jar:3.5.16 in the shaded jar. [INFO] Including com.mysql:mysql-connector-j:jar:8.0.33 in the shaded jar. [INFO] Including com.google.protobuf:protobuf-java:jar:3.21.9 in the shaded jar. [INFO] Dependency-reduced POM written at: /Users/xxx/Code_Workspace/IDEA_Workspace/maven_project/maven-package-demo/shade-project/dependency-reduced-pom.xml [WARNING] mybatis-3.5.16.jar, mysql-connector-j-8.0.33.jar, protobuf-java-3.21.9.jar, shade-project-1.0-SNAPSHOT.jar define 1 overlapping resource: [WARNING] - META-INF/MANIFEST.MF [WARNING] maven-shade-plugin has detected that some files are [WARNING] present in two or more JARs. When this happens, only one [WARNING] single version of the file is copied to the uber jar. [WARNING] Usually this is not harmful and you can skip these warnings, [WARNING] otherwise try to manually exclude artifacts based on [WARNING] mvn dependency:tree -Ddetailtrue and the above output. [WARNING] See https://maven.apache.org/plugins/maven-shade-plugin/ [INFO] Replacing original artifact with shaded artifact. [INFO] Replacing /Users/xxx/Code_Workspace/IDEA_Workspace/maven_project/maven-package-demo/shade-project/target/shade-project-1.0-SNAPSHOT.jar with /Users/xxx/Code_Workspace/IDEA_Workspace/maven_project/maven-package-demo/shade-project/target/shade-project-1.0-SNAPSHOT-shaded.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.254 s [INFO] Finished at: 2024-12-25T15:05:3008:00 [INFO] ------------------------------------------------------------------------打成了两个 jar 包 shade-project-1.0-SNAPSHOT.jarshade 目标打成的包含依赖的 fat jaroriginal-shade-project-1.0-SNAPSHOT.jar原本的 jar 目标打成的 jar 包 如标红处所示将 compile 范围的 MyBatis 依赖和 runtime 范围的 MySQL 依赖打到了 fat jar 中。 附 maven-shade-plugin 的 shade 目标通常需要在 Maven 的 package 阶段执行这意味着它依赖于之前阶段生成的主要构件通常是 JAR 文件。具体来说在 shade 操作之前Maven 必须已经构建并打包了项目的主类文件和资源文件到一个标准的 JAR 文件中。这是因为它的工作原理是基于这个主 JAR 文件将所有依赖项合并到其中。 一、为什么 shade 需要先执行 jar 主要构件的存在maven-shade-plugin 需要有一个基础的 JAR 文件来作为起点。这个 JAR 文件包含了编译后的项目代码和资源文件。如果 maven-jar-plugin 没有正确配置或没有被执行那么就不会生成这个必要的主 JAR 文件从而导致 shade 操作失败。生命周期顺序Maven 的生命周期是有序的每个阶段都有其特定的任务。package 阶段的任务就是创建可分发格式的包如 JAR、WAR 等而 maven-shade-plugin 的 shade 目标则是对这些包进行进一步处理。因此自然地shade 应该在 package 阶段及之后执行以确保它能够操作到已经生成好的主 JAR 文件。避免重复工作直接从命令行调用 shade 可能会导致一些不必要的重复工作或者跳过某些重要的构建步骤。通过将 shade 绑定到 package 阶段可以保证整个构建过程按照预期的顺序进行不会遗漏任何关键步骤。 二、如何执行 shade 目标 配置插件绑定在 pom.xml 中明确指定 maven-shade-plugin 的 shade 目标绑定到 package 阶段如下所示 buildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-shade-plugin/artifactIdversion3.2.4/version !-- 使用最新版本 --executionsexecutionphasepackage/phase !-- 绑定到 package 阶段 --goalsgoalshade/goal/goals/execution/executions/plugin/plugins /build运行完整的生命周期命令使用像 mvn clean package 这样的命令来触发完整的构建过程而不是直接尝试运行 shade 目标。这样可以确保所有必要的前期工作都已完成并且 shade 操作可以顺利进行。 三、shade 目标会将哪些 scope 的依赖打进 fat jar 默认情况下maven-shade-plugin 会将 compile 和 runtime 范围的依赖打包进 Fat JAR 中而不会包含 provided、test 和 system 范围的依赖。上面实验也验证了这一点。 4、maven-assembly-plugin 实验设计 1、创建子模块如下图所示 2、最终实现 利用 single 目标生成一个名为 assembly-project-demo.zip 的压缩包将构建过程中生成的 jar 包打包进 assembly-project-demo.zip 的根目录下将 /resources/mybatis 目录下的 MyBatis 的 xml 配置文件打包进压缩包的 config/mybatis 目录下将 /resources 目录下的 application.properties 打包进压缩包的 config 目录下将 /resources/images 目录下的所有图片打包进压缩包的 config/images 目录下 使用 assembly 插件的步骤 构思确定打包的类型、需要打包的文件、最终包的目录结构在 pom 文件中引入 maven-assembly-plugin 插件。建议将 single 目标绑定到某一阶段如 package当然也可以直接执行插件目标。编写配置文件 需要打包的文件如 jar 包、配置文件、资源文件等打包文件的放置目录就是把某个文件放到最终包的某个目录下 执行打包 实验步骤 在父工程 maven-package-demo 中创建一个子模块 assembly-project创建配置文件 src/main/assembly/assembly_config.xml在配置文件配置打包的依赖、文件、jar 包等在 pom 文件中引入 maven-assembly-plugin 插件并将其 single 目标绑定到 package阶段在 pom 文件中引入 4 种依赖范围的依赖执行打包命令 mvn package -pl :assembly-project 配置文件 assembly_config.xml 的内容如下 ?xml version1.0 encodingUTF-8? assembly!-- 最终打包文件的后缀格式为 assembly-project-demo --iddemo/id!-- 最终打包成一个用于发布的zip文件 --formatsformatzip/format/formats!-- 把项目中依赖的 jar 包打进 assembly-project-demo.zip 压缩包的 lib 目录下 --dependencySets!-- 打包 runtime 类型的依赖 --dependencySet!-- 不使用项目的 artifact --useProjectArtifactfalse/useProjectArtifact!-- 打包进 zip 文件下的 lib 目录中 --outputDirectorylib/outputDirectory!-- 第三方 jar 不要解压 --unpackfalse/unpack/dependencySet/dependencySets!-- 把项目中的文件打包进 assembly-project-demo.zip 压缩包 --fileSets!-- target 目录下的 jar 包打包进 assembly-project-demo.zip 压缩包的根目录下 --fileSetdirectorytarget/directoryoutputDirectory//outputDirectoryincludesinclude*.jar/include/includes/fileSet!-- /resources/mybatis 目录下的 MyBatis 的 xml 配置文件打包进 assembly-project-demo.zip 压缩包的 config/mybatis 目录中 --fileSet!-- 文件原始路径 --directory${project.basedir}/src/main/resources/mybatis/directory!-- 文件打包目标路径 --outputDirectory/config/mybatis/outputDirectoryincludes!-- 直接指定所有文件 --include*.*/include/includes/fileSet!-- /resources 目录下的 application.properties 打包进 assembly-project-demo.zip 压缩包的 config 目录中 --fileSetdirectory${project.basedir}/src/main/resources/directoryoutputDirectory/config/outputDirectoryincludesinclude*.properties/include/includes/fileSet!-- /resources/images 目录下的所有图片打包进 assembly-project-demo.zip 压缩包的 config/images 目录中 --fileSetdirectory${project.build.directory}/directoryoutputDirectory/config/images/outputDirectoryincludesinclude*.jeg/includeinclude*.jpeg/includeinclude*.png/include/includes/fileSet/fileSets /assemblypom 文件的主要配置如下 !-- 添加 4 种依赖范围的依赖 -- dependencies!-- compile 的依赖--dependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.5.16/versionscopecompile/scope/dependency!-- test 的依赖--dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion3.8.1/versionscopetest/scope/dependency!-- provided 的依赖--dependencygroupIdjavax.servlet/groupIdartifactIdservlet-api/artifactIdversion3.0-alpha-1/versionscopeprovided/scope/dependency!-- runtime 的依赖--dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.33/versionscoperuntime/scope/dependency /dependencies!-- 配置 assembly 插件-- buildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-assembly-plugin/artifactIdversion3.2.0/versionconfiguration!-- 配置打包后的文件前缀名 --finalNameassembly-project/finalNamedescriptors!-- 指定配置文件的路径 --descriptorsrc/main/assembly/assembly_config.xml/descriptor/descriptors/configuration!-- 配置 assembly 的 goal --executionsexecutionidmake-assembly/idphasepackage/phasegoalsgoalsingle/goal/goals/execution/executions/plugin/plugins /build开始实验 执行命令后控制台打印如下 xxxxxxdeMacBook-Air maven-package-demo % mvn package -pl assembly-project [INFO] Scanning for projects... [INFO] [INFO] ------------------- cn.myphoenix:assembly-project -------------------- [INFO] Building assembly-project 1.0-SNAPSHOT [INFO] from pom.xml [INFO] --------------------------------[ jar ]--------------------------------- [WARNING] The artifact mysql:mysql-connector-java:jar:8.0.33 has been relocated to com.mysql:mysql-connector-j:jar:8.0.33: MySQL Connector/J artifacts moved to reverse-DNS compliant Maven 2 coordinates. [INFO] [INFO] --- resources:3.3.1:resources (default-resources) assembly-project --- [INFO] Copying 8 resources from src/main/resources to target/classes [INFO] [INFO] --- compiler:3.13.0:compile (default-compile) assembly-project --- [INFO] Recompiling the module because of changed source code. [INFO] Compiling 2 source files with javac [debug target 8] to target/classes [INFO] [INFO] --- resources:3.3.1:testResources (default-testResources) assembly-project --- [INFO] skip non existing resourceDirectory /Users/xxx/Code_Workspace/IDEA_Workspace/maven_project/maven-package-demo/assembly-project/src/test/resources [INFO] [INFO] --- compiler:3.13.0:testCompile (default-testCompile) assembly-project --- [INFO] Recompiling the module because of changed dependency. [INFO] [INFO] --- surefire:3.2.5:test (default-test) assembly-project --- [INFO] [INFO] --- jar:3.4.1:jar (default-jar) assembly-project --- [INFO] Building jar: /Users/xxx/Code_Workspace/IDEA_Workspace/maven_project/maven-package-demo/assembly-project/target/assembly-project-1.0-SNAPSHOT.jar [INFO] [INFO] --- assembly:3.2.0:single (make-assembly) assembly-project --- [WARNING] Parameter finalName is read-only, must not be used in configuration [INFO] Reading assembly descriptor: src/main/assembly/assembly_config.xml [WARNING] The assembly descriptor contains a *nix-specific root-relative reference (starting with slash). This is not portable and might fail on Windows: / [WARNING] The assembly descriptor contains a *nix-specific root-relative reference (starting with slash). This is not portable and might fail on Windows: /config/mybatis [WARNING] The assembly descriptor contains a *nix-specific root-relative reference (starting with slash). This is not portable and might fail on Windows: /config [WARNING] The assembly descriptor contains a *nix-specific root-relative reference (starting with slash). This is not portable and might fail on Windows: /config/images [INFO] Building zip: /Users/xxx/Code_Workspace/IDEA_Workspace/maven_project/maven-package-demo/assembly-project/target/assembly-project-demo.zip [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.367 s [INFO] Finished at: 2024-12-25T17:01:2108:00 [INFO] ------------------------------------------------------------------------说明由绿色标注可以看到assembly 的 single 目标在执行时先读取了配置文件然后构建了 zip 文件。 解压打成的 assembly-project-demo.zip 压缩包如下所示可以看到和设计的目录结构一致 说明从 lib 目录可知assembly:single 默认会将依赖范围是 compile 和 runtime 的依赖打进最终的归档文件。 附 我搜索的资料说 maven-assembly-plugin 使用最多。比如大数据项目中往往有很多 shell 脚本、SQL 脚本、.properties 及 .xml 配置文件等采用 assembly 插件可以自定义打包类型、打包的文件、打包的目录结构。 assembly 插件的主要作用允许用户将项目输出项与其依赖项、模块、站点文档、脚本或其他文件等一起组装成一个可分发的归档文件。换句话说用户可以个性化、选择性、定制化的打包。最常用的标签dependencySet 用来打包依赖fileSet 用来打包文件。 参考 https://maven.apache.org/plugins/maven-assembly-plugin/?spm5176.28103460.0.0.2e935d27YS2Beyhttps://maven.apache.org/plugins/maven-assembly-plugin/assembly.htmlhttps://zhuanlan.zhihu.com/p/690199623https://juejin.cn/post/6844904095245942798?searchId20241225160224C56599BB59BAE97F66E5 5、spring-boot-maven-plugin 实验步骤 在父工程 maven-package-demo 中创建一个子模块 boot-maven-plugin-project在 pom 文件中引入 spring-boot-maven-plugin 插件在 pom 文件中引入 5 种依赖范围的依赖执行打包命令 mvn spring-boot:repackage -pl boot-maven-plugin-project pom 文件中配置如下 propertiesmain-classcom.myphoenix.MyApplication/main-class /propertiesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdversion2.7.5/versionconfigurationmainClass${main-class}/mainClass/configurationexecutionsexecutiongoalsgoalrepackage/goal/goals/execution/executions/plugin/plugins /build说明 标红repackage 目标的执行需要借助于 maven-jar-plugin:jar。在此必须指定 repackage然后执行命令 mvn package后会执行 repackage 目标。标绿spring-boot-maven-plugin:repackage 的初衷是打一个可以运行的 fat jar因此建议配置好主程序类。 执行流程如下所示 xxxxxxdeMacBook-Air maven-package-demo % mvn package -pl boot-maven-plugin-project [INFO] Scanning for projects... [INFO] [INFO] --------------- cn.myphoenix:boot-maven-plugin-project --------------- [INFO] Building boot-maven-plugin-project 1.0-SNAPSHOT [INFO] from pom.xml [INFO] --------------------------------[ jar ]--------------------------------- [WARNING] The artifact mysql:mysql-connector-java:jar:8.0.33 has been relocated to com.mysql:mysql-connector-j:jar:8.0.33: MySQL Connector/J artifacts moved to reverse-DNS compliant Maven 2 coordinates. [INFO] [INFO] --- resources:3.3.1:resources (default-resources) boot-maven-plugin-project --- [INFO] Copying 0 resource from src/main/resources to target/classes [INFO] [INFO] --- compiler:3.13.0:compile (default-compile) boot-maven-plugin-project --- [INFO] Recompiling the module because of changed source code. [INFO] Compiling 3 source files with javac [debug target 8] to target/classes [INFO] [INFO] --- resources:3.3.1:testResources (default-testResources) boot-maven-plugin-project --- [INFO] skip non existing resourceDirectory /Users/xxx/Code_Workspace/IDEA_Workspace/maven_project/maven-package-demo/boot-maven-plugin-project/src/test/resources [INFO] [INFO] --- compiler:3.13.0:testCompile (default-testCompile) boot-maven-plugin-project --- [INFO] Recompiling the module because of changed dependency. [INFO] [INFO] --- surefire:3.2.5:test (default-test) boot-maven-plugin-project --- [INFO] [INFO] --- jar:3.4.1:jar (default-jar) boot-maven-plugin-project --- [INFO] Building jar: /Users/xxx/Code_Workspace/IDEA_Workspace/maven_project/maven-package-demo/boot-maven-plugin-project/target/boot-maven-plugin-project-1.0-SNAPSHOT.jar [INFO] [INFO] --- spring-boot:2.7.5:repackage (default) boot-maven-plugin-project --- [INFO] Replacing main artifact with repackaged archive [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.928 s [INFO] Finished at: 2024-12-25T18:20:0908:00 [INFO] ------------------------------------------------------------------------如下图所示一共生成了两个包 boot-maven-plugin-project-1.0-SNAPSHOT.jarspring-boot-maven-plugin 打的 fat jar 包boot-maven-plugin-project-1.0-SNAPSHOT.jar.originalmaven-jar-plugin 打的普通 jar 包 打成的 fat jar 解压后结构如下图所示 说明将依赖范围是 compile、runtime 和 provided 的依赖打包了但 test 和 system 的依赖没有打包。 思考既然 Maven 提供了多个打包插件而且功能十分强大为啥 Spring 官方还会再提供一个 spring-boot-maven-plugin 插件 理解即使 Maven 官方提供了多个插件但是默认与生命周期绑定的只有 maven-jar-plugin它的 jar 目标绑定到了 package 阶段上只能打普通的 jar 包无法直接运行。Spring Boot 倡导的一个理念是约定大于配置其提供好了一些默认的配置。repackage 承袭了 Maven 的默认绑定并且增强了 jar 目标。 本地文件jar包如何在pom文件里配置 该题目的意思是jar 包在自己的机器上但是不在 Maven 的本地仓库中。所以不能直接在 pom 文件中引入这个 jar 包。 解决方案 方案一 使用 scope 标签声明此 jar 包为系统级依赖使用 systemPath 标签指定 jar 包在本地机器上的路径 方案二 使用mvn install:install-file命令将JAR包安装到本地Maven仓库。你需要提供JAR包的路径、组IDgroupId、构件IDartifactId和版本号version。例如 mvn install:install-file -Dfilepath-to-file -DgroupIdgroup-id -DartifactIdartifact-id -Dversionversion -Dpackagingjar附Maven 的设计理念是所有依赖都应当通过仓库来管理使用系统路径依赖项偏离了这一原则可能会导致构建行为不可预测。 演示一 创建一个项目编写两个类将项目打成 jar 包 得到 jar 包 big-marketing-wheel-1.0-SNAPSHOT.jar将此 jar 包放置到某个路径下例如桌面 /Users/xxx/desktop/big-marketing-wheel-1.0-SNAPSHOT.jar。 可以看到这个 jar 包并没有在本地仓库中那么我们应该如何在项目中引入此 jar 包呢 上面已经给出了解决方案。pom 文件配置如下 dependencygroupIdcn.myphoenix/groupIdartifactIdbig-marketing-wheel/artifactIdversion1.0-SNAPSHOT/versionscopesystem/scopesystemPath/Users/xxx/desktop/big-marketing-wheel-1.0-SNAPSHOT.jar/systemPath /dependency如下图所示成功引入了位于桌面的 jar 包 演示二 将桌面上的 jar 包安装到本地仓库然后直接在项目中导入本地仓库的 jar 包。 初始本地仓库中没有此 jar 包 执行如下命令将桌面上的 jar 包安装到本地仓库 mvn install:install-file -Dfile/Users/xxx/desktop/big-marketing-wheel-1.0-SNAPSHOT.jar -DgroupIdcn.myphoenix -DartifactIdbig-marketing-wheel -Dversion1.0-SNAPSHOT -Dpackagingjar执行流程如下 xxxxxxdeMacBook-Air sky-takeout % mvn install:install-file -Dfile/Users/xxx/desktop/big-marketing-wheel-1.0-SNAPSHOT.jar -DgroupIdcn.myphoenix -DartifactIdbig-marketing-wheel -Dversion1.0-SNAPSHOT -Dpackagingjar [INFO] Scanning for projects... [INFO] [INFO] ---------------------- cn.myphoenix:sky-takeout ---------------------- [INFO] Building sky-takeout 1.0-SNAPSHOT [INFO] from pom.xml [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- install:3.1.2:install-file (default-cli) sky-takeout --- [INFO] Installing /Users/xxx/desktop/big-marketing-wheel-1.0-SNAPSHOT.jar to /Users/xxx/softwares/developer/apache-maven-3.9.9/repository/cn/myphoenix/big-marketing-wheel/1.0-SNAPSHOT/big-marketing-wheel-1.0-SNAPSHOT.jar [INFO] Installing /var/folders/lw/_dqb_2nj2pzg16m_c06g9mf80000gn/T/big-marketing-wheel-1.0-SNAPSHOT3384356351638361494.pom to /Users/xxx/softwares/developer/apache-maven-3.9.9/repository/cn/myphoenix/big-marketing-wheel/1.0-SNAPSHOT/big-marketing-wheel-1.0-SNAPSHOT.pom [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.238 s [INFO] Finished at: 2024-12-24T20:36:0908:00 [INFO] ------------------------------------------------------------------------如下图所示成功将桌面上的 jar 包安装到本地仓库 本文代码仓库https://github.com/Acura-bit/maven-package-demo.git
http://www.hkea.cn/news/14497485/

相关文章:

  • 网站建设上机考试wordpress win2012 r2
  • 济宁网站建设第一品牌中国物流网站
  • next.js做纯静态网站商务网站开发课程体会
  • 惠州网站制作维护做pc端网站用什么框架
  • 西宁专业做网站公司淘客怎么做推广网站
  • 旅游网站建设的摘要wordpress单页
  • 上海网站建设公设计师论坛
  • 福州网站建设信息关于网络营销的网站
  • 合肥官方网站优化费用如何建立一个网站 供客户选图
  • 一般做网站用什么字体广西教育平台网站建设
  • WordPress小说网站源码定制高端网站建设公司
  • 企业邮箱大全号码大全网站优化seo怎么做
  • 网站站长承德企业网站建设
  • 做网站可以用微软雅黑字体么南阳网站开发公司
  • 网站的手机客户端怎样做花瓣网是仿国外那个网站做的
  • 51网站空间还有吗wordpress+下载站
  • 西安创意网站建设网站开发服务税率是多少
  • 沈阳工程建设信息网站搜狗浏览器网页版入口
  • 做网站用什么后缀好十大免费最亏的免费app
  • 包站长ppt网站烟台seo关键词排名
  • 鄞州区建设局网站建立网络平台需要什么
  • 网站建设中模板奥联网站建设
  • php做简单网站教程i深建官方网站
  • 唐山网站建设设计福田瑞沃前四后四车价格
  • 进一步网站建设广告彩页设计
  • 网站留言系统编写代码免费域名注册申请
  • 网站源代码怎么上传聊城wap网站制作
  • 石家庄行业网站wordpress与typecho
  • 精品资源共享课网站建设网站方案范文
  • 课程网站建设规划方案网站网站设计公司