做网站赚钱要多久,汉口网站制作设计,网站同时使用asp php,360ssp里的网站建设pom.xml中pom全称介绍 POM文件是XML格式的文件#xff0c;声明性地描述了要使用Maven构建的Java项目的构建结构。 维护大型Java项目的POM XML文件通常很麻烦。 XML是冗长的#xff0c;POM的结构也需要维护冗余信息。 多次对工件进行命名是多余的#xff0c;在groupId和artif… pom.xml中pom全称 介绍 POM文件是XML格式的文件声明性地描述了要使用Maven构建的Java项目的构建结构。 维护大型Java项目的POM XML文件通常很麻烦。 XML是冗长的POM的结构也需要维护冗余信息。 多次对工件进行命名是多余的在groupId和artifactId重复名称的某些部分。 如果是多模块项目则项目的版本应出现在许多文件中。 使用父pom中定义的属性可以减少某些重复但是您仍然必须在每个模块pom中定义父pom版本因为您通过工件坐标引用了POM而不仅仅是将其称为“ pom”。在父目录中”。 依赖项和插件的参数可以在pluginManagement和dependency管理的父POM中pluginManagement 但是尽管每个模块POM通常都是相同的但您仍然无法摆脱每个模块POM中的插件和依赖项列表。 您可能会与我争论因为这也是您的口味问题但是对我来说XML格式的POM文件太多余了很难阅读。 也许我不够细致但是很多时候我错过了POM文件中的一些错误并且很难修复它们。 有一些技术可以支持其他格式但是并未广泛使用。 一种摆脱XML的方法是Poyglot Maven 。 但是如果您在第一个示例Ruby格式的POM上查看Github页面您仍然可以看到很多重复的信息。 这是因为Polyglot Maven插入了Maven本身并且仅将XML格式替换为其他格式但是无助于POM结构本身的冗余。 在本文中我将描述一种比其他解决方案更好的方法POM文件在构建过程中仍然是XML因此不需要任何新的插件或更改构建过程而是使用这些pom.xml文件是使用Jamal宏语言从pom.xml.jam文件以及模块共享的一些其他宏文件生成的。 贾马尔 想法是使用基于文本的宏语言从某些源文件生成XML文件该源文件包含相同的信息一种简化格式。 这是某种编程。 宏描述是一个输出详细XML格式的程序。 当宏语言足够强大时源代码就可以具有足够的描述性而又不会太冗长。 我的选择是贾马尔。 老实说选择Jamal的原因之一是它是我大约20年前使用Perl开发的宏语言而半年前我在Java中重新实现了它。 语言本身非常简单。 文本和宏混合在一起输出是文本和宏的结果。 宏以{字符或配置的任何其他字符串开头并以相应的}字符或配置为结束字符串的字符串结尾。 宏可以嵌套并且可以很好地控制应评估嵌套宏的顺序。 有用户定义的内置宏。 define宏是内置宏之一用于定义用户定义的宏。 一个例子说得更好。 让我们看一下下面的test.txt.jam文件。 {define GAV(_groupId,_artifactId,_version) { #if |_groupId|groupId_groupId/groupId} { #if |_artifactId|artifactId_artifactId/artifactId} { #if |_version|version_version/version} } {GAV :com.javax0.geci:javageci-parent:1.1.2-SNAPSHOT} 用Jamal处理它我们将得到 groupIdcom.javax0.geci /groupId artifactIdjavageci-parent /artifactId version1.1.2-SNAPSHOT /version 尽管出于排版原因我还是手动删除了空行但是您有一个大致的了解。 GAV是使用内置宏define 。 它具有三个名为_groupId _artifactId和_version 。 使用宏时宏主体中的格式参数名称将替换为实际值并在文本中替换用户定义的宏。 define内置宏本身的文本是一个空字符串。 何时在内置宏前面使用以及何时使用#有特殊含义但是在本文中我无法深入探讨这一细节。 if宏还可以省略groupId artifactId或version 因此 {GAV :com.javax0.geci:javageci-parent:} 也可以并且会产生 groupIdcom.javax0.geci /groupId artifactIdjavageci-parent /artifactId 如果您觉得宏的定义中仍然有很多冗余之处那您是对的。 这是定义GAV的简单方法但是您可以走极端 { #define GAV(_groupId,_artifactId,_version) { for z in (groupId,artifactId,version) { #if |_z|z_z/z} } }{GAV :com.javax0.geci:javageci-parent:} 请注意这需要对宏观评估顺序有一个疯狂的了解但是作为示例它表明了这种力量。 关于Jamal的更多信息https://github.com/verhas/jamal 让我们回到原始主题Jamal如何用于维护POM文件。 烹饪pom果酱 可以有很多方法每种方法都可能很好。 在这里我描述了用于Java :: Geci项目的第一种方法。 我创建一个pom.jim文件 jim代表Jamal导入或包含的文件。 其中包含宏的定义例如GAV dependencies dependency和许多其他定义。 您可以从Java :: Geci源代码存储库下载该文件 https : pom.jim文件对于所有项目都可以相同其中没有任何特定的项目。 还有一个version.jim文件其中包含一个宏该宏在一个地方定义了项目版本我在项目中使用的Java版本以及项目的groupId。 当我将发行版号从-SNAPSHOT到下一个发行版或从发行版扩展到下一个-SNAPSHOT这是唯一需要更改它的地方并且该宏可用于引用顶级POM中的项目版本 而且在模块POM中引用父对象。 在每个目录中都应该有一个pom.xml文件的地方我创建了一个pom.xml.jam文件。 该文件导入pom.jim文件因此可以在其中使用定义的宏。 作为示例Java :: Geci javageci-engine模块pom.xml.jam文件如下 { import .. /pom .jim} {project |jar| {GAV ::javageci-engine:{VERSION}} {parent :javageci-parent} {name|javageci engine} {description|Javageci macro library execution engine} {include .. /plugins .jim} {dependencies # { for MODULE in (api,tools,core) {dependency :com.javax0.geci:javageci-MODULE:}} { for MODULE in (api,engine) {dependency :org.junit.jupiter:junit-jupiter-MODULE:}} } } 我认为这是相当可读的至少对我而言它比原始的pom.xml更可读 project xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlnshttp://maven.apache.org/POM/4.0.0xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionpackagingjar/packagingartifactIdjavageci-engine/artifactIdversion1.1.1-SNAPSHOT/versionparentgroupIdcom.javax0.geci/groupIdartifactIdjavageci-parent/artifactIdversion1.1.1-SNAPSHOT/version/parentnamejavageci engine/namedescriptionJavageci macro library execution engine/descriptionbuildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-surefire-plugin/artifactId/pluginplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-source-plugin/artifactId/pluginplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-javadoc-plugin/artifactId/plugin/plugins/builddependenciesdependencygroupIdcom.javax0.geci/groupIdartifactIdjavageci-api/artifactId/dependencydependencygroupIdcom.javax0.geci/groupIdartifactIdjavageci-tools/artifactId/dependencydependencygroupIdcom.javax0.geci/groupIdartifactIdjavageci-core/artifactId/dependencydependencygroupIdorg.junit.jupiter/groupIdartifactIdjunit-jupiter-api/artifactId/dependencydependencygroupIdorg.junit.jupiter/groupIdartifactIdjunit-jupiter-engine/artifactId/dependency/dependencies
/project 要启动Jamal我可以使用Jamal Maven插件。 为此最简单的方法是在根目录中包含genpom.xml POM文件其内容为 ?xml version1.0 encodingUTF-8?
project xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlnshttp://maven.apache.org/POM/4.0.0xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.javax0.jamal/groupIdartifactIdpom.xml_files/artifactIdversionout_of_pom.xml.jam_files/versionbuildpluginsplugingroupIdcom.javax0.jamal/groupIdartifactIdjamal-maven-plugin/artifactIdversion1.0.2/versionexecutionsexecutionidexecution/idphaseclean/phasegoalsgoaljamal/goal/goalsconfigurationtransformFrom\.jam$/transformFromtransformTo/transformTofilePattern.*pom\.xml\.jam$/filePatternexcludetarget|\.iml$|\.java$|\.xml$/excludesourceDirectory./sourceDirectorytargetDirectory./targetDirectorymacroOpen{/macroOpenmacroClose}/macroClose/configuration/execution/executions/plugin/plugins/build
/project 有了这个我可以使用命令行mvn -f genpom.xml clear启动Maven。 这不仅会创建所有POM文件而且会清除项目的先前编译结果这在更改POM文件时可能是个好主意。 当目录中还没有pom.xml时或者由于果酱煮熟的POM文件中可能存在某些错误而导致文件无效时也可以执行该命令。 不幸的是所有递归都必须在某处结束尽管将genpom.xml为果酱熟的POM文件是可行的但这是不可行的。 摘要 我所描述的是一种使用宏语言作为源而不是原始编辑pom.xml文件的方法。 优点是项目定义更短更简单。 缺点是需要额外的POM生成步骤这是手动操作而不是构建过程的一部分。 您还会失去直接使用Maven版本插件的可能性因为该插件会修改POM文件。 我本人在使用该插件时总是遇到问题但这可能是我的错误而不是该插件的错误。 另外您必须学习一些Jamal但是如果您碰巧喜欢它那么这也可能是一个优势。 简而言之如果您愿意可以尝试一下。 启动该工具很容易因为该工具Jamal已发布在中央存储库中其源代码和文档位于Github上因此您所需genpom.xml只是制作genpom.xml文件煮一些果酱并启动插件。 POM文件不是唯一可以与果酱一起使用的源文件。 我可以轻松想象在产品文档中使用Jamal宏。 您所需.md.jam就是创建一个documentationfile.md.jam文件作为源文件并修改主POM以在将.md.jam转换为生成的宏处理的降价文档的生成过程中运行Jamal。 您也可以像本文中一样设置一个单独的POM以防您严格执行转换。 如果您想为Java文件准备一个预处理器甚至可以拥有java.jam文件但是我求您不要这样做。 我不想因为给你贾马尔而在地狱里燃烧着永恒的火焰。 不是为了这个目的。 Jamal还有其他许多可能的用途。 它是一种功能强大的宏语言易于嵌入到应用程序中并且易于使用Java编写的宏进行扩展。 Java :: Geci还具有一个1.0版本的模块该模块支持Jamal来简化代码生成但仍然缺少一些内置宏这些宏计划使通过反射到达Java代码结构成为可能。 我也在考虑开发一些简单的宏来读取Java源文件并将其包含在文档中。 当我在其中取得一些结果时我会写。 如果您有任何想法可以使用该技术请随时与我联系。 翻译自: https://www.javacodegeeks.com/2019/03/get-rid-pom-xml-almost.htmlpom.xml中pom全称