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

黑白摄影网站百度云官网登录入口

黑白摄影网站,百度云官网登录入口,管理客户的免费软件,网站代做发布需求前言 当我们在开发项目时#xff0c;有时需要用到外部依赖组件#xff0c;例如当我们需要 Json 序列化的时候需要用到 FastJson 组件#xff0c;我们可以通过下载对应 jar 包加载到项目中。但当一个大的项目同时需要依赖各种各样的外部服务#xff0c;就存在着配置繁琐、依…前言 当我们在开发项目时有时需要用到外部依赖组件例如当我们需要 Json 序列化的时候需要用到 FastJson 组件我们可以通过下载对应 jar 包加载到项目中。但当一个大的项目同时需要依赖各种各样的外部服务就存在着配置繁琐、依赖冲突等问题因此可以通过 maven 来完成对应的依赖管理功能 一、Settings 配置 settings.xml 用来配置 maven 项目中的各种参数文件包括本地仓库、远程仓库、私服、认证等信息。 1.1 配置概述 1.1.1 全局 settings、用户 setting、pom 的区别 全局 settings.xml 是 maven 的全局配置文件一般位于 ${maven.home}/conf/settings.xml即 maven 文件夹下的 conf 中。用户 setting 是 maven 的用户配置文件一般位于 ${user.home}/.m2/settings.xml即每位用户都有一份配置文件。pom.xml 文件是项目配置文件一般位于项目根目录下或子目录下。 配置优先级从高到低pom.xml 本地 settings 全局 settings 如果这些文件同时存在在应用配置时会合并它们的内容如果有重复的配置优先级高的配置会覆盖优先级低的。 1.1.2 仓库【重要】 如前言所述我们依赖的外部服务是需要有地方进行存储的而存储的地方就称之为仓库。其中仓库又分为本地仓库、中央仓库、镜像仓库、私服。 其对应关系为 1本地仓库 当项目在本地编译或运行时直接加载本地的依赖服务无疑是最快的。默认情况下不管在 Window 还是 Linux 下每个用户在自己用户目录下都有一个路径名为.m2/repository/ 的仓库目录。 而原始的本地仓库是为空的因此 maven 需要知道一个网络上的仓库在本地仓库不存在时前往下载网络上的仓库也就是远程仓库。 2中央仓库 当 maven 未配置时会默认请求 maven 的中央仓库中央仓库包含了这个世界上绝大多数流行的开源 java 构件以及源码、作者信息、SCM, 信息、许可证信息等每个月这里都会接受全世界 java 程序员大概 1 亿次的访问它对全世界 java 开发者的贡献由此可见一斑。 但是由于最常见的例如网络原因等国外的中央仓库使用起来并不顺利因此就有了下载地址为国内的中央仓库也就是镜像仓库。 3镜像仓库 总结来说镜像仓库就是将国外的中心仓库复制一份到国内这样一来下载速度以及访问速度都将很快。 4私服 一般来说中央仓库或者镜像仓库都能满足我们的需求但是当我们在公司内合作开发代码时可能因为系统保密性原因有一些其他同事开发的外部依赖只希望能够被本公司的人使用而如果上传到镜像仓库则保密性就不复存在了。因此私服最主要的功能时存储一些公司内部不希望被公开的依赖服务。 1.2 settings 配置详解 settings.xml 配置了本地全局 maven 的相关配置。 以下是一份 seetings.xml 的文件配置顶级元素。 settings xmlnshttp://maven.apache.org/SETTINGS/1.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/SETTINGS/1.0.0https://maven.apache.org/xsd/settings-1.0.0.xsdlocalRepositoryinteractiveModeusePluginRegistryofflinepluginGroupsserversmirrorsproxiesprofilesactiveProfiles /settings 1.2.1 localRepository 用来标识本地仓库的位置 localRepositoryE:\repo\maven/localRepository 1.2.2 interactiveMode maven 是否需要和用户交互以获得输入。默认为 true。 interactiveModetrue/interactiveMode 1.2.3 usePluginRegistry maven 是否需要使用 plugin-registry.xml 文件来管理插件版本。 usePluginRegistryfalse/usePluginRegistry 1.2.4 offline 用来标识是否以离线模式运营 maven。 当系统不能联网时可以通过次配置来离线运行。 offlinefalse/offline 1.2.5 servers 当使用 maven 私服时某些私服需要配置认证信息需要在此处填写相应的配置。之所以不写在 pom.xml 中是因为一般项目在上传至代码仓库时同样会将 pom.xml 上传而 setting.xml 一般位于用户本地因此相对比较安全。其下面可以定义一系列的server子元素表示当需要连接到一个远程服务器的时候需要使用到的验证方式。这主要有username/password和privateKey/passphrase这两种方式 !--配置服务端的一些设置。一些设置如安全证书不应该和pom.xml一起分发。这种类型的信息应该存在于构建服务器上的settings.xml文件中。 --servers!--服务器元素包含配置服务器时需要的信息 --server!--这是server的id注意不是用户登陆的id该id与distributionManagement中repository元素的id相匹配。 --idserver001/id!--鉴权用户名。鉴权用户名和鉴权密码表示服务器认证所需要的登录名和密码。 --usernameadmin/username!--鉴权密码 。鉴权用户名和鉴权密码表示服务器认证所需要的登录名和密码。密码加密功能已被添加到2.1.0 。详情请访问密码加密页面 --passwordadmin123/password!--鉴权时使用的私钥位置。和前两个元素类似私钥位置和私钥密码指定了一个私钥的路径默认是${user.home}/.ssh/id_dsa以及如果需要的话一个密语。将来passphrase和password元素可能会被提取到外部但目前它们必须在settings.xml文件以纯文本的形式声明。 --privateKey${usr.home}/.ssh/id_dsa/privateKey!--鉴权时使用的私钥密码。 --passphrasesome_passphrase/passphrase!--文件被创建时的权限。如果在部署的时候会创建一个仓库文件或者目录这时候就可以使用权限permission。这两个元素合法的值是一个三位数字其对应了unix文件系统的权限如664或者775。 --filePermissions664/filePermissions!--目录被创建时的权限。 --directoryPermissions775/directoryPermissions/server/servers... /settingsserversserveriddeploymentRepo/idusernamerepouser/usernamepasswordrepopwd/password/server!-- Another sample, using keys to authenticate.serveridsiteServer/idprivateKey/path/to/private/key/privateKeypassphrase/passphrase/server/servers 1.2.6 mirrors【重要】 用来配置相应的镜像仓库。 如果仓库 X 可以提供仓库 Y 存储的所有内容那么就可以认为 X 是 Y 的一个镜像。用过 Maven 的都知道国外的中央仓库因为网络原因用起来太慢了所以选择一个国内的镜像就很有必要配置简单修改 conf 文件夹下的 settings.xml 文件添加如下镜像配置 mirrorsmirroridalimaven/idnamealiyun maven/nameurlhttp://maven.aliyun.com/nexus/content/groups/public//urlmirrorOfcentral/mirrorOf /mirror mirroridalimaven1/idnamealiyun maven1/nameurlhttp://maven.aliyun.com/nexus/content/groups/public//urlmirrorOf*/mirrorOf /mirror /mirrorsmirrors!--给定仓库的下载镜像。 --mirror!--该镜像的唯一标识符。id用来区分不同的mirror元素。 --idplanetmirror.com/id!--镜像名称 --namePlanetMirror Australia/name!--该镜像的URL。构建系统会优先考虑使用该URL而非使用默认的服务器URL。 --urlhttp://downloads.planetmirror.com/pub/maven2/url!--被镜像的服务器的id。例如如果我们要设置了一个Maven中央仓库http://repo.maven.apache.org/maven2/的镜像就需要将该元素设置成central。这必须和中央仓库的id central完全一致。--mirrorOfcentral/mirrorOf/mirror/mirrors其中 id 与 name 用来标识唯一的仓库url 为镜像仓库地址mirrorOf 用来匹配当请求什么仓库依赖时使用该镜像。 这里介绍下 mirrorOf 配置的各种选项 mirrorOf*mirrorOf: 匹配所有远程仓库。mirrorOfexternal:*mirrorOf: 匹配所有远程仓库使用 localhost 的除外使用 file:// 协议的除外。也就是说匹配所有不在本机上的远程仓库。mirrorOfrepo1,repo2mirrorOf: 匹配仓库 repo1h 和 repo2使用逗号分隔多个远程仓库。mirrorOf*,!repo1mirrorOf: 匹配所有远程仓库repo1 除外使用感叹号将仓库从匹配中排除。 需要注意的是由于镜像仓库完全屏蔽了被镜像仓库当镜像仓库不稳定或者停止服务的时候Maven 仍将无法访问被镜像仓库因而将无法下载构件。 此外 maven 读取 mirror 配置是 从上往下读取的因此谨慎配置 mirrorOf*mirrorOf因为如果第一个镜像仓库配置了如此标志那么如果该仓库即使不存在对应依赖也不会向下游查询。 mirrors用于定义一系列的远程仓库的镜像。我们可以在pom中定义一个下载工件的时候所使用的远程仓库。但是有时候这个远程仓库会比较忙所以这个时候人们就想着给它创建镜像以缓解远程仓库的压力也就是说会把对远程仓库的请求转换到对其镜像地址的请求。每个远程仓库都会有一个id这样我们就可以创建自己的mirror来关联到该仓库那么以后需要从远程仓库下载工件的时候Maven就可以从我们定义好的mirror站点来下载这可以很好的缓解我们远程仓库的压力。在我们定义的mirror中每个远程仓库都只能有一个mirror与它关联也就是说你不能同时配置多个mirror的mirrorOf指向同一个repositoryId。 1》  id是用来区别mirror的所有的mirror不能有相同的id 2》 mirrorOf用来表示该mirror是关联一的哪个仓库其值为其关联仓库的id。当要同时关联多个仓库时这多个仓库之间可以用逗号隔开当要关联所有的仓库时可以使用“*”表示当要关联除某一个仓库以外的其他所有仓库时可以表示为“*,!repositoryId”当要关联不是localhost或用file请求的仓库时可以表示为“external:*”。 3》 url表示该镜像的url。当Maven在建立系统的时候就会使用这个url来连接到我们的远程仓库。 1.2.7 proxies 用来配置代理。proxies其下面可以定义一系列的proxy子元素表示Maven在进行联网时需要使用到的代理。当设置了多个代理的时候第一个标记active为true的代理将会被使用。下面是一个使用代理的例子 settings xmlnshttp://maven.apache.org/SETTINGS/1.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/SETTINGS/1.0.0https://maven.apache.org/xsd/settings-1.0.0.xsd...proxies!--代理元素包含配置代理时需要的信息 --proxy!--代理的唯一定义符用来区分不同的代理元素。 --idmyproxy/id!--该代理是否是激活的那个。true则激活代理。当我们声明了一组代理而某个时候只需要激活一个代理的时候该元素就可以派上用处。 --activetrue/active!--代理的协议。 协议://主机名:端口分隔成离散的元素以方便配置。 --protocolhttp/protocol!--代理的主机名。协议://主机名:端口分隔成离散的元素以方便配置。 --hostproxy.somewhere.com/host!--代理的端口。协议://主机名:端口分隔成离散的元素以方便配置。 --port8080/port!--代理的用户名用户名和密码表示代理服务器认证的登录名和密码。 --usernameproxyuser/username!--代理的密码用户名和密码表示代理服务器认证的登录名和密码。 --passwordsomepassword/password!--不该被代理的主机名列表。该列表的分隔符由代理服务器指定例子中使用了竖线分隔符使用逗号分隔也很常见。 --nonProxyHosts*.google.com|ibiblio.org/nonProxyHosts/proxy/proxies... /settings 1.2.8 profiles【重要】 根据环境参数来调整构建配置的列表。用于定义一组 profile seetings 中的 profile 是 pom.xml 中 profile 元素的裁剪版本。 它包含了 id、activation、repositories、pluginRepositories 和 properties 元素。这里的 profile 元素只包含这五个子元素是因为这里只关心构建系统这个整体这正是 settings.xml 文件的角色定位而非单独的项目对象模型设置。如果一个 settings.xml 中的 profile 被激活它的值会覆盖任何其它定义在 pom.xml 中带有相同 id 的 profile。 profilesprofileidjdk-1.4/idactivationjdk1.8/jdk/activationrepositoriesrepositoryidjdk14/idnameRepository for JDK 1.4 builds/nameurlhttp://www.myhost.com/maven/jdk14/urllayoutdefault/layoutsnapshotPolicyalways/snapshotPolicy/repository/repositories/profile| plugin| groupIdorg.myco.myplugins/groupId| artifactIdmyplugin/artifactId| configuration| tomcatLocation${tomcatPath}/tomcatLocation| /configuration| /pluginprofileidenv-dev/idactivationpropertynametarget-env/namevaluedev/value/property/activationpropertiestomcatPath/path/to/tomcat/instance/tomcatPath/properties/profile/profiles 1repositories 定义了一组远程仓库的列表当该属性对应的 profile 被激活时会使用该远程仓库。 repositories!--包含需要连接到远程仓库的信息 --repository!--远程仓库唯一标识 --idcodehausSnapshots/id!--远程仓库名称 --nameCodehaus Snapshots/name!--如何处理远程仓库里发布版本的下载 --releases!--true或者false表示该仓库是否为下载某种类型构件发布版快照版开启。 --enabledfalse/enabled!--该元素指定更新发生的频率。Maven会比较本地POM和远程POM的时间戳。这里的选项是always一直daily默认每日intervalX这里X是以分钟为单位的时间间隔或者never从不。 --updatePolicyalways/updatePolicy!--当Maven验证构件校验文件失败时该怎么做-ignore忽略fail失败或者warn警告。 --checksumPolicywarn/checksumPolicy/releases!--如何处理远程仓库里快照版本的下载。有了releases和snapshots这两组配置POM就可以在每个单独的仓库中为每种类型的构件采取不同的策略。例如可能有人会决定只为开发目的开启对快照版本下载的支持。参见repositories/repository/releases元素 --snapshotsenabled /updatePolicy /checksumPolicy //snapshots!--远程仓库URL按protocol://hostname/path形式 --urlhttp://snapshots.maven.codehaus.org/maven2/url!--用于定位和排序构件的仓库布局类型-可以是default默认或者legacy遗留。Maven 2为其仓库提供了一个默认的布局然而Maven 1.x有一种不同的布局。我们可以使用该元素指定布局是default默认还是legacy遗留。 --layoutdefault/layout/repository /repositories 2properties 定义了一组拓展属性当对应的 profile 被激活时该属性有效。 !--1. env.X: 在一个变量前加上env.的前缀会返回一个shell环境变量。例如,env.PATH指代了$path环境变量在Windows上是%PATH%。2. project.x指代了POM中对应的元素值。例如: projectversion1.0/version/project通过${project.version}获得version的值。3. settings.x: 指代了settings.xml中对应元素的值。例如settingsofflinefalse/offline/settings通过 ${settings.offline}获得offline的值。4. java System Properties: 所有可通过java.lang.System.getProperties()访问的属性都能在POM中使用该形式访问例如 ${java.home}。5. x: 在properties/元素中或者外部文件中设置以${someVar}的形式使用。-- propertiesuser.install${user.home}/our-project/user.install /properties 3id 全局唯一标识如果一个 settings.xml 中的 profile 被激活它的值会覆盖任何其它定义在 pom.xml 中带有相同 id 的 profile。 4pluginRepositories 同 repositories 差不多不过该标签定义的是插件的远程仓库。 5activation 触发激活该 profile 的条件。 activation!--profile默认是否激活的标识 --activeByDefaultfalse/activeByDefault!--当匹配的jdk被检测到profile被激活。例如1.4激活JDK1.41.4.0_2而!1.4激活所有版本不是以1.4开头的JDK。 --jdk1.5/jdk!--当匹配的操作系统属性被检测到profile被激活。os元素可以定义一些操作系统相关的属性。 --os!--激活profile的操作系统的名字 --nameWindows XP/name!--激活profile的操作系统所属家族(如 windows) --familyWindows/family!--激活profile的操作系统体系结构 --archx86/arch!--激活profile的操作系统版本 --version5.1.2600/version/os!--如果Maven检测到某一个属性其值可以在POM中通过${name}引用其拥有对应的name 值Profile就会被激活。如果值字段是空的那么存在属性名称字段就会激活profile否则按区分大小写方式匹配属性值字段 --property!--激活profile的属性的名称 --namemavenVersion/name!--激活profile的属性的值 --value2.0.3/value/property!--提供一个文件名通过检测该文件的存在或不存在来激活profile。missing检查文件是否存在如果不存在则激活profile。另一方面exists则会检查文件是否存在如果存在则激活profile。 --file!--如果指定的文件存在则激活profile。 --exists${basedir}/file2.properties/exists!--如果指定的文件不存在则激活profile。 --missing${basedir}/file1.properties/missing/file /activation 1.2.9 ActiveProfiles 在运行时手工激活的 profile。 该元素包含了一组 activeProfile 元素每个 activeProfile 都含有一个 profile id。任何在 activeProfile 中定义的 profile id不论环境设置如何其对应的 profile 都会被激活。如果没有匹配的 profile则什么都不会发生。 activeProfiles!-- 要激活的profile id --activeProfileenv-test/activeProfile /activeProfiles 1.2.10 激活 profile 的三种方式【重要】 上面有提到了两种激活的 profile 的方式还有一种可以通过命令行激活 profile。 1通过 ActiveProfiles 激活 如题 1.2.9 可以同时激活多个 profile。 2通过 activation 结果 3通过命令行的方式激活 也是我们经常使用的方式例如 mvn -P 我们可以通过在 pom.xml 或 setting.xml 中指定不同环境的 profile在编译构建不同的项目时通过上述的命令行方式激活对应的 profIle。例如在开发环境下 mvn package -P dev 可以打包开环环境下的项目。 1.3 QA 1.3.1 mirrors 与 repositories 的关系【重要】 从上文可以看到repository 标签与 mirror 标签都定义了一个远程仓库的位置那么当一个依赖同时存在于两个仓库时会先加载那个依赖呢 这里需要阐述一下 maven 加载真正起作用的 repository 的步骤 首先获取 pom.xml 中 repository 的集合然后获取 setting.xml 中 mirror 中元素。如果 repository 的 id 和 mirror 的 mirrorOf 的值相同则该 mirror 替代该 repository。如果该 repository 找不到对应的 mirror则使用其本身。依此可以得到最终起作用的 repository 集合。可以理解 mirror 是复写了对应 id 的 repository。 mirror 相当于一个拦截器会拦截被 mirrorOf 匹配到的 repository匹配原则参照 1.2.6 在匹配到后会用 mirror 里定义的 url 替换到 repository。 没有配置 mirror 配置了 mirror 二、Pom.xml 详解 上章中 setting.xml 定义了某个环境下全局项目的相关依赖配置而 pom.xml 则具体定义了某一个项目中的依赖配置。 2.1 pom 元素 2.1.1 基本信息 project xmlns http://maven.apache.org/POM/4.0.0xmlns:xsi http://www.w3.org/2001/XMLSchema-instancexsi:schemaLocation http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd!-- 模型版本 一般不用更改 --modelVersion4.0.0/modelVersion!-- 公司或者组织的唯一标志也是打包成jar包路径的依据 --!-- 例如com.companyname.project-groupmaven打包jar包的路径/com/companyname/project-group --groupIdcom.companyname.project-group/groupId!-- 项目的唯一ID一个groupId下面可能多个项目就是靠artifactId来区分的 --artifactIdproject/artifactId!-- 项目当前版本格式为:主版本.次版本.增量版本-限定版本号 --version1.0/version!--项目产生的构件类型jar、war主要用来标识项目打包出的服务是jar包还是war包 pom一般用作多moudle的项目中 顶层的pom用来指定子moudle中需要依赖的版本 详见2.1.3 --packagingjar/packaging!--定义了本项目的名称与example的网址 --nameitoken dependencies/nameurlwww.funtl.com/url /project 基本信息都比较易懂主要定义了本项目的相关配置说明例如唯一坐标、版本、项目介绍等。 2.1.2 dependencies【重要】 1dependencies 本元素定义了项目中所需要的相关依赖信息也是最重要的元素之一。 !--该元素描述了项目相关的所有依赖。 这些依赖自动从项目定义的仓库中下载 -- dependenciesdependency!------------------- 依赖坐标 -------------------!--依赖项目的坐标三元素groupId artifactId version --!--其中三要素的来源就是2.1.1中别人定义好的相关信息 --groupIdorg.apache.maven/groupIdartifactIdmaven-artifact/artifactIdversion3.8.1/version!------------------- 依赖传递 -------------------!--依赖排除即告诉maven只依赖指定的项目不依赖该项目的这些依赖。此元素主要用于解决版本冲突问题 --exclusionsexclusionartifactIdspring-core/artifactIdgroupIdorg.springframework/groupId/exclusion/exclusions!-- 可选依赖用于阻断依赖的传递性。如果在项目B中把C依赖声明为可选那么依赖B的项目中无法使用C依赖 --optionaltrue/optional!------------------- 依赖范围 -------------------!--依赖范围。在项目发布过程中帮助决定哪些构件被包括进来- compile默认范围适用于所有阶段会随着项目一起发布; - runtime: 在执行时需要使用如JDBC驱动适用运行和测试阶段不同于例如fastjson需要在编译时使用; - test: 只在测试时使用用于编译和运行测试代码例如junit不同于junit在发布时并不需要; - optional: 当项目自身被依赖时标注依赖是否传递。用于连续依赖时使用 --scopetest/scope/dependency /dependencies 2如何解决依赖传递问题或 jar 包版本冲突问题 解决上述问题一般有两种方式 当我们作为依赖服务提供者时可以通过 optional 标签排除掉不想被传递的服务。 !-- Project A -- project...dependencies!-- declare the dependency to be set as optional --dependencygroupIdsample.ProjectB/groupIdartifactIdProject-B/artifactIdversion1.0/versionoptionaltrue/optional /dependency/dependencies /project 我们的 A 服务中引用了外部的依赖 B 服务此时有 A - B在别人引用我们时有 C - A -B若此时我们 A 在提供对外服务时不想让别人依赖 B 服务可以在引用 B 时添加 optional 标签为 true这样带 C 依赖于 A 时并不会引入 B。如果 C 在此时想要使用 B 的相关服务需要在 C 的 pom 中显示的调用 B 的相关服务。 当我们作为依赖服务使用者时可以通过 exclusions 来去除掉我们依赖包中所不想依赖的其他服务。 如果此时我们的 A 服务依赖于 B 服务B 服务依赖于 C 服务则有 A -B -C因为某种原因例如 jar 包冲突我们在 A 中并不想依赖于 C 服务的版本可以在调用 B 服务时去除掉 C 的相关依赖然后自己再在 A 中使用 C 的相关版本。 project...dependenciesdependencygroupIdsample.ProjectB/groupIdartifactIdProject-B/artifactIdversion1.0/versionexclusionsexclusion!-- 排除掉B中C的相关依赖 --groupIdsample.ProjectC/groupIdartifactIdProject-C/artifactId/exclusion/exclusions /dependency!-- 自己引用C的相关版本 --dependencygroupIdsample.ProjectC/groupIdartifactIdProject-C/artifactIdversion2.0/version/dependency/dependencies /project 2.1.3 dependencyManagement 当一个服务中存在有多个 moudle 时每个子 module 都可能引用了相同的 jar 包但是如果将版本维护到子 module 的 pom 中当需要升级时需要修改所有的 pom 文件版本。maven 提供了继承的方式来解决此问题。 !--在父pom中定义子pom需要的相关依赖 -- dependencyManagementdependenciesdependencygroupIdorg.aspectj/groupIdartifactIdaspectjweaver/artifactIdversion1.0.0/version/dependency/dependencies /dependencyManagement 在父 pom 的 dependencyManagement 中定义子 pom 需要的依赖及版本。 !--在子pom中 如下定义了父pom中相关依赖信息 --parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion1.5.10.RELEASE/versionrelativePath//parentdependenciesdependency!--因为引用了父pom 所以可以不指定版本 maven会自动去父pom中查找指定版本 此处为1.0.0 --groupIdorg.aspectj/groupIdartifactIdaspectjweaver/artifactId/dependency/dependencies 当我们的 pom 中有定义父 pom 的元素后可以在指定需要的依赖时不指定其版本maven 会帮我们去父 pom 中查找相关的版本信息。 2.1.4 properties properties 主要用来定义常量通过 ${value} 来使用。 !--配置依赖版本--properties!-- Environment Settings --java.version1.8/java.versionproject.build.sourceEncodingUTF-8/project.build.sourceEncodingproject.reporting.outputEncodingUTF-8/project.reporting.outputEncoding!-- Spring cloud Settings --spring-cloud.versionFinchley.RELEASE/spring-cloud.versionspring-boot-admin.version2.0.1/spring-boot-admin.versionzipkin.version2.10.1/zipkin.version/propertiesdependencies!--spring cloud--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependency!--zipkin--dependencygroupIdio.zipkin.java/groupIdartifactIdzipkin/artifactIdversion${zipkin.version}/version/dependencydependencies 此外maven 还通过约定大于配置的方式定义了一些常用的属性。 属性定义 2.1.5 resources resources 标签用来标识项目在编译运行时需要额外编译的文件。例如手工引入 jar 包、不同运行环境对应不同的 profile。 buildresources!--首先将默认resources目录下的所有文件包括 --resourcedirectorysrc/main/resources/directoryfilteringtrue/filtering!--只编译所有以.fxml结尾的文件 --includesinclude**/*.fxml/include/includes!--排除掉所有的yaml文件 --excludes exclude**/*.yaml/exclude /excludes/resource!--将不同环境下对应的不同yaml或properties文件编译运行 --resource!--directorysrc/main/profiles/dev/directorydirectorysrc/main/profiles/betadirectorydirectorysrc/main/profiles/pre/directory--directorysrc/main/profiles/product/directoryfilteringtrue/filteringincludesinclude**/*.fxml/include/includes/resource!--将手工引入的jar包编译运行 --resourcedirectorylib/directorytargetPathBOOT-INF/lib//targetPathincludesinclude**/*.jar/include/includes/resource/resources /build 2.1.6 profile 与 setting.xml 中 profile 所不同的是参照 1.2.8pom 中的 profile 有着更多的标签来描述一组环境。从作用上来区分的话一般 setting.xml 用来标识不同的远程仓库而 pom 中的 profile 一般用来标识当前项目属于什么环境如下是一组常见的 pom 中的 profiles。 profilesprofileiddev/id!--激活条件 其中默认为该profile 更多激活条件可以参考1.2.8 --activationactiveByDefaulttrue/activeByDefault/activation!--当此profile被激活时会将 project.active 的属性赋值为dev --propertiesproject.activedev/project.active/properties/profileprofileidtest/id!--当此profile被激活时会将 project.active 的属性赋值为test --propertiesproject.activetest/project.active/properties/profile /profilesresourcesresource!--根据不同的环境 project.active 取得不同的值 从而会将不同的环境下的yaml或properties文件编译进项目中 达到只需要在编译时指定环境变量即可 不用每次都要修改配置文件 --directorysrc/main/${project.active}/directoryfilteringtrue/filteringincludesinclude**/*.fxml/include/includes/resource /resources 此外一般通过 mvn -P dev/beta/pre/product 命令来激活不同的环境也可以通过其他的方式来激活 profile详见 1.2.10。 当然pom 中的 profile 不止有指定编译环境的功能同样也可以指定远程仓库等其他功能。 2.1.6 modules 当我们项目中有多个模块时如果我们要单独打包的话需要在每一个模块都执行对应的 maven 命令但是通过 modules 标签可以将子服务或平级服务进行聚合只需要打包该服务也就会将其对应的子模块同时打包。 modules!-- 引入子模块所在的相对目录 --modulespringmybatis/module!-- 引入同级模块所在的相对目录 --module../utils/module/modules 三、null:jrdp-common:null:jar 问题解决 3.1 包找不到问题 我们某次在开发功能的时候在我们的项目中引用了伏羲另外一个系统的 jar 包但是预发环境下编译的时候却发现构建失败原因是 因为当时项目有用到京东自己的仓库所以我们当时第一反应是去仓库中查找结果发现仓库中是有这个 jar 包的。 在发现并不是最常见的 jar 包不存在的问题后我们开始分析报错原因发现报错的 jrdp-common 这个包并不是我们直接引用的而是在我们引用的 jar 包中引用的并且 null:jrdp-common:null:jar 可以推测前面应该是 groupID 与 version。 假设我们的项目是 A 项目引用的项目是 B 项目也就是 A-B-jrdp-common 于是我们打开 B 项目查看 B 的 pom 结构。 发现 B 项目的 pom 中确实引用了 jrdp-common 这个包但是并没有指定版本是因为继承了 xx-parent 这个包我们在这个包中确实也找到了指定的版本号因此就排除了项目中没有指定 groupid 与版本号的问题。 这个时候好像就问题就陷入了思路但是我们注意到我们之前另一个私服上也是有这个包的那么之前的在另一个私服上引用好像是没有问题的我们查看了私服了上的 pom 文件发现也是跟项目一样的。 然后我们就突然想到会不会是仓库中的包有问题果不其然 没有指定 parent 也没有指定版本号于是我们修改了这个版本的 pom至此问题解决。 总结因为我们的系统已经被好多个团队中转接手过因此可能在某些地方踩了不少坑像这种问题应该就是之前的团队上传了一些有问题的 jar 包导致依赖不可用但是因为我们之前一直用的私服是没有什么问题的只到这次用到了仓库问题才浮现。 另外此问题并不具有普适性但是当遇到了 groupid 不能未空的时候可以按照此方法进行排查。 settings xmlnshttp://maven.apache.org/SETTINGS/1.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsdserversserveridnexus-releases/idusernamedeployment/usernamepassworddeployment123/password/serverserveridnexus-snapshots/idusernamedeployment/usernamepassworddeployment123/password/server/serversmirrorsmirroridnexus-releases/idmirrorOf*/mirrorOfurlhttp://192.168.213.5:8081/content/groups/public//url!-- urlhttp://repo1.maven.org/maven2//url --/mirrormirroridnexus-snapshots/idmirrorOf*/mirrorOfurlhttp://192.168.213.5:8081/content/repositories/snapshots//url !-- urlhttp://repo1.maven.org/maven2//url --/mirror/mirrorsprofilesprofileidnexus/idrepositories repositoryidnexus-releases/idurlhttp://192.168.213.5:8081/content/groups/public//url !-- urlhttp://repo1.maven.org/maven2//url --releasesenabledtrue/enabled/releasessnapshotsenabledtrue/enabledupdatePolicyalways/updatePolicy/snapshots/repositoryrepositoryidnexus-snapshots/idurlhttp://192.168.213.5:8081/content/repositories/snapshots//url !-- urlhttp://repo1.maven.org/maven2//url --releasesenabledtrue/enabled/releasessnapshotsenabledtrue/enabledupdatePolicyalways/updatePolicy/snapshots/repository/repositoriespluginRepositoriespluginRepositoryidnexus-releases/idurlhttp://192.168.213.5:8081/content/groups/public//url !-- urlhttp://repo1.maven.org/maven2//url --releasesenabledtrue/enabled/releasessnapshotsenabledtrue/enabledupdatePolicyalways/updatePolicy/snapshots/pluginRepositorypluginRepositoryidnexus-snapshots/idurlhttp://192.168.213.5:8081/content/repositories/snapshots//url !-- urlhttp://repo1.maven.org/maven2//url --releasesenabledtrue/enabled/releasessnapshotsenabledtrue/enabledupdatePolicyalways/updatePolicy/snapshots/pluginRepository /pluginRepositories/profile/profilesactiveProfilesactiveProfilenexus/activeProfile!--activeProfiledev/activeProfile--/activeProfiles/settings
http://www.pierceye.com/news/121488/

相关文章:

  • wordpress生活插件上海做网站优化
  • 长武网站建设做网站吉林
  • 定制做网站技术建网站不做广告怎么赚钱
  • 南宁市做网站的公司yellow的视频播放
  • 网络营销的效果是什么杭州seo网站建设
  • 南沙免费网站建设阿里巴巴网站工作流程
  • 东莞公司网站建设河南省专业做网站公司
  • 兰州彩票网站制作安阳区号是什么
  • 企业形象网站解决方案传统企业如果建立网站
  • 个人网站主页模板如何开一家网络营销公司
  • 网络管理系统密码吴中seo页面优化推广
  • 手绘风格的网站上海做网站cnsosu
  • 怎么做一个免费网站网站app的作用
  • iis 搭建网站品牌建设经验做法
  • 做国外的众筹网站有哪些wordpress小红书主题
  • 扩展名 网站百度资源共享链接分享组
  • 东莞市seo网络推广怎么样杭州seo关键词优化哪家好
  • 做网站用什么ui美观微信公众号调用WordPress
  • 用万网做网站企业做网站怎么做
  • 比较好的网站开发教学网站专业做视频的网站有哪些
  • 户外旅游网站模板网站开发需要看相关书籍
  • 建设高端网站的公司企业营销网站建设公司
  • 重庆建设工程信息网站重庆企业网站建设报价
  • 大兴模版网站开发公司哪家好unn建站
  • 工信部网站域名备案查询北京科技网站建设公司
  • 昆明做网站那家好自己动手做网站
  • 女生做seo网站推广北京海岸设计公司网站
  • 单位建设网站硬件拍摄制作宣传片企业
  • 网站做推广应该如何来做呢哪里推广柳州360优化
  • 淘宝网站的建设目的济宁网站建设 中企动力临沂