maven webapp栽坑录
一.需求
如何将一个java web项目传给别人?放到github上.要想放到github上,就要学会git,markdown和maven.像那些jar包是不鼓励传到github上的,应该尽量把源文件等文本文件传上去,所以要把依赖写在pom.xml中.要让别人能够重复你的工作,使用git,maven这套体系,别人只需要clone一下,mvn package一下,从target目录中把war包取出来,略微配置一下就可以用了.这个过程多么简洁美好.所以以后建项目应该尽量脱离IDE,尽量使用maven,gradle等构建工具.它们能使程序便于移植.
二.Cannot change version of project facet Dynamic Web Module to 3.1.
这是一种类似破解软件的解决方案,打开window/show view/navigator/.settings/org.eclipse.wst.common.project.facet.core.xml,将其中的jst.web改为3.1.至于到底改成哪个版本,这需要跟web.xml保持一致,在web.xml中是这么定义webapp版本的
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
实际上,这种方法并没有从根本上解决问题,这个问题好像是eclipse的bug.
三.maven compile
maven会使用maven-compiler-plugin来进行编译,这个插件默认的source(源文件API版本)和target(生成的jar包的运行环境)都是1.5,所以就需要手动更改一下这个插件的一些属性.
<project>
[...]
<build>
[...]
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
[...]
</build>
[...]
</project>
四.archetype-webapp
在eclipse中新建maven项目,选择archtype为webapp类型.如果报错说maven插件有问题,
Could not calculate build plan: Plugin org.apache.maven.plugins:maven-war-plugin:2.1.1 or one of
解决方案:进入~/.m2/org/apache/maven/plugins目录,将其下面的文件全部删除.maven自己会重新下载这些插件,下载的新插件就比较正常.
生成的项目目录结构如下:
├─src
│ ├─main
│ │ ├─java
│ │ ├─resources
│ │ └─webapp
│ │ └─WEB-INF
│ └─test
│ └─java
└─target
五.写完pom.xml之后
写完pom.xml之后,就开始下载一些库了,会发现在eclipse中下载特别慢.解决方案是,打开工程目录,手动执行mvn package命令,这是就会在控制台下下载库,速度比较快.
七.mvn package
在eclipse里面是buildpath-library添加了server runtime之tomcat依赖,但这件事是依赖eclipse的,maven可不知道关于tomcat的信息.执行mvn package会报错找不到javax.servlet等一些库.
实际上,tomcat也不过是一对jar包,它也是一种依赖,需要在pom.xml中添加dependency
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-catalina</artifactId>
<version>8.5.6</version>
</dependency>
这样一来,就可以mvn package,去target目录下寻找war包了.随便一改pom.xml中的tomcat版本就可以生成不同版本tomcat下的war包,大大增强了程序的可移植性.
八.mysql数据库表名的大小写问题
Linux下的MySQL默认是区分表名大小写的,通过如下设置,可以让MySQL不区分表名大小写:
- 用root登录,修改 /etc/my.cnf;
- 在[mysqld]节点下,加入一行: lower_case_table_names=1
- 重启MySQL即可;
其中 lower_case_table_names=1 参数缺省地在 Windows 中这个选项为 1,在Unix中为0.
九.mysql时区问题
The server time zone value 'AEST' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
这个问题是mysql-connector 6.x出现的问题,换成老版本就不存在这个问题了.另一种解决方案是:
jdbc:mysql://localhost:3306/test?serverTimezone=America/New_York,时区可以改成中国的serverTimezone=Asia/Shanghai.
想要查看有哪些时区,运行如下代码:
import java.util.Arrays;
import java.util.TimeZone;
public class Main {
public static void main(String[] args) {
Arrays.asList(TimeZone.getAvailableIDs()).forEach(System.out::println);
}
}
十.在eclipse中建立web项目属性常常需要更改的地方
1.项目右键属性>facet>添加dynamyc web
eclipse中可以新建各种类型的项目,如dynamic web,static web,maven project,这些项目其实就相当于模板.可以通过facet来给项目添加一些属性集.
2.deployment assembly,部署时需要设置那些文件,需要把哪些库导出
3.compiler设置一下compliance
4.build path添加library>server runtime
十一.在intelliJ中新建maven archetype-webapp速度奇慢
这是因为默认情况下,都去服务器上下载archetype,下载速度比较慢.解决方案有两种:
- 在创建Maven项目时加上 archetypeCatalog=internal 参数
- 在maven的VM Options加上-DarchetypeCatalog=internal参数
这个问题解释如下
archetypeCatalog表示插件使用的archetype元数据,不加这个参数时默认为remote,local,即中央仓库archetype元数据,由于中央仓库的archetype太多了,所以导致很慢,指定internal来表示仅使用内部元数据
第一种方法只能在这一次生效,第二种方法能永远生效.
十二.eclipse中的tomcat服务器webapp的位置
$WORKSPACE\.metadata\.plugins\org.eclipse.wst.server.core
当遇到部署问题时,可能是因为tomcat过去的部署影响了现在的正常部署.
- 解决方案一,server视图下将tomcat clean一下.
- 解决方案二,进入上述目录清空一下这个文件夹
十三.maven缺少包,本地已经缓存一部分,需要强制更新
mvn clean compile install -e -U
总结
对于以上这种bug,通过它们的解决方案可以找到一些规律:
- 清空一下
- 重启一下
- 属性改一下
- 把异常复制粘贴,百度一下,stackOverflow上的通常是正解
像这些bug,有的是历史遗留问题,有的是各大组织代码不协调不一致问题,有的问题是默认配置太坑不够人性化.这些问题本身都是很没意义的,与其研究它们,不如学些别的有用的知识.然而,如果你能快速解决这些细节犄角旮旯的小问题,你就会被人称为"厉害".
老子曰:盖闻善摄生者,路行不遇兕虎,入军不被甲兵;兕无所投其角,虎无所措其爪,兵无所容其刃。夫何故?以其无死地。
但愿我能时时刻刻走在正确的平坦的大路上.
maven webapp栽坑录的更多相关文章
- 创建maven工程时总是带有后缀名Maven Webapp解决办法
做项目时突然遇到了一个新问题,从前没有的,今天不知怎么了突然有了这个问题,maven创建web项目时多出了后缀名maven webapp ,很碍眼,而且访问路径还得删了,这个后缀名才可访问,所以找了答 ...
- MyEclipse10建立Maven Webapp项目并通过git传到GitHub
先创建Maven Webapp项目 图文详解MyEclipse中新建Maven webapp项目的步骤(很详细) 在web项目的路径中右键(前提是你机器已经装了git)“Git Init Here”, ...
- 于Heroku平台部署maven webapp(java web)工程
眼下,需要Heroku上述部署java web工程,该项目必须使用maven管理 一:新maven webapp工程 编者pom.xml档,增加下面的配置为例, <project xmlns=& ...
- webapp填坑记录[更新中]
网上也有许多的 webapp 填坑记录了,这几个月,我在公司正好也做了2个,碰到了一些问题,所以我在这里记录一下我所碰到的问题: meta 头部声明在开发的时候,刚刚创建 HTML 文件,再使用浏览器 ...
- 在eclipse中创建maven webapp项目时弹出错误-解决办法
在eclipse中创建maven webapp项目时报错: Could not resolve archetype org.apache.maven.archetypes:maven-archetyp ...
- webapp填坑记录
网上也有许多的 webapp 填坑记录了,这几个月,我在公司正好也做了2个,碰到了一些问题,所以我在这里记录一下我所碰到的问题: meta 头部声明在开发的时候,刚刚创建 HTML 文件,再使用浏览器 ...
- 参照实验室这边案例做一个简单的maven webapp项目
流程 : 首先写出一个简单的前端页面. 之后写配置文件.dao.domain等等,注意这里可以使用generator进行自动配置 实验室这边配置文件如下: 其实主要的配置文件就分为6“个”. appl ...
- STS 创建 Maven 项目填坑
用 STS 创建 Maven 项目并不复杂,只是其中有一些坑在里面,我在解决这些坑的时候发现很多人都遇到了相同的问题,因此把创建的步骤记录在这里.所有的步骤不外乎就是一些套路,并没有什么复杂的地方,只 ...
- jenkins集群节点构建maven(几乎是坑最多的)
业务量变大时,单台的jenkins进行自动化构建部署,就显得没那么灵活,jenkins的集群并非像web服务器.mysql集群那样,jenkins的集群无需在额外的主机安装jenkins,但是用于ja ...
随机推荐
- 「译」JUnit 5 系列:架构体系
原文地址:http://blog.codefx.org/design/architecture/junit-5-architecture/ 原文日期:29, Mar, 2016 译文首发:Linesh ...
- WinForm 对Web Api 增 册 改 查 的基本操作
WebApi代码: public class ValuesController : ApiController { Entities db=new Entities(); // GET api/val ...
- jquery获取table的行数、列数
$("#grd").find("tr").length; //行数 $("#grd").find("tr").find( ...
- js正则表达式校验正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- EXCEL中多级分类汇总空白字段填充
使用场景,多级分类汇总后,在汇总的字段中显示空白,这样对我们直接取值做表带来十分不更(假像有5000条记录,1000条汇总项) 相关技术,INDIRECT函数,单元格定位功能. 在数据区域外任意一个单 ...
- Sublime Text 3 支持的热门插件推荐
SublimeText是一款非常精巧的文本编辑器,适合编写代码.做笔记.写文章.它用户界面十分整洁,功能非同凡响,性能快得出奇.这些非常棒的特性 包括任意跳转(Goto Anything).多重选择( ...
- 隔天开启tomcat spring报错
严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderLis ...
- CentOS 防火墙开放特定端口
iptables是linux下的防火墙,同时也是服务名称. service iptables status 查看防火墙状态 service iptables start ...
- AJAX实现简单的注册页面异步请求
p { margin: 0px; padding: 0px } AJAX简介 (1)AJAX = 异步 JavaScript 和 XML. (2)AJAX 是一种用于创建快速动态网页的技术. (3)通 ...
- android 帧动画
首先在res/drawable/name1.xml/定义一组图片集合: <?xml version="1.0" encoding="utf-8"?> ...