一.需求

如何将一个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不区分表名大小写:

  1. 用root登录,修改 /etc/my.cnf;
  2. 在[mysqld]节点下,加入一行: lower_case_table_names=1
  3. 重启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,下载速度比较慢.解决方案有两种:

  1. 在创建Maven项目时加上 archetypeCatalog=internal 参数
  2. 在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栽坑录的更多相关文章

  1. 创建maven工程时总是带有后缀名Maven Webapp解决办法

    做项目时突然遇到了一个新问题,从前没有的,今天不知怎么了突然有了这个问题,maven创建web项目时多出了后缀名maven webapp ,很碍眼,而且访问路径还得删了,这个后缀名才可访问,所以找了答 ...

  2. MyEclipse10建立Maven Webapp项目并通过git传到GitHub

    先创建Maven Webapp项目 图文详解MyEclipse中新建Maven webapp项目的步骤(很详细) 在web项目的路径中右键(前提是你机器已经装了git)“Git Init Here”, ...

  3. 于Heroku平台部署maven webapp(java web)工程

    眼下,需要Heroku上述部署java web工程,该项目必须使用maven管理 一:新maven webapp工程 编者pom.xml档,增加下面的配置为例, <project xmlns=& ...

  4. webapp填坑记录[更新中]

    网上也有许多的 webapp 填坑记录了,这几个月,我在公司正好也做了2个,碰到了一些问题,所以我在这里记录一下我所碰到的问题: meta 头部声明在开发的时候,刚刚创建 HTML 文件,再使用浏览器 ...

  5. 在eclipse中创建maven webapp项目时弹出错误-解决办法

    在eclipse中创建maven webapp项目时报错: Could not resolve archetype org.apache.maven.archetypes:maven-archetyp ...

  6. webapp填坑记录

    网上也有许多的 webapp 填坑记录了,这几个月,我在公司正好也做了2个,碰到了一些问题,所以我在这里记录一下我所碰到的问题: meta 头部声明在开发的时候,刚刚创建 HTML 文件,再使用浏览器 ...

  7. 参照实验室这边案例做一个简单的maven webapp项目

    流程 : 首先写出一个简单的前端页面. 之后写配置文件.dao.domain等等,注意这里可以使用generator进行自动配置 实验室这边配置文件如下: 其实主要的配置文件就分为6“个”. appl ...

  8. STS 创建 Maven 项目填坑

    用 STS 创建 Maven 项目并不复杂,只是其中有一些坑在里面,我在解决这些坑的时候发现很多人都遇到了相同的问题,因此把创建的步骤记录在这里.所有的步骤不外乎就是一些套路,并没有什么复杂的地方,只 ...

  9. jenkins集群节点构建maven(几乎是坑最多的)

    业务量变大时,单台的jenkins进行自动化构建部署,就显得没那么灵活,jenkins的集群并非像web服务器.mysql集群那样,jenkins的集群无需在额外的主机安装jenkins,但是用于ja ...

随机推荐

  1. 基于trie树做一个ac自动机

    基于trie树做一个ac自动机 #!/usr/bin/python # -*- coding: utf-8 -*- class Node: def __init__(self): self.value ...

  2. Both must set "document.domain" to the same value to allow access.

    有两个域名指向我的网站,其中一个域名访问我的网站的话就可以看到日期控件 另一个域名访问我的网站不能看到日期控件, 在EF中使用日期控件,浏览器审查元素后看到,报这个错误“Both must set & ...

  3. spring事务概念理解

    1.数据并发问题 脏读 A事务读取B事务尚未提交的更新数据,并在此数据的基础上操作.如果B事务回滚,则A事务读取的数据就是错误的.即读取了脏数据或者错误数据. 不可重复组 A事务先后读取了B事务提交[ ...

  4. 分享一些学习资料-大量PDF电子书

    分享一些学习用的电子书籍,给那些喜欢看书而不一定有机会买书的童鞋. 反对积分下载,提倡自由分享. 分享地址: http://pan.baidu.com/s/1qWK5V0g 提取密码:   np33 ...

  5. String 中去掉空格

    JAVA中去掉空格 1. String.trim() trim()是去掉首尾空格 2.str.replace(" ", ""); 去掉所有空格,包括首尾.中间 ...

  6. 遍历map的四种方法

    方法一  在for-each循环中使用entries来遍历这是最常见的并且在大多数情况下也是最可取的遍历方式.在键值都需要时使用.注意:for-each循环在Java 5中被引入所以该方法只能应用于j ...

  7. 微信小程序社区上线

    微信小程序公测了! 从首次得到微信小程序发布的消息开始,小木和Michael就进入了紧急备战状态. 除了要快速学通微信小程序开发之外,我们还做了这些工作: 1.录制全球首套微信小程序实战项目类视频教程 ...

  8. jquery手风琴

    --js $(document).ready(function(){ //Set default open/close settings$('.acc_container').hide(); //Hi ...

  9. Microsoft Dynamics CRM 2013 的相关更新 2013-12

        DCRM 2013已经发布一段时间了,很多同学都在学习实践中.     截至目前,已经有了一些相关的更新,具体内容,可以参见web Page:http://blogs.msdn.com/b/c ...

  10. android 自定义控件——(二)圆形按钮,圆形View

    ----------------------------------↓↓圆形按钮,圆形View(源代码下有属性解释)↓↓---------------------------------------- ...