尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Maven 基础、Settings、JAR包说明

Maven 基础、Settings、JAR包说明 下载 安装官网https://maven.apache.org/download.cgiMaven安装配置 https://blog.csdn.net/m0_63684495/article/details/129046405 Maven各版本下载 https://archive.apache.org/dist/maven/maven-3/ Maven-3.8.1下载 https://archive.apache.org/dist/maven/maven-3/3.8.1/binaries/apache-maven-3.8.1-bin.zip Maven repository 插件版本查询 https://mvnrepository.com安装jar包# 安装到默认目录mvn install:install-file-DfileD:\download\lib\artemis-http-client-1.1.16.RELEASE.jar-DgroupIdcom.hikvision.ga-DartifactIdartemis-http-client-Dversion1.1.16.RELEASE-Dpackagingjar#安装到新目录 E:\apache-maven-3.9.9\conf\repositorymvn install:install-file-DfileD:\download\lib\artemis-http-client-1.1.16.RELEASE.jar-DgroupIdcom.hikvision.ga-DartifactIdartemis-http-client-Dversion1.1.16.RELEASE-Dpackagingjar-Dmaven.repo.localE:\apache-maven-3.9.9\conf\repositoryMaven 中央仓库查看新发布情况如 alibaba版本是否与之即使对应。https://repo1.maven.org/maven2/org/springframework/cloud/spring-cloud-dependencies https://repo1.maven.org/maven2/com/alibaba/cloud/spring-cloud-alibaba/Maven 最新版本https://dlcdn.apache.org/mavenMaven 插件相关下载 maven-compiler-plugin3.14.1https://maven.apache.org/plugins/maven-compiler-plugin/download.cgi springboot 打包插件spring-boot-maven-plugin打包机制及内部结构分析 https://blog.csdn.net/iss_jin/article/details/122463390Maven 打 Jar 包体积缩小100倍 https://mp.weixin.qq.com/s/qniPev0onMfmPzxigB5MaA 多个子module项目相互依赖提示程序包不存在 https://blog.csdn.net/qq_60390518/article/details/131432348Maven 属性说明dependenceManagementMaven的dependencyManagement是一种机制允许你在父POMProject Object Model中定义依赖的版本和配置而不实际引入这些依赖。子项目可以选择性地继承这些依赖并使用父POM中定义的版本和配置。通过这种方式你可以统一管理项目中所有模块的依赖版本避免版本冲突和不一致。https://blog.csdn.net/xycxycooo/article/details/141220290dependencyManagement dependencies dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-dependencies/artifactId version${spring.cloud.version}/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement scope定义了类包在项目的使用阶段。项目阶段包括 编译运行测试和发布。 runtime ??关于scopeimport/scope在springboot单体应用中, 使用parent标签来引入sprinboot依赖但是一个pom.xml只能有一个parent标签如果有多个parent标签需要引入则使用 import 可以引入多个parent依赖。Maven打包Maven构建分布式项目时子模块相互依赖打包技巧buildplugins!--资源文件拷贝插件--plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-resources-plugin/artifactIdconfigurationencodingUTF-8/encoding/configuration/plugin!--Java编译插件--plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdconfigurationsource1.8/sourcetarget1.8/targetencodingUTF-8/encoding/configuration/plugin!--maven打包插件--plugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdexecutionsexecutiongoalsgoalrepackage/goal/goals/execution/executions/plugin/plugins/buildproperties指明JDK版本在使用 spring-boot-maven-plugin 插件进行打包操作的时候强烈建议指明JDK版本不然可能在使用了一些Java8新特性的时候可能受到类似不识别Lambda请使用Resource8这样的错误。properties java.version1.8/java.version maven.compiler.source1.8/maven.compiler.source maven.compiler.target1.8/maven.compiler.target /propertiesresourcesmaven profile filteringtrue/filtering的作用!-- 定义包含这些资源文件能在jar包中获取这些文件 -- resources resource directorysrc/main/resources/directory includes include**/*.*/include /includes !--是否替换资源中的属性-- filteringfalse/filtering /resource /resourcesMaven安装maven本地部署后环境变量配置完成后检验maven的配置是否生效或正确1.在控制台输入 mvn help:system 系统下载更新包2.当控制台出现build success时说明配置生效或正确。这样本地仓库就配置成功了3.添加阿里云https镜像mirror idaliyunmaven/id mirrorOf*/mirrorOf name阿里云公共仓库/name urlhttps://maven.aliyun.com/repository/public/url /mirrorMaven 属性说明Profilesmvn package -P devhttps://blog.csdn.net/fox_bert/article/details/85641251https://segmentfault.com/a/1190000015251264maven profiles 配置profiles profile idprod/id properties envprod/env /properties activation activeByDefaulttrue/activeByDefault /activation /profile profile idtest/id properties envtest/env /properties /profile /profiles build resources resource directorysrc/main/resources/profile/${env}/directory /resource /resources /buildPropertiesMaven总共有6类属性内置属性、POM属性、自定义属性、Settings属性、java系统属性和环境变量属性relativePathrelativePath: 1)指定查找该父项目pom.xml的(相对)路径。默认顺序relativePath 本地仓库 远程仓库 2)没有relativePath标签等同…/pom.xml, 即默认从当前pom文件的上一级目录找 3)表示不从relativePath找, 直接从本地仓库找,找不到再从远程仓库找scopescope定义了类包在项目的使用阶段。项目阶段包括 编译运行测试和发布。Tomcat相关依赖的scope类型是provied的provide类型不会只会参与编译和测试并不会参与运行所以在工程启动运行是找不到相关依赖所以就会报错。为什么用 provided scope Lombok 只在编译期需要用于生成 getter/setter、构造方法等代码 运行时不需要这个依赖因为代码已经生成到.class 文件中 使用 provided 可以避免依赖传递减小最终包体积runtime ??maven- compiler-pluginMaven本质上是一个插件框架它的核心并不执行任何具体的构建任务所有这些任务都交给插件来完成例如编译源代码是由maven- compiler-plugin完成的。进一步说每个任务对应了一个插件目标goal每个插件会有一个或者多个目标例如maven- compiler-plugin的compile目标用来编译位于src/main/java/目录下的主源码testCompile目标用来编译位于src/test/java/目录下的测试源码。Maven 命令clean 清除编译compile 编译test 编译并测试install 打包并发送到本地仓库package 只是打成jar包并不会发送到本地仓库sourceDirectorypackagingwar/packaging !--项目产生的构件类型例如jar、war、pom。插件可以创建他们自己的构件类型所以前面列的不是全部构件类型 -- jar代表生成jar文件war代表打包的是war文件意思就是说是一个web程序 !--项目的名称, Maven产生的文档用 -- namemypro02 Maven Webapp/name !--项目主页的URL, Maven产生的文档用 -- urlhttp://maven.apache.org/url清除与编译clean清除编译compile编译test编译并测试install 打包并发送到本地仓库package 只是打成jar包并不会发送到本地仓库executions inheritedbuildpluginsplugingroupIdio.spring.javaformat/groupIdartifactIdspring-javaformat-maven-plugin/artifactIdversion${spring-javaformat.version}/versionexecutionsexecutionphasevalidate/phaseinheritedtrue/inheritedgoalsgoalvalidate/goal/goals/execution/executions/plugin/plugins/build在 Maven 的插件配置中inheritedtrue/inherited表示该插件的执行配置可以被项目的子模块继承这个配置具有以下作用核心功能当设置为 true 时父 POM 中定义的插件执行配置会自动应用到所有子模块中子模块不需要重复配置相同的插件执行逻辑简化了多模块项目的管理。该插件配置中这表示所有子模块在 validate 阶段都会自动执行spring-javaformat:validate目标确保整个项目的代码格式一致性。executionphasevalidate/phaseinheritedtrue/inheritedgoalsgoalvalidate/goal/goals/execution与聚合的区别继承Inheritance与聚合Aggregation是不同的概念。继承‌子模块重用父项目的配置包括依赖、插件等聚合‌将多个模块组合成一个构建单元简化多模块项目的构建过程通过使用inheritedtrue/inherited您可以实现多模块项目中插件配置的统一管理避免在每个子模块中重复定义相同的插件执行逻辑。SettingsMaven-settings配置https://blog.csdn.net/qq_36458574/article/details/139500411IDEA创建Maven工程部署Web项目运行到tomcat下targetPath是指将文件输出到的位置默认target/classes目录directory是指将指定的目录打包includes将directory这个目录中指定包含哪些文件进行打包exclude将directory这个目录中指定排除哪些文件打包不加入filtering结合filters指定过滤替换 ${project.build.directory}指构建目录即target目录 ${basedir}项目的根目录关于目录webcontent 目录 和 webapp 两个目录什么区别 http://bbs.csdn.net/topics/390686693因为你新建的时候选择了war在最后又自己填写了发布路径为webapp作为路径所以maven根据自己的模板mavne-archetype-webapp生产的工程 所以满足了maven web工程结构要求自然就不会有了如果你开始你没有选择mavne-archetype-webapp而是直接就建立了maven工程那么在转换成web工程时是web插件转化的所以会出现所谓的webContent其实这样不符合maven web工作结构那个可以复制到webapp中然后删除即可。关于artifact、war、jar、war explodedhttps://blog.csdn.net/weixin_45783996/article/details/107967737intellij中Project Structure中的artifacts到底是什么 官方定义是这样的 An artifact is an assembly of your project assets that you put together to test, deploy or distribute your software solution or its part. Examples are a collection of compiled Java classes or a Java application packaged in a Java archive, a Web application as a directory structure or a Web application archive, etc. 翻译过来就是项目资产的组装 反正我的理解就是打包方式像jar、war、war exploded的ar两个字母就是artifact的意思就是说编译后的Java类Java应用Web应用等资源要用来测试或者部署的时候该如何打包。某个module有了 Artifacts 就可以部署到应用服务器中了比如在部署步骤中选择的就是artifacts里面的artifact当然也可以选择external source。 jar和war又有什么区别呢 定义区别 jarJava ARchive通常用于聚合大量的Java类文件、相关的元数据和资源文本、图片等文件到一个文件以便分发Java平台应用软件或库 warWeb application ARchive一种JAR文件其中包含用来分发的JSP、Java Servlet、Java类、XML文件、标签库、静态网页HTML和相关文件以及构成Web应用程序的其他资源 exploded在这里你可以理解为展开不压缩的意思。也就是war、jar等产出物没压缩前的目录结构。建议在开发的时候使用这种模式便于修改了文件的效果立刻显现出来。 问题 项目为什么要使用jar或war进行打包发布使用场景区别是什么 问题 为什么javaweb部署到服务器上的url默认为project文件名_war_exploded 因为intellij默认帮我们设置的artifact是exploded类型的那么改artifact的name就是project文件名:war exploded那applicant context也就是部署的目录即项目根目录的路径就默认为project文件名_war_exploded当然这个可以自由改动。 问题 javaweb中的output path已经设置成了WEN-INF下面的classes文件夹那么out文件夹到底是用来干嘛的 用来生成artifactartifact目录下面默认是只有一个project文件名_war_exploded文件夹的里面的结构和内容都与web或者web-content文件夹一致。 但是也可以手动生成一个war包这个网上也有教程比如这里然后部署设置applicant context然后访问。或者复制到tomcat的webapps文件夹下面启动电脑上的tomcat服务器来访问。 链接https://blog.csdn.net/weixin_45783996/article/details/107967737错误问题spring-boot-maven-plugin SpringBoot打jar包IDEA中创建父子工程与maven打包Springboot聚合工程报错程序包不存在问题处理https://www.cnblogs.com/adingfirstlove/p/13791549.htmlmaven 编译错误找不到符号在maven打包的时候有时会出现找不到符号的情况具体原因是由于引用的BaseEntity是base模块下的实体类所以需要将base模块重新clean再install成功后再将我们的模块打包就成功了与tomcatidea开发web项目路径localhost:8080后去除 项目名_war_exploded 的方法https://blog.csdn.net/qq_43588377/article/details/120203952Could not open ServletContext resource [/WEB-INF/classes/spring/applicationContext.xml]https://blog.csdn.net/wlwlwlwl015/article/details/48134763由于在没用Maven之前我的spring配置文件 applicationContext.xml是放在WEB-INF根目录下的在项目运行时都是正常的 重构成Maven项目之后我的配置文件自然应该放在src下的resources文件夹下了那么在web.xml中我自然将init-param中contextConfigLocation的参数值由WEB-INF/applicationContext.xml修改为classpath:applicationContext.xml了那么启动tomcat之后依然报错而且我们从报错信息中可以看出容器依然是在WEB-INF下去找applicationContext.xml很明显这个文件的位置已经被我们改变了而且我们也修改了web.xml的配置为何还要从这里去加载呢原因是我们缺少另一个重要的配置。 遇到问题盲目搜索往往不能迅速得到有效的解决方案所以我们先从官方去寻找线索看一看spring的官方文档在The Web的章节中可以发现这样一段话 简单翻译一下上图标记的小段落如果不特意指定参数名为contextConfigLoction的context-parameter元素那么spring的ContextLoderListener监听器就会在/WEB-INF/下去寻找并加载该目录下的名为applicationContext.xml这个文件。So我们应该在web.xml中添加context-param标签并再次指定spring核心文件的位置 context-param param-namecontextConfigLocation/param-name param-valueclasspath:applicationContext.xml/param-value /context-parammaven编译时出现There are test failures解决方法这是因为测试代码时遇到错误它会停止编译。只需要在pom.xml的project里添加以下配置使得测试出错不影响项目的编译。 build plugins plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-surefire-plugin/artifactId configuration testFailureIgnoretrue/testFailureIgnore /configuration /plugin /plugins /build 链接https://blog.csdn.net/u011134399/article/details/79103093其他在eclipse jee中创建Maven project并且转换为Dynamic web projecthttp://www.zuidaima.com/blog/1618162161323008.htm打包证书DerInputStream.getLength(): lengthTag111, too bigplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-resources-plugin/artifactIdversion2.7/versionconfigurationencodingUTF-8/encoding!--过滤后缀为pem、pfx的证书文件--nonFilteredFileExtensionsnonFilteredFileExtensioncer/nonFilteredFileExtensionnonFilteredFileExtensionpem/nonFilteredFileExtensionnonFilteredFileExtensionpfx/nonFilteredFileExtensionnonFilteredFileExtensionp12/nonFilteredFileExtension/nonFilteredFileExtensions/configuration/plugin参考资料Maven依赖排除、禁止依赖传递、取消依赖的方法https://www.cnblogs.com/junzi2099/p/14118936.htmlMaven构建分布式项目时子模块相互依赖打包技巧https://www.cnblogs.com/DJOSIMON/p/14891506.htmlmaven打包方式多模块https://blog.csdn.net/sinat_28007043/article/details/119020056关于maven打包时没有将依赖包打进来的问题https://blog.csdn.net/vcj1009784814/article/details/122963905SpringBoot的repackage和Maven打包命令之间的区别https://www.jdon.com/55548无法加载本地jar包以及maven项目打包后本地jar包没有打进项目的问题https://blog.51cto.com/eguid/2976781!-- lt;!ndash;打包插件在Jar包中添加Class-Path和Main-Classndash;gt;-- !-- plugin-- !-- groupIdorg.apache.maven.plugins/groupId-- !-- artifactIdmaven-jar-plugin/artifactId-- !-- version3.0.2/version-- !-- configuration-- !-- archive-- !-- lt;!ndash;使用自己的Manifest文件运行正常ndash;gt;-- !-- lt;!ndash;manifestFilesrc/main/resources/META-INF/MANIFEST.MF/manifestFilendash;gt;-- !-- lt;!ndash;使用插件添加的Manifest文件运行正常一定要注意Manifest中jar包名称和lib文件夹下jar包名称版本号后缀等一定要一致否则找不到依赖jar此处有坑ndash;gt;-- !-- manifest-- !-- addClasspathtrue/addClasspath-- !-- lt;!ndash;指定依赖资源路径前缀ndash;gt;-- !-- classpathPrefixlib//classpathPrefix-- !-- mainClasscn.codepub.maven.test.Main/mainClass-- !-- /manifest-- !-- lt;!ndash;可以把依赖本地系统的Jar包加入Manifest文件中ndash;gt;-- !-- lt;!ndash;manifestEntries-- !-- Class-Pathlib/lucene-1.0.0-SNAPSHORT.jar/Class-Path-- !-- /manifestEntriesndash;gt;-- !-- /archive-- !-- /configuration-- !-- /plugin-- !-- plugin-- !-- groupIdorg.springframework.boot/groupId-- !-- artifactIdspring-boot-maven-plugin/artifactId-- !-- version${spring-boot.version}/version-- !-- executions-- !-- execution-- !-- phasenone/phase-- !-- goals-- !-- goalrepackage/goal-- !-- goalbuild-info/goal-- !-- /goals-- !-- /execution-- !-- /executions-- !-- configuration-- !-- classifierexec/classifier-- !-- /configuration-- !-- /plugin-- !-- plugin-- !-- groupIdorg.apache.maven.plugins/groupId-- !-- artifactIdmaven-dependency-plugin/artifactId-- !-- version3.3.0/version-- !-- executions-- !-- execution-- !-- idcopy-dependencies/id-- !-- phaseprepare-package/phase-- !-- goals-- !-- goalcopy-dependencies/goal-- !-- /goals-- !-- configuration-- !-- outputDirectory${project.build.directory}/lib/outputDirectory-- !-- overWriteReleasesfalse/overWriteReleases-- !-- overWriteSnapshotsfalse/overWriteSnapshots-- !-- overWriteIfNewertrue/overWriteIfNewer-- !-- excludeTransitivefalse/excludeTransitive-- !-- stripVersionfalse/stripVersion-- !-- /configuration-- !-- /execution-- !-- /executions-- !-- /plugin--Jar包 引用相关SpringBoot热部署配置SpringBoot热部署配置 https://blog.csdn.net/key915/article/details/118209823 build plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId configuration forktrue/fork addResourcestrue/addResources /configuration /plugin /plugins /build使用spring-boot-configuration-processor生成配置文件说明dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-configuration-processor/artifactId /dependency 原理 SpringBoot项目生成的jar包内包含有配置属性详细信息的元数据文件spring-configuration-metadata.json这些文件能够为在配置application.yml或者application.properties时提供属性说明、默认值和自动补全。 大多数元数据文件是在编译时通过处理使用ConfigurationProperties注解注释的类的所有属性自动生成的。与此同时也可以指定格式手动编写一部分元数据用于极端情况或者更高级的用法。a!-- Guavagoogle公司开发的一款Java类库扩展工具包 https://blog.csdn.net/mouday/article/details/128827421 -- dependency groupIdcom.google.guava/groupId artifactIdguava/artifactId version31.0-jre/version /dependency !-- 计算地球上两个经纬度坐标之间的距离-geodesy和geotools实现 -- dependency groupIdorg.gavaghan/groupId artifactIdgeodesy/artifactId version1.1.3/version /dependencyb一个用于在JSON序列化过程中忽略特定字段的Java库。这个库提供了JsonIgnore注解可以标记在类的字段上以便在序列化为JSON字符串时忽略该字段。 dependency groupIdcom.github.rkonovalov/groupId artifactIdjson-ignore/artifactId version1.0.8/version /dependency !--java使用xstream实现xml文件和对象之间的相互转换-- dependency groupIdcom.thoughtworks.xstream/groupId artifactIdxstream/artifactId version1.4.11.1/version /dependency
返回列表