-
1. 总体结构<!--声明语句--> <?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <!-- 本地仓库的路径。默认值为${user.home}/.m2/repository。 --> <localRepository>usr/local/maven</localRepository> <!--Maven是否需要和用户交互以获得输入。需要设置成true,否则false。默认true。--> <interactiveMode>true</interactiveMode> <!--Maven是否需要使用plugin-registry.xml文件来管理插件版本。如果需要让Maven使用文件${user.home}/.m2/plugin-registry.xml来管理插件版本,则设为true。默认为 false。--> <usePluginRegistry>false</usePluginRegistry> <!--表示Maven是否需要在离线模式下运行。需要则为true,默认为false。一般应用于网络不通或者出于其它安全考虑 --> <offline>false</offline> <!--当插件的组织Id(groupId)没有显式提供时,供搜寻插件组织Id(groupId)的列表。该元素包含一个pluginGroup元素列表,每个子元素包含了一个组织Id(groupId)。当我 们使用某个插件,并且没有在命令行为其提供组织Id(groupId)的时候,Maven就会使用该列表。默认情况下该列表包含了org.apache.maven.plugins和org.codehaus.mojo --> <pluginGroups> <!--plugin的组织Id(groupId) --> <pluginGroup>org.codehaus.mojo</pluginGroup> </pluginGroups> <!--配置不同的代理,多代理profiles 可以应对笔记本或移动设备的工作环境:通过简单的设置profile id就可以很容易的更换整个代理配置。 很少用到--> <proxies> <proxy> <!--唯一标识--> <id>myproxy</id> <!--true则激活此代理 --> <active>true</active> <!--代理的协议--> <protocol>http</protocol> <!--代理的主机名--> <host>proxy.somewhere.com</host> <!--代理的端口--> <port>8080</port> <!--代理的用户名,用户名和密码表示代理服务器认证的登录名和密码。 --> <username>proxyuser</username> <!--代理的密码--> <password>somepassword</password> <!--不该被代理的主机名列表。该列表的分隔符由代理服务器指定;例子中使用了竖线分隔符,使用逗号分隔也很常见。--> <nonProxyHosts>*.google.com|ibiblio.org</nonProxyHosts> </proxy> </proxies> <!--配置服务端的一些设置。一些设置如安全证书不应该和pom.xml一起分发。这种类型的信息应该存在于构建服务器上的settings.xml文件中。--> <servers> <server> <!--该id与distributionManagement中repository元素的id相匹配。--> <id>server001</id> <!--鉴权用户名。鉴权用户名和鉴权密码表示服务器认证所需要的登录名和密码。 --> <username>my_login</username> <!--鉴权密码 密码加密功能已被添加到2.1.0 +。详情请访问密码加密页面--> <password>my_password</password> <!--鉴权时使用的私钥位置。和前两个元素类似,私钥位置和私钥密码指定了一个私钥的路径(默认是${user.home}/.ssh/id_dsa)以及如果需要的话,一个密语。将来passphrase和password元素可能会被提取到外部,但目前它们必须在settings.xml文件以纯文本的形式声明。 --> <privateKey>${usr.home}/.ssh/id_dsa</privateKey> <!--鉴权时使用的私钥密码。--> <passphrase>some_passphrase</passphrase> <!--文件被创建时的权限。如果在部署的时候会创建一个仓库文件或者目录,这时候就可以使用权限(permission)。这两个元素合法的值是一个三位数字,其对应了unix文件系统的权限,如664,或者775。 --> <filePermissions>664</filePermissions> <!--目录被创建时的权限。 --> <directoryPermissions>775</directoryPermissions> </server> </servers> <!--为仓库列表配置的下载镜像列表。高级设置请参阅镜像设置页面 --> <mirrors> <mirror> <!--唯一标识符,区分不同的mirror元素 --> <id>planetmirror.com</id> <!--镜像名称 --> <name>PlanetMirror Australia</name> <!--该镜像的URL。构建系统会优先考虑使用该URL,而非使用默认的服务器URL,就是下载jar包的路径 --> <url>http://downloads.planetmirror.com/pub/maven2</url> <!--被镜像的服务器的id。例如,如果我们要设置了一个Maven中央仓库(http://repo.maven.apache.org/maven2/)的镜像,就需要将该元素设置成central。这必须和中央仓 库的id central完全一致。--> <mirrorOf>central</mirrorOf> </mirror> </mirrors> <!--根据环境参数来调整构建配置的列表。settings.xml中的profile元素是pom.xml中profile元素的裁剪版本。这里的profile元素只关心构建系统这个整体,而非单独的项目对象模型设置。如果一个settings中的profile被激活,它的值会覆盖任何其它定义在POM中或者profile.xml中的带有相同id的profile。 --> <profiles> <profile> <!--唯一标识--> <id>test</id> <!--自动触发profile的条件逻辑。Activation是profile的开启钥匙。如POM中的profile一样,profile的力量来自于它能够在某些特定的环境中自动使用某些特定的值;这些环境通过activation元素指定。activation元素并不是激活profile的唯一方式。settings.xml文件中的activeProfile元素可以。profile也可以通过在命令行,使用-P标记和逗号分隔的列表来显式的激活(如,-P test)。--> <activation> <!--默认是否激活该profile--> <activeByDefault>false</activeByDefault> <!--当匹配的jdk被检测到,profile被激活。例如,1.4激活JDK1.4,1.4.0_2,而!1.4激活所有版本不是以1.4开头的JDK。--> <jdk>1.5</jdk> <!--当存在匹配的操作系统属性,profile被激活。一般不使用--> <os> <!--激活profile的操作系统的名字 --> <name>Windows 7</name> <!--激活profile的操作系统所属家族(如 'windows') --> <family>Windows</family> <!--激活profile的操作系统体系结构 --> <arch>x64</arch> <!--激活profile的操作系统版本--> <version>5.1.2600</version> </os> <!--如果Maven检测到某一个xml节点等于下面name的值,并且该节点的值等于下面value的值。那么激活这个profile。如果值字段是空的,那么存在属性名称字段就会激活--> <![CDATA[比如根据下面的配置,当存在<mavenVersion>2.0.3</mavenVersion>节点时将激活此profile]]> <property> <!--激活profile的属性的名称--> <name>mavenVersion</name> <!--激活profile的属性的值 --> <value>2.0.3</value> </property> <!--提供一个文件名,通过检测该文件的存在与否来激活profile--> <file> <!--如果指定的文件存在,则激活profile。 --> <exists>${basedir}/file2.properties</exists> <!--如果指定的文件不存在,则激活profile。--> <missing>${basedir}/file1.properties</missing> </file> </activation> <!--对应profile的自定义属性列表。Maven属性和Ant中的属性一样,可以用来存放一些值。这些值可以在POM中的任何地方使用标记${X}来使用,这里X是指属性的名称。属性有五种不同的形式,并且都能在settings.xml文件中访问。 1. env.X: 在一个变量前加上"env."的前缀,会返回一个shell环境变量。例如,"env.PATH"指代了$path环境变量(在Windows上是%PATH%)。 2. project.x:指代了POM中对应的元素值。例如: <project><version>1.0</version></project>通过${project.version}获得version的值。 3. settings.x: 指代了settings.xml中对应元素的值。例如:<settings><offline>false</offline></settings>通过 ${settings.offline}获得offline的值。 4. Java System Properties: 所有可通过java.lang.System.getProperties()访问的属性都能在POM中使用该形式访问,例如 ${java.home}。 5. x: 在<properties/>元素中,或者外部文件中设置,以${someVar}的形式使用。 --> <!--当该profile被激活,则可以再POM中使用${user.install}。--> <properties> <user.install>${user.home}/our-project</user.install> </properties> <!--远程仓库列表,它是Maven用来填充构建系统本地仓库所使用的一组远程项目。 --> <repositories> <!--包含需要连接到远程仓库的信息 --> <repository> <!--远程仓库唯一标识--> <id>codehausSnapshots</id> <!--远程仓库名称 --> <name>Codehaus Snapshots</name> <!--如何处理远程仓库里发布版本的下载--> <releases> <!--true或者false表示该仓库是否开启下载--> <enabled>false</enabled> <!--该元素指定更新发生的频率。Maven会比较本地POM和远程POM的时间戳。这里的选项是:always(一直),daily(默认,每日),interval:X(这里X是以分钟为单位的时间间隔),never(从不)。 --> <updatePolicy>always</updatePolicy> <!--当Maven验证构件校验文件失败时该怎么做-ignore(忽略),fail(失败),或者warn(警告)。--> <checksumPolicy>warn</checksumPolicy> </releases> <!--如何处理远程仓库里快照版本的下载。有了releases和snapshots这两组配置,POM就可以在每个单独的仓库中,为每种类型的构件采取不同的策略。例如,可能有人会决定只为开发目的开启对快照版本下载的支持。--> <snapshots> <enabled/><updatePolicy/><checksumPolicy/> </snapshots> <!--远程仓库URL,按protocol://hostname/path形式 --> <url>http://snapshots.maven.codehaus.org/maven2</url> <!--用于定位和排序构件的仓库布局类型-可以是default(默认)或者legacy(遗留)。Maven2为其仓库提供了一个默认的布局;Maven1.x有一种遗留布局。我们可以使用该元素指定布局是default还是legacy--> <layout>default</layout> </repository> </repositories> <!--发现插件的远程仓库列表。仓库是两种主要构件的家。第一种构件被用作其它构件的依赖。这是中央仓库中存储的大部分构件类型。另外一种构件类型是插件。Maven插件是一种特殊类型的构件。由于这个原因,插件仓库独立于其它仓库。pluginRepositories元素的结构和repositories元素的结构类似。每个pluginRepository元素指定一个Maven可以用来寻找新插件的远程地址。--> <pluginRepositories> <!--参见profiles/profile/repositories/repository元素的说明--> <pluginRepository> <releases> <enabled/><updatePolicy/><checksumPolicy/> </releases> <snapshots> <enabled/><updatePolicy/><checksumPolicy/> </snapshots> <id/><name/><url/><layout/> </pluginRepository> </pluginRepositories> </profile> </profiles> <!--手动激活profiles的列表,按照activeProfile的定义顺序激活并应用profiles。如果没有匹配的profile,则什么都不会发生,Maven则会像往常一样运行--> <activeProfiles> <activeProfile>env-test</activeProfile> </activeProfiles> </settings>2. 具体结构2.1 proxies代理<!--配置不同的代理,多代理profiles 可以应对笔记本或移动设备的工作环境:通过简单的设置profile id就可以很容易的更换整个代理配置。 很少用到--> <proxies> <proxy> <!--唯一标识--> <id>myproxy</id> <!--true则激活此代理 --> <active>true</active> <!--代理的协议--> <protocol>http</protocol> <!--代理的主机名--> <host>proxy.somewhere.com</host> <!--代理的端口--> <port>8080</port> <!--代理的用户名,用户名和密码表示代理服务器认证的登录名和密码。 --> <username>proxyuser</username> <!--代理的密码--> <password>somepassword</password> <!--不该被代理的主机名列表。该列表的分隔符由代理服务器指定;例子中使用了竖线分隔符,使用逗号分隔也很常见。--> <nonProxyHosts>*.google.com|ibiblio.org</nonProxyHosts> </proxy> </proxies>2.2 servers服务端的配置<!--配置服务端的一些设置。一些设置如安全证书不应该和pom.xml一起分发。这种类型的信息应该存在于构建服务器上的settings.xml文件中。--> <servers> <server> <!--该id与distributionManagement中repository元素的id相匹配。--> <id>server001</id> <!--鉴权用户名。鉴权用户名和鉴权密码表示服务器认证所需要的登录名和密码。 --> <username>my_login</username> <!--鉴权密码 密码加密功能已被添加到2.1.0 +。详情请访问密码加密页面--> <password>my_password</password> <!--鉴权时使用的私钥位置。和前两个元素类似,私钥位置和私钥密码指定了一个私钥的路径(默认是${user.home}/.ssh/id_dsa)以及如果需要的话,一个密语。将来passphrase和password元素可能会被提取到外部,但目前它们必须在settings.xml文件以纯文本的形式声明。 --> <privateKey>${usr.home}/.ssh/id_dsa</privateKey> <!--鉴权时使用的私钥密码。--> <passphrase>some_passphrase</passphrase> <!--文件被创建时的权限。如果在部署的时候会创建一个仓库文件或者目录,这时候就可以使用权限(permission)。这两个元素合法的值是一个三位数字,其对应了unix文件系统的权限,如664,或者775。 --> <filePermissions>664</filePermissions> <!--目录被创建时的权限。 --> <directoryPermissions>775</directoryPermissions> </server> </servers>2.3 mirrors镜像库<!--为仓库列表配置的下载镜像列表。高级设置请参阅镜像设置页面 --> <mirrors> <mirror> <!--唯一标识符,区分不同的mirror元素 --> <id>planetmirror.com</id> <!--镜像名称 --> <name>PlanetMirror Australia</name> <!--该镜像的URL。构建系统会优先考虑使用该URL,而非使用默认的服务器URL,就是下载jar包的路径 --> <url>http://downloads.planetmirror.com/pub/maven2</url> <!--被镜像的服务器的id。例如,如果我们要设置了一个Maven中央仓库(http://repo.maven.apache.org/maven2/)的镜像,就需要将该元素设置成central。这必须和中央仓 库的id central完全一致。--> <mirrorOf>central</mirrorOf> </mirror> </mirrors>2.4 profile 构建配置<!--根据环境参数来调整构建配置的列表。settings.xml中的profile元素是pom.xml中profile元素的裁剪版本。这里的profile元素只关心构建系统这个整体,而非单独的项目对象模型设置。如果一个settings中的profile被激活,它的值会覆盖任何其它定义在POM中或者profile.xml中的带有相同id的profile。 --> <profiles> <profile> <!--唯一标识--> <id>test</id> <!--自动触发profile的条件逻辑。Activation是profile的开启钥匙。如POM中的profile一样,profile的力量来自于它能够在某些特定的环境中自动使用某些特定的值;这些环境通过activation元素指定。activation元素并不是激活profile的唯一方式。settings.xml文件中的activeProfile元素可以。profile也可以通过在命令行,使用-P标记和逗号分隔的列表来显式的激活(如,-P test)。--> <activation> <!--默认是否激活该profile--> <activeByDefault>false</activeByDefault> <!--当匹配的jdk被检测到,profile被激活。例如,1.4激活JDK1.4,1.4.0_2,而!1.4激活所有版本不是以1.4开头的JDK。--> <jdk>1.5</jdk> <!--当存在匹配的操作系统属性,profile被激活。一般不使用--> <os> <!--激活profile的操作系统的名字 --> <name>Windows 7</name> <!--激活profile的操作系统所属家族(如 'windows') --> <family>Windows</family> <!--激活profile的操作系统体系结构 --> <arch>x64</arch> <!--激活profile的操作系统版本--> <version>5.1.2600</version> </os> <!--如果Maven检测到某一个xml节点等于下面name的值,并且该节点的值等于下面value的值。那么激活这个profile。如果值字段是空的,那么存在属性名称字段就会激活--> <![CDATA[比如根据下面的配置,当存在<mavenVersion>2.0.3</mavenVersion>节点时将激活此profile]]> <property> <!--激活profile的属性的名称--> <name>mavenVersion</name> <!--激活profile的属性的值 --> <value>2.0.3</value> </property> <!--提供一个文件名,通过检测该文件的存在与否来激活profile--> <file> <!--如果指定的文件存在,则激活profile。 --> <exists>${basedir}/file2.properties</exists> <!--如果指定的文件不存在,则激活profile。--> <missing>${basedir}/file1.properties</missing> </file> </activation> <!--对应profile的自定义属性列表。Maven属性和Ant中的属性一样,可以用来存放一些值。这些值可以在POM中的任何地方使用标记${X}来使用,这里X是指属性的名称。属性有五种不同的形式,并且都能在settings.xml文件中访问。 1. env.X: 在一个变量前加上"env."的前缀,会返回一个shell环境变量。例如,"env.PATH"指代了$path环境变量(在Windows上是%PATH%)。 2. project.x:指代了POM中对应的元素值。例如: <project><version>1.0</version></project>通过${project.version}获得version的值。 3. settings.x: 指代了settings.xml中对应元素的值。例如:<settings><offline>false</offline></settings>通过 ${settings.offline}获得offline的值。 4. Java System Properties: 所有可通过java.lang.System.getProperties()访问的属性都能在POM中使用该形式访问,例如 ${java.home}。 5. x: 在<properties/>元素中,或者外部文件中设置,以${someVar}的形式使用。 --> <!--当该profile被激活,则可以再POM中使用${user.install}。--> <properties> <user.install>${user.home}/our-project</user.install> </properties> <!--远程仓库列表,它是Maven用来填充构建系统本地仓库所使用的一组远程项目。 --> <repositories> <!--包含需要连接到远程仓库的信息 --> <repository> <!--远程仓库唯一标识--> <id>codehausSnapshots</id> <!--远程仓库名称 --> <name>Codehaus Snapshots</name> <!--如何处理远程仓库里发布版本的下载--> <releases> <!--true或者false表示该仓库是否开启下载--> <enabled>false</enabled> <!--该元素指定更新发生的频率。Maven会比较本地POM和远程POM的时间戳。这里的选项是:always(一直),daily(默认,每日),interval:X(这里X是以分钟为单位的时间间隔),never(从不)。 --> <updatePolicy>always</updatePolicy> <!--当Maven验证构件校验文件失败时该怎么做-ignore(忽略),fail(失败),或者warn(警告)。--> <checksumPolicy>warn</checksumPolicy> </releases> <!--如何处理远程仓库里快照版本的下载。有了releases和snapshots这两组配置,POM就可以在每个单独的仓库中,为每种类型的构件采取不同的策略。例如,可能有人会决定只为开发目的开启对快照版本下载的支持。--> <snapshots> <enabled/><updatePolicy/><checksumPolicy/> </snapshots> <!--远程仓库URL,按protocol://hostname/path形式 --> <url>http://snapshots.maven.codehaus.org/maven2</url> <!--用于定位和排序构件的仓库布局类型-可以是default(默认)或者legacy(遗留)。Maven2为其仓库提供了一个默认的布局;Maven1.x有一种遗留布局。我们可以使用该元素指定布局是default还是legacy--> <layout>default</layout> </repository> </repositories> <!--发现插件的远程仓库列表。仓库是两种主要构件的家。第一种构件被用作其它构件的依赖。这是中央仓库中存储的大部分构件类型。另外一种构件类型是插件。Maven插件是一种特殊类型的构件。由于这个原因,插件仓库独立于其它仓库。pluginRepositories元素的结构和repositories元素的结构类似。每个pluginRepository元素指定一个Maven可以用来寻找新插件的远程地址。--> <pluginRepositories> <!--参见profiles/profile/repositories/repository元素的说明--> <pluginRepository> <releases> <enabled/><updatePolicy/><checksumPolicy/> </releases> <snapshots> <enabled/><updatePolicy/><checksumPolicy/> </snapshots> <id/><name/><url/><layout/> </pluginRepository> </pluginRepositories> </profile> </profiles>2.5 activeProfiles指定激活的配置<!--手动激活profiles的列表,按照activeProfile的定义顺序激活并应用profiles。如果没有匹配的profile,则什么都不会发生,Maven则会像往常一样运行--> <activeProfiles> <activeProfile>env-test</activeProfile> </activeProfiles>
-
比如这个地址: https://repo.huaweicloud.com/repository/maven/org/grails/profiles/web-plugin/ 最高只有 3.2.0M2版本,而高版本的jar包存在于grails-core仓库中: https://repo.grails.org/core/org/grails/profiles/web-plugin/ 可以看到包含了4.0以上的版本,虽然帮助文档中写了镜像源中有grails-core,但实际并未镜像成功,能否帮忙排查一下呢?谢谢了
-
[问题求助-二次开发]已配置Maven怎么样加载包运行HdfsExample.java类【功能模块】二次开发【操作步骤&问题现象】1.已安装java2.已安装mven3.已从github下载相应的样例代码 https://github.com/huaweicloud/huaweicloud-mrs-example/tree/mrs-3.1.15.maven目录conf文件4.idea已经配置mevn路径6.加载包5.已经加载完之后运行HdfsExample.java【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
【功能模块】【操作步骤&问题现象】流水线打包失败
-
JAR文件制作方式1、JAVA开发的应用在发布前通常会打包一个JAR文件,JAR( Java ARchive )是将一系列文件(包含库、依赖文件等)合并到单个压缩文件里2、手动制作:早期使用jar命令制作JAR文件,所有的编译、测试、代码生成、打包等工作需要手动重复执行,效率较低,出错的机率较高3、自动生成:借助Maven等工具,自动进行软件包生命周期的管理,从而提高工作效率,降低出错的机率注:程序开发的过程当中,构建工程,编写代码,测试代码,打包,部署,上线等每天都是重复工作。在传统过当中需要手工的去操作,那么效率是低效的。自动化构建工具Maven一键全自动完成构建工程,编写代码,测试代码,打包,部署,上线等工作,那么效率是高效的。Maven介绍Maven是Apache下的一个纯Java开发的开源项目,基于项目对象模型(缩写:POM),可以对Java项目进行构建,依赖管理。Maven官网链接: http://Maven.apache.org/Maven下载链接: http://Maven.apache.org/download.cgiMaven安装指导: http://Maven.apache.org/install.html1、当下Java开发工具圈中,目前最主流的有以下三个开发工具,Lvy依赖Maven 依赖gradle依赖,依赖管理已经成为了项目构建自动化工具中的一个主要部分2、构建在编程中是指什么?编程过程当中很多事情是与编程无关的项目管理工作,如下载依赖,编译源码,单元测试,项目部署等。一般的,小型项目我们可以手动实现这些操作,然而大型项目去实现则相对复杂。构建工具是帮助我们实现一系列项目管理、测试和部署操作的工具3、对于Java项目的构建工具;传统构建工具有Ant,主流构建工具:Maven,新兴构建工具:Gradle4、Maven构建项目的生命周期有哪些?validate:验证项目以及相关信息是否正确 compile:编译源代码和相关资源文件test:对测试代码进行测试package:根据不同的项目类型进行打包:verigy:验证打包的正确性install:将打包好的包安装到本地deploy:将打包好的包发布到远程POM文件简介Pom ( project object model )是Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖等。以下为pom文件的部分内容:version:项目的版本号,如果项目仍然处在开发阶段,通常在版本中带有-SNAPSHOTmodelverion:模型版本,目前是4.0.0groupld:组织id,一般是一个公司域名的倒写 artifactld:项目名称,自定义生成注:groupld、artifactld和version组成了坐标,是一个项目的唯一标识,坐标除了标识项目外,另外也可以对应用使用的依赖进行标识Maven仓库简介修改本地仓库位置需要修改Maven安装目录下conf/settings.xml文件的local_repository参数指定远程仓库需要修改settings.xml文件中的servers参数鲲鹏Maven仓库鲲鹏Maven仓库提供了适配鲲鹏平台的so库,开发者可以直接调用,无需进行重新编译鲲鹏Maven仓库链接:https://repo.huaweicloud.com/kunpeng/maven/配置优先搜索鲲鹏Maven仓库在鲲鹏应用开发时,建议将远程仓库配置为优先搜索鲲鹏Maven仓库修改settings.xml文件在profiles便签下增加鲲鹏Maven仓库的信息,包括id、url将鲲鹏Maven仓库的信息放在第一位,使其可以被优先使用<profile> <id>kunpeng</id> <!-- 远程仓库列表,将华为鲲鹏 Maven 仓库放在最前面 --> <repositories> <repository> <id>kunpengmaven</id> <name>kunpeng maven</name> <url>https://repo.huaweicloud.com/kunpeng/maven/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> <!-- 其他 repository,配置其他Maven中央仓库,以华为云Maven为例 --> <repository> <id>huaweicloud</id> <name>huaweicloud maven</name> <url>https://repo.huaweicloud.com/repository/maven/</url> <releases> <enabled>true</enabled> </releases> </repository> </repositories> </profile> <!-- 激活上面的profile --> <activeProfiles> <activeProfile>kunpeng</activeProfile> </activeProfiles>Maven生命周期Maven为了对所有的构建过程抽象和统一,形成了一套高度完善的和易于扩展的生命周期Maven拥有3套生命周期1、clean:清理pre-clean 执行一些需要在clean之前完成的工作clean移除所有上一次构建生成的文件post-clean执行一些需要在clean之后立刻完成的工作2、default:编译、测试、打包、发布等default生命周期是真正构建时所需要执行的所有步骤3、site:站点生成site生命周期目的是见建立和发布项目站点Maven应用打包流程 开发后的应用可以使用Maven,通过POM文件的方式进行打包,并且,打包后的程序可以安装到本地仓库中,供其它程序调用注:JAR ( Java ARchive)是将一系列文件合并到单个压缩文件里,就象Zip那样。然而,同Java中其他任何东西一样,JAR文件是跨平台的,所以不必关心涉及具体平台的问题。
-
按照“鲲鹏BoostKit虚拟化使能套件部署指南 v08.pdf”手册部署ovirt环境,执行到7.4.4 编译ovirt-engine,在编译ovirt-engine 源码时,执行./automation/build-artifacts.sh命令,提示Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/collect/ImmutableList,一直卡在这里无法继续执行。我的maven版本是Apache Maven 3.6.2 (Red Hat 3.6.2-5),通过降级到3.5.4不会有这个报错,但是,在执行./automation/build-artifacts.sh命令时,有一个步骤是yum builddep output/ovirt-engine-4.4.0.2-1.gite95709f.el8.src.rpm,每次在跑到这个步骤后,都会要求我更新maven,更新后就会出现Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/collect/ImmutableList错误。求大神指点一二。问题已解决。解决方法:通过修改automation/build-artifacts.sh文件,将yum builddep output/ovirt-engine-4.4.0.2-1.gite95709f.el8.src.rpm注释后解决。编译完成后截图如下
-
linux 下创建一个maven工程第一步:安装jdk步骤1 下载OpenJDK安装包。wget https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u191-b12/OpenJDK8U-jdk_aarch64_linux_hotspot_8u191b12.tar.gz步骤2 解压安装包。tar -zxf OpenJDK8U-jdk_aarch64_linux_hotspot_8u191b12.tar.gz步骤3 将OpenJDK安装到指定目录,例如安装到“/opt/tools/installed”。mv jdk8u191-b12 /opt/tools/installed/步骤4 配置java环境变量。1. 打开“/etc/profile”文件。vi /etc/profile2. 在“/etc/profile”文件末尾处增加如下代码。JAVA_HOME=/opt/tools/installed/jdk8u191-b12PATH=$JAVA_HOME/bin:$PATHexport JAVA_HOME PATH3. 修改完成后,按“Esc”键,输入:wq!命令保存退出。4. 使修改的环境变量生效。source /etc/profile步骤5:验证输入java -version第二步:安装maven软件和配置maven路径maven安装:步骤1 下载Maven安装包。wget https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz步骤2 解压安装包。tar -zxf apache-maven-3.5.4-bin.tar.gz步骤3 将Maven安装到指定目录,例如安装到“/opt/tools/installed”。mv apache-maven-3.5.4 /opt/tools/installed/步骤4 配置Maven环境变量。1. 在“/etc/profile”文件末尾增加如下几行。export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdkexport MAVEN_HOME=/opt/tools/installed/apache-maven-3.5.4export MAVEN_HOMEexport PATH=$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH2. 使修改的环境变量生效。source /etc/profile3、验证maven安装成功输入命令:mvn –v步骤5 修改Maven配置文件“/opt/tools/installed/apache-maven-3.5.4/conf/settings.xml”中的本地仓路径、远程仓等。 配置maven工程中的setting文件(添加鲲鹏的maven库)如下:<profile> <id>MyProfile</id> <repositories> <repository> <id>kunpeng</id> <url>https://mirrors.huaweicloud.com/kunpeng/maven</url> <releases> <enabled>true</enabled> </releases> </repository> <repository> <id>HuaweiCloudSDK</id> <url>https://mirrors.huaweicloud.com/repository/maven/huaweicloudsdk/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories></profile> <activeProfiles> <activeProfile>MyProfile</activeProfile> </activeProfiles>第二步:创建helloworld的maven工程(自动生成,在当前目录会生成一个java工程) mvn archetype:generate -DgroupId=helloworld -DartifactId=helloworld 第三步:修改一下pom.xml文件,添加如下内容 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.6</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>helloworld.App</mainClass> </manifest> </archive> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.10</version> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> </configuration> </execution> </executions> </plugin> </plugins> </build> 其中;maven-jar-plugin用于生成META-INF/MANIFEST.MF文件的部分内容,com.xxg.Main指定MANIFEST.MF中的Main-Class,true会在MANIFEST.MF加上Class-Path项并配置依赖包,lib/指定依赖包所在目录。只是生成MANIFEST.MF文件还不够,maven-dependency-plugin插件用于将依赖包拷贝到${project.build.directory}/lib指定的位置,即lib目录下。2)mvn编译工程,接下来编译并运行Helloworld项目。进入到工程的pom.xml所在目录下,执行$ mvn clean package下载的依赖包会保存在~/.m2/repository文件夹中,打开这个文件夹,我们会发现里面的包正是按照坐标的目录结构进行存储的。Maven在依赖一个jar包时会先去本地库查找,如果没找到就会从网上下载。当然,并不是所有的包都能从网上下载到,比如我们自己开发的jar包,这时,我们就可以用mvn install命令将一个项目安装到本地仓库。打包成功后我们会发现项目中多了一个target文件夹,目录结构如下可以看到,在package过程中,maven完成了编译、测试代码,生成测试报告,生成jar包等一系列工作。同时在target目录下生产了一个helloworld-1.0-SNAPSHOT.jar 这个已经集成该工程所有依赖包的jarmvn package #把这个工程打包成一个jar包mvn clean #清除刚刚刚编译出来的target目录的文件3)运行jarjava –jar target/helloworld-1.0-SNAPSHOT.jar
-
项目开发的痛点1.不同的IDE的java工程无法兼容2.无IDE环境下如何对软件工程进行编译和打包3.工程中的各种框架的jar文件容易冲突为解决以上软件工程的痛点,maven为java项目提供了工艺的构建和管理方式,是业界标准。maven是基于项目对象模型(pom.xml)来管理软件工程。IntelliJ idea开发环境默认自带maven,可以自己下载最新的版本更新设置。如果我们想要在工程中引入某个jar 包,只需要在pom.xml 中引入其jar包的坐标即可。jar包的坐标可以在search.maven.org搜索组件的坐标。Maven 通过groupId、artifactId与version三个向量来定位Maven 仓库其jar 包所在的位置,并把对应的jar 包引入到工程中来。依赖的原则:最短路径优先原则:如果A 依赖于B,B 依赖于C,在B 和C 中同时有某个组件的依赖,并且版本不一致,那么A中会引入B的依赖。路径相同先声明原则:如果在A 同时依赖于B 和C,B 和C 没有依赖关系,并且都有某组件的依赖,且版本不一致,那么需要在A中事先声明组件特定版本。如果需要排除某一版本的依赖,可以使用exclusion来进行排除。
-
1.起因客户的代码环境均是在本地,包括gitlib仓库也是部署在本地;客户希望通过本地IDE环境,在线下实现代码开发,并通过Maven的maven-docker-plugin插件,实现本地容器镜像封装,同时推送容器镜像到华为云SWR镜像仓库,尽可能的实现发布流程自动化;但是在实现的时候,往华为云上推送镜像时,一直出错,无法成功推送;插件推送时,报错信息如下:[INFO] Pushing swr.cn-east-2.myhuaweicloud.com/busyfan/my-web:1.0The push refers to repository [swr.cn-east-2.myhuaweicloud.com/busyfan/my-web][WARNING] Failed to push swr.cn-east-2.myhuaweicloud.com/busyfan/my-web:1.0, retrying in 10 seconds (1/5).[INFO] Pushing swr.cn-east-2.myhuaweicloud.com/busyfan/my-web:1.0The push refers to repository [swr.cn-east-2.myhuaweicloud.com/busyfan/my-web][WARNING] Failed to push swr.cn-east-2.myhuaweicloud.com/busyfan/my-web:1.0, retrying in 10 seconds (2/5).[INFO] Pushing swr.cn-east-2.myhuaweicloud.com/busyfan/my-web:1.0The push refers to repository [swr.cn-east-2.myhuaweicloud.com/busyfan/my-web][WARNING] Failed to push swr.cn-east-2.myhuaweicloud.com/busyfan/my-web:1.0, retrying in 10 seconds (3/5).[INFO] Pushing swr.cn-east-2.myhuaweicloud.com/busyfan/my-web:1.0The push refers to repository [swr.cn-east-2.myhuaweicloud.com/busyfan/my-web][WARNING] Failed to push swr.cn-east-2.myhuaweicloud.com/busyfan/my-web:1.0, retrying in 10 seconds (4/5).[INFO] Pushing swr.cn-east-2.myhuaweicloud.com/busyfan/my-web:1.0The push refers to repository [swr.cn-east-2.myhuaweicloud.com/busyfan/my-web][WARNING] Failed to push swr.cn-east-2.myhuaweicloud.com/busyfan/my-web:1.0, retrying in 10 seconds (5/5).[INFO] Pushing swr.cn-east-2.myhuaweicloud.com/busyfan/my-web:1.0The push refers to repository [swr.cn-east-2.myhuaweicloud.com/busyfan/my-web]Failed to push swr.cn-east-2.myhuaweicloud.com/busyfan/my-web:1.0, retrying in 10 seconds (5/5).Failed to execute goal com.spotify:docker-maven-plugin:1.2.2:build (default-cli) on project docker-plugin122: Exception caught2.对比测试整了快一天了,死活是调试不通,一直以为是自己的配置文件有问题,各种查文档,各种改配置,都快崩溃了;快下班的时候,突然想着,要不往hub.docker.com上推送一下试试看,没马想竟然一下子就推送成功了......实在没想到是华为云SWR平台有问题啊。。。找到问题所在就好办了,换到华东-上海一地域,也是一下子就推送成功了,了然。插件版本华为-华东-上海一华为-华东-上海二hub.docker.com0.4.13推送成功推送成功推送成功1.2.2推送成功推送失败推送成功上表是各种测试后的结果;因为日常默认使用的地域就是(华东-上海二),所以就被抗了一天时间;没想到会是SWR平台的问题,是因为前几天使用0.4.13版本的插件,是能成功的。3.pom.xml(华东-上海二) <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.13</version> <!-- <version>1.2.2</version> --> <configuration> <!-- 镜像名称,由两部分组成: 1. 地域endpoint:swr.cn-east-2.myhuaweicloud.com 2. 该地域内创建的组织名称:busyfan --> <imageName>swr.cn-east-2.myhuaweicloud.com/busyfan/my-web:1.0</imageName> <dockerHost>http://192.168.10.84:2375</dockerHost> <baseImage>java:8</baseImage> <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> <serverId>busyfan</serverId> </configuration> </plugin>个人猜测,大概是因为(华东-上海二)目前已经不开放给新用户使用了,所以该地域的很多服务,已经不怎么更新了;所以这就算是个BUG了吧。
-
【问题描述】编译netty 4.0.0.Beta1等版本执行mvn install时报testsuite-osgi-deps相关NoFileAssignedException错误,详细报错如下:[ERROR] Failed to execute goal org.apache.maven.plugins:.maven-install-plugin:3.0.0-M1: install (default-install) on project netty-testsuite-osgi-deps: NoFileAssignedException:. The packaging plugin for this project did not assign a main file to the project but it has attachments. Change packaginf to 'pom'. -> [Help 1]【解决方法】将编译命令从mvn install 改成mvn package再编译即可通过。【注】:其他版本遇到类似报错可参考相同解决方法;
-
【问题描述】编译netty 4.0.0.CR1等版本执行mvn install时报testsuite-osgi-deps相关Unable to provision错误,详细报错如下:[ERROR] Failed to execute goal org.apache.karaf.tooling:.karaf-maven-plugin:3.0.0.RC1: features-generate-descriptor (default-features-generate-descriptor) on project netty-testsuite-osgi-deps: Execution default-features-generate-descriptor of goal org.apache.karaf.tooling:.karaf-maven-plugin:3.0.0.RC1: features-generate-descriptor failed: Unable to load mojo 'features-generate-descriptor' (or one of its required components) from the plugin 'org.apache.karaf.tooling:.karaf-maven-plugin:3.0.0.RC1' : com.google.inject.ProvisionException: Unable to provision, see the following errors:【解决方法】修改pom.xml中依赖的karaf-maven-plugin版本号,从3.0.0.RC1修改为3.0.1:【注】:其他版本遇到类似报错可参考相同解决方法;
-
【问题描述】编译netty 4.0.0.Beta1、4.0.0.Beta2、4.0.0.Beta3等版本执行mvn install时报karaf-maven-plugin:jar:3.0.0-SNAPSHOT is missing等错误,详细报错如下:The POM for org.apache.karaf.tooling:karaf-maven-plugin:jar:3.0.0-SNAPSHOT is missing, no dependecy information available[ERROR] [ERROR] Some problems were encountered while processing the POMs:【解决方法】修改testsuite-osgi/testsuite-osgi-deps/pom.xml文件:将karaf-maven-plugin的依赖版本号从3.0.0-SNAPSHOT修改为3.0.1:【注】:在netty的4.0.0.Beta1、4.0.0.Beta2、4.0.0.Beta3等3个版本需要修改testsuite-osgi/testsuite-osgi-deps/pom.xml文件中karaf-maven-plugin的依赖版本号;
-
【问题描述】编译netty 4.0.0.Alpha7、4.0.0.Alpha8、4.0.0.Beta1等版本执行mvn install时报Signature errors found等错误,详细报错如下:Failed to execute goal org.codehaus.mojo:animal-sniffer-maven-plugin:1.8:check (default) on project netty-code-http: Signature errors found. Verify them and put @ignoreJRERequirement on them.【解决方法】删除或注释pom.xml如下内容:【注】:在netty的4.0.0.Alpha7版本对应pom.xml的303行,4.0.0.Alpha8版本对应pom.xml的305行,4.0.0.Beta1版本对应pom.xml的338行;
上滑加载中