怎么运行利用maven搭建的分布式系统
一、准备条件
1、安装下载jdk
这里以jdk16为例
2、安装eclipse
到eclipse官网下载 Eclipse IDE for Java EE Developers版本的eclipse
http://wwweclipseorg/
3、安装tomcat6
4、安装maven
5、安装eclipse maven插件
这里以在线安装的方式,安装地址为:http://m2eclipsesonatypeorg/sites/m2e
二、配置
1、在eclipse中配置jdk安装位置,tomcat安装位置,maven安装位置,为tomcat指定jdk
在此不详述
2、在eclipse中新建一个maven项目
2-1、新建一个maven项目,选择create a simple project
2-2、
点击Next,进入下一个
在此窗口下填写group id,artifact id,可以随便写一个,在Packaging中选择war类型
点击下一步,在以下步骤中一直next,直到最后点击finish
2-3、
右击项目,选择properites,打开以下对话框
在此界面右边导航栏选中 Project Facets,点击超链接Convert Faceted from,进入以下界面
2-4、
在Configuration中选择custom
在下方的Project Facet的Dynamic Web Module中选择25版本
在java中选择16
注意:这些选择可能根据tomcat版本变化而变化,就tomcat6来说选择以上选项是可以的
此步骤非常重要,只有操作了此步骤,右侧导航栏才会有Deployment Assembly 链接
2-5
接下来点击右边面板的Runtime面板
可以看到下方中有tomcat,如果没有,则点击下面的new,新建一个,新建后选中复选框,然后apply,ok
2-6、
在项目属性面板中的作部导航栏选择Deployment Assembly选项,在右边Web Deployment Assembly
如果看到以下的图示,那么配置就完成了
这里解释一下以上文件夹
src/main/java
该文件夹是存放java源码的,发布项目时会将该文件夹下的class文件复制到WEB-INF/classes目录下
src/main/resources
该文件夹一般放置配置文件,如xml,properties文件等,其实也可以放置java文件,只是一种约定罢了,发布项目时
该文件夹的文件也会复制到WEB-INF/class中
至于test,有些类似,只不过这些是测试代码,用过maven的应该会知道这一点
src/main/webapp
maven中约定是把该文件夹当成是普通web项目中的WebRoot目录,看看右边的deploy path,发布项目时
是发布到根目录/了。该文件夹在建成的maven web项目中,在其内尚没有WEB-INF/classes,WEB-INF/lib文件夹
需要手工建立
注意:有时候由于某种原因,你打开的以上视图可能是下面这样的,
其实,这样也是可以运行项目,调试项目的,但是,如果你运行该项目的pomxml文件时就会报错,为什么呢,
因为maven会把src/main/webapp文件当成是普通web项目中的WebRoot,而该你的配置里面(上图)却
没有配置,故而会报错。
怎么办呢,分2步
1、选中 WebContent,remove掉它
2、新建一个,Source文件夹为src/main/webapp,deploy path为 /
点击apply,ok即可。
最后还必须将maven库映射到WEB-INF/lib下,具体操作如下,点击add按钮,进入下图
选择java build path entries,点击next,进入下图
选择Maven Dependencies,点击finish,最终如下图
如果不把Maven Dependencies映射到WEB-INF/lib,则在服务端如servlet中用到maven中的库时,则会提示找不到类(虽然你在编写代码时没有红xx,但是运行程序时却会找不到类)
三、运行
在eclipse的server视图中添加你的项目,右键选择的tomcat服务器,选择add and remove,添加刚才新建的web工程,效果如下图
在src/main/java中建立一个servlet,在src/main/webapp中建立一个jsp
启动tomcat,访问你的servlet和jsp,在servlet中你可以定断点,可以调试。
需要。tomcat部署就是将项目拷贝到maven服务器,Tomcat启动时将自动加载应用。启动时还需要maven环境的支持才可以顺利启动。所以需要安装。Maven项目对象模型,可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。
一、项目打包:
1更改项目的启动方式
使用webxml运行应用程序,指向Application,最后启动springboot(继承SpringBootServletInitialier,重写函数)
public class WarStartApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return buildersources(Applicationclass);
}
}
2更改properties配置信息
修改相关的地址和配置信息
PS: 可采用STS自带的动态配置系统(多配置文件)进行开发环境和生产环境的隔离。
3更改api接口层配置文件(pomxml)
1)进行war包配置
<packaging>war</packaging>
2)war包打包所需依赖项
<dependency>
<groupId>javaxservlet</groupId>
<artifactId>javaxservlet-api</artifactId>
<scope>provided</scope>
</dependency>
4执行打包操作
1)maven clean清除之前的打包
2)maven install进行打包操作
二、将war包文件上传至服务器
1在api层的target文件夹下找到新生成的项目war包
2使用rzsz工具上传war包(rz)
三、使用Tomcat进行项目开放
1进行 Tomcat的环境部署
2将war包拷贝到tomcat的webapps文件夹下
3cd至bin文件夹下(tomcat会自动解压项目war包并进行项目部署)
使用startupsh进行tomcat启动
使用shutdownsh进行tomcat关闭
classpath:是从类路径里查找配置文件,也就是/WEB-INF/classes目录下找SpringMVC-servletxml。
你写了classpath了,不会从web-info下找,而是去web-inf/classes下面找,所以找不到。
服务器(Tomcat)读取资源文件
方式一:采用流+Properties
当工程部署到Tomcat中时,按照上边方式,则会出现找不到该文件路径的异常。经搜索资料知道,Java工程打包部署到Tomcat中时,properties的路径变到顶层(classes下),这是由Maven工程结构决定的。由Maven构建的web工程,主代码放在src/main/java路径下,资源放在src/main/resources路径下,当构建为war包的时候,会将主代码和资源文件放置classes文件夹下,并且,此时读取文件需要采用流(stream)的方式读取,并通过JDK中Properties类加载,可以方便的获取到配置文件中的信息,如下。
采用Spring注解
如果工程中使用Spring,可以通过注解的方式获取配置信息,但需要将配置文件放到Spring配置文件中扫描后,才能将配置信息放入上下文,然后在程序中可以使用 @Value进行获取properties文件中的属性值。
采用Spring配置
也可以在Spring配置文件中读取属性值,赋予类成员变量。
一个基本的glassfish的配置如下:
<plugin>
<groupId>orgglassfishmavenplugin</groupId>
<artifactId>maven-glassfish-plugin</artifactId>
<version>22-SNAPSHOT</version>
<configuration>
<glassfishDirectory>${glassfishhome}</glassfishDirectory>
<user>${domainusername}</user>
<!-- <adminPassword>admin</adminPassword> -->
<passwordFile>${glassfishhome}/domains/domain1/master-password</passwordFile>
<debug>true</debug>
<echo>true</echo>
<domain>
<name>domain1</name>
<adminPort>4848</adminPort>
</domain>
<components>
<component>
<name>${projectartifactId}</name>
<artifact>${projectbuilddirectory}/${projectbuildfinalName}war</artifact>
</component>
</components>
</configuration>
</plugin>
使用glassfish必须要求自定义<glassfishDirectory>,<user><passwordFile>或者<adminPassword>,<domain><components><debug><echo>这几个标签,对于这几个标签解释如下:
<configuration>:定义
<glassfishDirectory>:glassfish_home的目录,可以通过在settingsxml profiles中设置或者在这里指定
<user>:用户名,glassfish安装后会自动新建了一个域,domain1,用户名默认是admin,也可以通过settingsxml profiles中设置或者在这里指定
<adminPassword>:用户名密码,这个跟<passwordFile>是互相冲突的,两者只能选1,使用这个标签则要明文输入管理员登录密码,而且在glassfish启动的时候会自动生成一个tmp的文件进行读取
<passwordFile>:密码文件,指定新建域的密码文件存放位置,以domain1来说密码位置上存在domain1的根目录下的master-password
<debug>:是否使用debug模式启动glassfish,使用debug模式启动可以查看中间使用的[Info]信息,可以跟echo一起使用
<echo>:是否以echo模式启动glassfish,使用echo模式启动则直接运行,除了最后出错信息跟一些必要的[Info]信息之外其余都不显示包括中间运行错误的信息
<domain>:域
<name>:域名,指定当前项目使用那个域启动,这个域是跟<user>,<passwordFile>的内容对应的
<adminPort>:控制台端口,一般是4848
<components>:组件,生成目录:
<component>组件
<name>:组件名称,一般默认使用project的artifactId,也就是project的文件名
<artifact>:生成指定文件的目录与文件类型,对于webapp的话则是webapp
有些时候私服访问需要密码,可以这么使用
servers 配置
用来下载和部署的仓库是用POM中的repositories和distributionManagement元素来定义的。但是某些配置例如username和password就不应该随着pomxml来分配了。这种类型的信息应该保存在构建服务器中的settingsxml中。
<settings >
<servers>
<server>
<id>server001</id>
<username>my_login</username>
<password>my_password</password>
<privateKey>${userhome}/ssh/id_dsa</privateKey>
<passphrase>some_passphrase</passphrase>
<filePermissions>664</filePermissions>
<directoryPermissions>775</directoryPermissions>
<configuration></configuration>
</server>
</servers>
</settings>
id:这是Server的ID(不是登录进来的user),与Maven想要连接上的repository/mirror中的id元素相匹配。
username,password:这两个元素成对出现,表示连接这个server需要验证username和password。
privateKey,passphrase:与前两个元素一样,这两个成对出现,分别指向了一个私钥(默认的是${userhome}/ssh/id_dsa)和一个passphrase。passphrase和password元素可能在将来被客观化,但是现在必须以文本形式在settingsxml中设置。
filePermissions,directoryPermissions:当一个仓库文件或者目录在部署阶段被创建的时候,就必须用到权限许可。他们合法的值是三个数字,就像nix中的文件权限,例如:664,775
注意:
如果你使用了一个私钥来登录server,那么password元素必须被省略,否则私钥将被忽视。
方法:
1基于artifactId准备路径,将artifactId连接到后面:org/testng/testng
2使用version准备路径,将version连接到后面:org/testng/testng/58
3将artifactId于version以分隔符连字号连接到后面:org/testng/testng/58/tesng-58
4判断如果构件有classifier,就要在 第4项 后增加 分隔符连字号 再加上 classifier,org/testng/testng/58/tesng-58-jdk5
5检查构件的extension,如果extension存在,则加上句点分隔符和extension,而extension是由packing决定的,org/testng/testng/58/tesng-58-jdk5jar
6、基于groupId准备路径,将句点分隔符转成路径分隔符,就是将 "" 转换成 "/" ; example: orgtestng --->org/testng参考资料
Maven详解之仓库------本地仓库、远程仓库研发管理[引用时间2017-12-28]
一、打开idea,查看左上方工具栏,依次点击File->New->Project。此时弹出一个窗口,在左边栏选择Maven,稍等一段时间加载之后,右侧会出现一列archetype。勾选Create from archtype,找到并选择orgapachemavenarchtypes:maven-archtype-webapp,点击Next。
二、填写这个maven项目的GroupId,ArtifactId,Version信息。这是标识maven项目的三维坐标。点击Next
三、这一步就很关键了。上面是maven的根目录、settingsxml文件和本地仓库的位置,这些不必过多理睬,路径也因人而异。下面的是一些属性,除了已有的6个,我们需要添加一个archetypeCatalog=internal。这个参数的意义是让这个maven项目的骨架不要到远程下载而是本地获取。如果你没加这个参数,那么项目创建可能在卡在downloading maven plugins继续点击Next
四、为项目命名,点击Finish,项目一瞬间就创建好了
五、查看项目的结构,可以发现,web应用该有的已经都有了。至此,maven web项目创建完毕,接下来看看如何进行编译打包部署。
六、直接在idea左下的Terminal终端输入mvn install,编译打包成功,显示BUILD SUCCESS字样。重新查看项目的目录,我们发现项目根目录下面多了target目录,该目录下也打出了war包。
七、将应用部署到tomcat服务器。这里采用两种部署的方法,可以任选一个。
方法一:
将上面提到的taget目录下的springwar包放到tomcat安装目录的webapps的目录下。使用命令行(cmd)切换到tomcat安装目录的bin目录下,执行startupbat脚本,执行之后tomcat会部署webapps目录下的应用war包。稍等应用部署完毕之后,打开浏览器,输入localhost:8080/spring,可以看到输出了Hello World!
0条评论