外贸网站建设费用是多少?提供网站设计收费标准的。
摘要:一般建一个外贸网站多少钱,提供网站设计收费标准,谁能帮我做网站,负责网站建设黑马课程 文章目录1. 分模块开发1.1 分模块开发入门案例示例:抽取domain层示例:抽取dao层1
一般建一个外贸网站多少钱,提供网站设计收费标准,谁能帮我做网站,负责网站建设黑马课程 文章目录1. 分模块开发1.1 分模块开发入门案例示例#xff1a;抽取domain层示例#xff1a;抽取dao层1.2 依赖管理2. 聚合和继承2.1 聚合概述聚合实现步骤2.2 继承 dependencyManagement3. 属性管理3.1 依赖版本属性管理3.2 配置文件属性管理#xff08;了解#… 黑马课程 文章目录1. 分模块开发1.1 分模块开发入门案例示例抽取domain层示例抽取dao层1.2 依赖管理2. 聚合和继承2.1 聚合概述聚合实现步骤2.2 继承 dependencyManagement3. 属性管理3.1 依赖版本属性管理3.2 配置文件属性管理了解3.3 Maven中的属性了解3.4 版本说明4. 多环境配置与应用4.1 多环境开发4.2 跳过测试5. 私服5.1 私服安装步骤1下载和解压nexus步骤2启动nexus步骤3访问nexus服务器报错问题步骤4关闭nexus步骤5 修改配置5.2 私服中的仓库分类5.3 本地仓库访问私服配置步骤1私服上配置仓库步骤2配置本地仓库对私服的访问权限步骤3配置私服的访问路径5.4 私服资源上传和下载1. 分模块开发
将原始模块按照功能拆分成若干个子模块方便模块间的相互调用接口共享 例如订单模块和商品模块。订单必然用到商品如何使商品中的实体类对订单可见
1.1 分模块开发入门案例 示例抽取domain层
步骤1新建一个模块 步骤2将原Book模块里的domain里面的实体类复制到新的模块maven_pojo里面并删除Book模块里的domain 步骤3在Book模块中引入maven_pojo的依赖
!-- 引入其他模块 --
!-- maven_pojo实体类模块 --
dependencygroupIdorg.example/groupIdartifactIdmaven_pojo/artifactIdversion1.0-SNAPSHOT/version
/dependency步骤4将maven_pojo模块打包安装到本地仓库中 此后即可正常使用 如何使自己本地仓库里的模块给其他人员使用——私服 示例抽取dao层
抽取dao层步骤类似maven_dao所需的依赖如下
dependencies!-- maven_pojo实体类模块 --dependencygroupIdorg.example/groupIdartifactIdmaven_pojo/artifactIdversion1.0-SNAPSHOT/version/dependency!-- mysql-connector-java --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.46/version/dependency!-- mybatis --dependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.5.6/version/dependency!-- spring-webmvc含有Respository注解 --dependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion5.2.10.RELEASE/version/dependency
/dependencies1.2 依赖管理
依赖传递
A引入BB引入C那么A也引入了C这就是依赖的传递性
直接依赖A引入BB是A的直接依赖间接依赖A引入BB引入CC是A的间接依赖
依赖冲突
项目引入了同一个依赖的不同版本
路径最短A和B同时依赖了X依赖路径最短的会被使用路径相同时在前者优先依赖路径相同在pom中先导入依赖版本被使用
可选依赖
!-- maven_pojo实体类模块 --
dependencygroupIdorg.example/groupIdartifactIdmaven_pojo/artifactIdversion1.0-SNAPSHOT/versionoptionaltrue/optional
/dependency设置optional为true对外隐藏当前所依赖的资源该依赖只在当前模块中使用 排除依赖 模块A引入模块B解决依赖冲突时可选依赖是从模块B入手排除依赖是从模块A入手 !-- maven_dao实体类模块 --
dependencygroupIdorg.example/groupIdartifactIdmaven_dao/artifactIdversion1.0-SNAPSHOT/versionexclusionsexclusiongroupIdorg.example/groupIdartifactIdmaven_pojo/artifactId/exclusion/exclusions
/dependencyspringmvc_ssm中通过在 exclusion在maven_dao中排除掉maven_pojo中的依赖
依赖冲突问题排查 IDEA排查推荐 打印所有依赖的依赖树 mvn dependency:tree
# 可以将依赖树输出到文件中
mvn -Dverbose dependency:tree -DoutputE://depTree.txt2. 聚合和继承
聚合用于快速构建项目对项目进行管理继承用于快速配置和管理子项目中所使用jar包的版本聚合与继承均属于设计型模块并无实际的模块内容
2.1 聚合
概述
聚合出现背景
前面学习的分模块开发流程 创建模块 – install到本地仓库 – 引入模块 存在的问题 每个创建模块必须 install模块的任意修改都需要重新 install 一次假设对ssm_pojo进行了修改那么所有引用它的项目都需要重新编译一次可能出现遗漏的项目未编译
聚合就是为了解决上述问题产生的 聚合的思想通过一个只有pom.xml的空项目来管理所有的模块进行自动 install 和 对项目的重新编译 概述
聚合将多个模块组织成一个整体同时进行项目构建的过程称为聚合聚合工程通常是一个不具有业务功能的空工程有且仅有一个pom文件作用使用聚合工程可以将多个工程编组通过对聚合工程进行构建实现对所包含的模块进行同步构建 当工程中某个模块发生更新变更时必须保障工程中与已更新模块关联的模块同步更新此时可以使用聚合工程来解决批量模块同步构建的问题。
聚合实现步骤
步骤1创建一个空的maven项目 maven_01_parent 使用01这样的编号更加直观之前的maven项目也可以改为 maven_02_pojo maven_03_dao 步骤2在pom.xml中设置打包方式为pom
packagingpom/packaging默认打包方式jarweb项目打包方式war聚合工程打包方式pom
步骤3pom.xml添加所要管理的项目
?xml version1.0 encodingUTF-8?
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.xsdmodelVersion4.0.0/modelVersiongroupIdorg.example/groupIdartifactIdmaven_01_parent/artifactIdversion1.0-SNAPSHOT/versionpackagingpom/packaging!-- 设置管理的模块名称 --modulesmodule../springmvc_ssm/modulemodule../maven_pojo/modulemodule../maven_dao/module/modules
/project步骤4使用聚合统一管理项目
对 maven_01_parent 进行 compile它会将包括自身在内的4个模块一起编译 不管pom.xml添加module的顺序如何compile都会自动根据依赖关系来决定先后的构建关系
2.2 继承 dependencyManagement
继承是用来解决重复依赖的问题 简化配置 减少版本冲突
步骤1在子工程中的pom.xml中配置parent标签
父工程一般为聚合工程即maven_01_parent于是在子工程 springmvc_ssm、maven_pojo、maven_dao 中作如下配置
!-- 配置当前工程继承自parent工程 --
parentgroupIdorg.example/groupIdartifactIdmaven_01_parent/artifactIdversion1.0-SNAPSHOT/versionrelativePath../maven_01_parent/pom.xml/relativePath
/parent步骤2优化子项目共有依赖导入问题
将子项目共同使用的jar包都抽取出来维护在父项目的pom.xml中 删除子项目中被抽取的jar包
dependencies!-- mvc相关 --!-- javax.servlet-api --dependencygroupIdjavax.servlet/groupIdartifactIdjavax.servlet-api/artifactIdversion3.1.0/versionscopeprovided/scope/dependency!-- spring-webmvc --dependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion5.2.10.RELEASE/version/dependency!-- jackson-databind --dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.9.0/version/dependency!-- mybatis相关 --!-- mysql-connector-java --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.46/version/dependency!-- spring-jdbc --dependencygroupIdorg.springframework/groupIdartifactIdspring-jdbc/artifactIdversion5.2.10.RELEASE/version/dependency!-- druid --dependencygroupIdcom.alibaba/groupIdartifactIddruid/artifactIdversion1.1.16/version/dependency!-- mybatis --dependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.5.6/version/dependency!-- mybatis-spring --dependencygroupIdorg.mybatis/groupIdartifactIdmybatis-spring/artifactIdversion1.3.0/version/dependency!-- 测试相关 --!-- spring-test --dependencygroupIdorg.springframework/groupIdartifactIdspring-test/artifactIdversion5.2.10.RELEASE/version/dependency!-- junit --dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/versionscopetest/scope/dependency
/dependencies步骤3优化子项目依赖版本问题
上述设置会导致子项目多出很多不需要的依赖 例如 maven_domain 模块不需要引入任何依赖但配置父项目后就包括了父项目中的全部依赖
可以通过dependencyManagemen来优化管理以依赖 junit 为例 在父工程中删除 junit 依赖同时添加如下依赖管理 !-- 定义依赖管理 --
dependencyManagementdependencies!-- junit --dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/versionscopetest/scope/dependency/dependencies
/dependencyManagement在需要用到 junit 的子项目中引入依赖 !-- junit --
dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdscopetest/scope
/dependency注意子项目中引入依赖时不再需要写 version从而实现统一依赖版本
3. 属性管理
3.1 依赖版本属性管理
需求希望将所有版本为5.2.10.RELEASE的依赖改为5.1.9.RELEASE
手动修改每次修改多个容易遗漏方案将版本号抽取为一个参数
步骤1父工程中定义属性
!-- 定义属性 --
propertiesspring.version5.2.10.RELEASE/spring.versionjunit.version4.12/junit.version
/properties步骤2修改依赖的version
!-- spring-webmvc --
dependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion${spring.version}/version
/dependency
!-- spring-jdbc --
dependencygroupIdorg.springframework/groupIdartifactIdspring-jdbc/artifactIdversion${spring.version}/version
/dependency
!-- spring-test --
dependencygroupIdorg.springframework/groupIdartifactIdspring-test/artifactIdversion${spring.version}/version
/dependency3.2 配置文件属性管理了解
需求在之前的springmvc_ssm项目中有一个jdbc.properties的配置文件里面定义了driver, url, username, password 这4个属性 现在希望通过maven_01_parent来管理jdbc.properties里面的属性值
步骤1父工程定义属性
!-- maven_01_parent中定义属性 --
properties...jdbc.urljdbc:mysql://localhost:3306/ssm_db?useSSLfalseamp;useServerPrepStmtstrue/jdbc.url
/properties步骤2设置maven过滤文件范围
!-- maven_01_parent中 --
buildresourcesresource!-- Maven在默认情况下是从当前项目的 src\main\resources 下读取文件进行打包${project.basedir}: 当前项目所在目录子项目继承了父项目相当于所有的子项目都添加了资源目录的过滤 --directory${project.basedir}/src/main/resources/directory!-- 设置能够解析${}默认是false --filteringtrue/filtering/resource/resources
/build说明
directory../springmvc_ssm/src/main/resources/directory 只管理springmvc_ssm里面的resources
directory${project.basedir}/src/main/resources/directory 管理所有模块的resources
如果希望只管理某几个子项目可以写多个resource标签步骤3jdbc.properties文件中引用属性
# 子模块中
jdbc.drivercom.mysql.jdbc.Driver
jdbc.url${jdbc.url}
jdbc.usernameroot
jdbc.password123456刷新maven可以看到项目结构的变化
步骤4测试是否生效
install命令将springmvc_ssm打成war包在本地仓库找到对应的war包 在路径 springmvc_ssm-1.0-SNAPSHOT.war\WEB-INF\classes 中打开生成的jdbc.properties可以看到 jdbc.url 的值已经被添加 运行项目正常执行
注意
如果缺乏web.xml文件打包时可能报错Error assembling WAR: webxml attribute is required 可以通过将web.xml添加上去解决也可以通过以下命名忽略web.xml的检查
buildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-war-plugin/artifactIdversion3.2.3/versionconfigurationfailOnMissingWebXmlfalse/failOnMissingWebXml/configuration/plugin/plugins
/build3.3 Maven中的属性了解 查看属性在cmd窗口中输入
mvn help:system #查看所有属性在程序中使用某个属性只需要
${java.runtime.name}3.4 版本说明
在jar包的版本定义中有两个工程版本用的比较多:
SNAPSHOT快照版本 项目开发过程中临时输出的版本称为快照版本快照版本会随着开发的进展不断更新 RELEASE发布版本 项目开发到一定阶段里程碑后向团队外部发布较为稳定的版本这种版本所对应的构件文件是稳定的即便进行功能的后续开发也不会改变当前发布版本内容这种版本称为发布版本
此外还经常能看到一些发布版本:
alpha版内测版bug多不稳定内部版本不断添加新功能beta版公测版不稳定(比alpha稳定些)bug相对较多不断添加新功能纯数字版
4. 多环境配置与应用
4.1 多环境开发 在maven_01_parent里面配置多环境 需要删除之前在属性里配置的jdbc.url然后再加入以下配置
!-- 配置多环境 --
profiles!-- 1. 开发环境 --profileidenv_dep/idpropertiesjdbc.urljdbc:mysql://127.1.1.1:3306/ssm_db?useSSLfalseamp;useServerPrepStmtstrue/jdbc.url/properties!-- 设定是否为默认启动的环境 --activationactiveByDefaulttrue/activeByDefault/activation/profile!-- 2. 生产环境 --profileidenv_pro/idpropertiesjdbc.urljdbc:mysql://127.2.2.1:3306/ssm_db?useSSLfalseamp;useServerPrepStmtstrue/jdbc.url/properties/profile!-- 3. 测试环境 --profileidenv_test/idpropertiesjdbc.urljdbc:mysql://127.3.3.1:3306/ssm_db?useSSLfalseamp;useServerPrepStmtstrue/jdbc.url/properties/profile
/profiles上述设定默认的启动环境是开发环境
也可以通过以下命令动态指定环境
mvn install -P env_test4.2 跳过测试
如果在测试环境使用install那么所有的test都将依次执行 当部分模块还没有开发完毕但需要对已经开发完毕的打包时就无法完成。此时需要跳过测试
应用场景
功能更新中并且没有开发完毕快速打包
方法一IDEA工具实现跳过测试 此时执行install由于跳过了测试程序里的 BookServiceTest 不会被执行
一次性跳过全部测试
方法二配置插件实现跳过测试
buildpluginsplugin!-- 内部插件无需提供groupId --artifactIdmaven-surefire-plugin/artifactIdversion2.12.4/versionconfiguration!-- skipTests设置成true 直接跳过所有测试 --skipTestsfalse/skipTests!-- 排除掉不参与测试的内容如BookServiceTest --excludesexclude**/BookServiceTest.java/exclude/excludes/configuration/plugin/plugins
/build方法三命令行跳过测试
mvn package -D skipTests注意cmd要在pom.xml所在目录下进行执行
5. 私服
ABC合作开发项目如果B想要使用A开发的模块就需要用到私服
中央仓库不允许私人上次jar包可以搭建一个类似中央仓库的私服A将自己开发的模块上传到私服B只需要联网下载即可使用
私服公司内部搭建的用于存储Maven资源的服务器
远程仓库/中央仓库Maven开发团队维护的用于存储Maven资源的服务器
私服是一台独立的服务器用于解决团队内部的资源共享与资源同步问题搭建Maven私服的方式很多一种常见的方式是通过 Nexus
5.1 私服安装
步骤1下载和解压nexus 官网下载慢 下载地址https://help.sonatype.com/repomanager3/download 百度云盘下载 链接https://pan.baidu.com/s/1nFgGeDtSL-e0np3BpB7YRQ 提取码ar7m 安装 下载后解压即可安装完毕 说明 nexus文件夹中的nexus.vmoptions中定义了sonatyoe-work的地址用到了后者的一些配置因此这两个文件夹都需要保留
步骤2启动nexus 在bin目录下打开cmd执行
nexus.exe /run nexus即可启动
步骤3访问nexus服务器
访问 http://localhost:8081 首次使用需要点击 sign up根据提示到指定位置找到密码然后登录 登录成功后根据提示进行设置 报错问题
这里登录之后可能会报一个java.net.UnknownHostException: sonatype-download.global.ssl.fastly.net 导致结果能正常使用nexus基础功能但无法正常关闭 可能的原因官网进不去导致的 暂时的解决方法关闭拓展 步骤4关闭nexus 关闭这里常无法关闭建议先关闭页面再关闭nexus 方法一ctrlc 方法二命令行 在nexus.exe路径下另启一个cmd窗口输入以下命令 nexus.exe /stop nexus方法三点 x 强制关闭不推荐
步骤5 修改配置
修改基础配置信息 安装路径下etc目录中nexus-default.properties文件保存有nexus基础配置信息例如默认访问端口 修改服务器运行配置信息 安装路径下bin目录中nexus.vmoptions文件保存有nexus服务器启动对应的配置信息例如默认占用内存空间
5.2 私服中的仓库分类 私服里有多个仓库这些仓库分为三大类 宿主仓库hosted 保存无法从中央仓库获取的资源 自主研发第三方非开源项目比如Oracle因为是付费产品所以中央仓库没有 代理仓库proxy 每次去中央仓库下载速度慢代理仓库可用于专门存储从远程中央仓库下载的第三方jar包 代理远程仓库通过nexus访问其他公共仓库例如中央仓库 仓库组group 私服里有宿主仓库有存放SNAPSHOT的代理仓库有存放RELEASE类型的代理仓库…… 为了设置获取资源时在哪个仓库中获取可以将所有的仓库编成一个组只需要访问仓库组去获取资源 将若干个仓库组成一个群组简化配置仓库组不能保存资源属于设计型仓库 之前的web项目实际上用的是阿里云私服 5.3 本地仓库访问私服配置
步骤1私服上配置仓库
需求创建两个仓库personal-snapshot 和 personal-release
创建新的仓库 仓库类型选择maven2 (hosted)设置仓库名称和存储的jar包类型 创建好personal-snapshot后同样的方式再创建一个personal-release只将Version policy改为Release即可 步骤2配置本地仓库对私服的访问权限 在配置文件setting.xml中配置servers
servers!-- 配置访问私服personal_snapshot的权限 --serveridpersonal-snapshot/idusernameadmin/usernamepassword123456/password/server!-- 配置访问私服personal_release的权限 --serveridpersonal-release/idusernameadmin/usernamepassword123456/password/server
/serversid私服中仓库的名称
步骤3配置私服的访问路径
在配置访问路径前需要先将前面新创建的仓库加入到仓库组中使仓库组能够管理它们 进入maven-public仓库组添加仓库 在配置文件setting.xml中配置mirrors
mirrors!-- 配置私服的访问路径 --mirroridmaven-public/idmirrorOf*/mirrorOf !-- *表示所有jar包都通过私服获取 --urlhttp://localhost:8081/repository/maven-public//url/mirror!-- 之前使用的是阿里云私服这里将其注释掉mirroridalimaven/idnamealiyun.maven/nameurlhttps://maven.aliyun.com/repository/public/urlmirrorOfcentral/mirrorOf/mirror--
/mirrors5.4 私服资源上传和下载
步骤1在项目maven-01-parent的pom.xml中配置
!-- 配置当前工程保存在私服中的具体位置 --
distributionManagementrepositoryidpersonal-release/idurlhttp://localhost:8081/repository/personal-release//url/repositorysnapshotRepositoryidpersonal-snapshot/idurlhttp://localhost:8081/repository/personal-snapshot//url/snapshotRepository
/distributionManagement要发布的项目都需要配置distributionManagement标签要么在自己的pom.xml中配置要么在其父项目中配置然后子项目中继承父项目即可
步骤2deploy 上传到私服 注意此时已经更改为从私服获取jar当第一次上传时由于私服的代理仓库maven-central为空必然花费一定时间去下载 maven-01-parent 里面用到的所有jar包到私服中去
步骤3查看私服中仓库 personal-release 和 personal-snapshot 可以看到personal-snapshot里面已经有上传的项目了然而personal-release里面依然为空 这是因为maven_01_parent的pom.xml里面设置了当前项目为version1.0-SNAPSHOT/version
groupIdorg.example/groupId
artifactIdmaven_01_parent/artifactId
version1.0-SNAPSHOT/version
packagingpom/packaging如果将其改为version1.0-RELEASE/version即可上传到仓库personal-release里面去 注意子工程也要修改为RELEASE否则子项目会被发布到personal-snapshot当中去
步骤4非必要配置私服去阿里云中下载依赖
如果私服中没有对应的jar会去中央仓库下载如果速度可能太慢可以配置让私服去阿里云中下载依赖 如果需要修改可改为https://maven.aliyun.com/repository/public 下载资源同之前一样直接在pom.xml里面引入坐标即可
