主要介绍JavaEE中Maven Web 项目的结构及其它几个小问题
先说下本篇随笔的目录。
1、介绍windows中环境变量Path与ClassPath的区别。
2、可能导致命令行运行javac编译成功,但 java命令 + 所要执行的类的类名 无效的原因。
3、介绍Maven项目的结构。
4、Eclipse中添加Jar包的两种方式Add Jars 与 Add External Jars 的区别。
5、Eclipse发布项目到Tomcat上可能导致Jar包丢失的原因。
一、windows中环境变量Path与ClassPath的区别。
Path变量:当你打开Windows的CMD(命令行窗口)时,若想执行一个exe文件,就需要先进入此exe文件所在的目录,之后再输入此exe文件的名称来执行此exe文件。
那么问题来了,为什么我们只要打开了CMD窗口,不论我们当前处在什么路径,输入java命令都会有对应的提示呢?(也就是并不需要进入到java.exe所在目录才能执行java.exe文件)(如下图)

我的Java.exe文件在C:\Program Files\Java\jdk1.8.0_20\bin目录下,也就是说虽然我现在的位置是D盘根目录,但是我输入了java命令,仍然执行了java.exe文件。这里面就是Path环境变量在起作用。

上面这张图片就是我电脑上Path环境变量的设置情况。其中有一个就是%JAVA_HOME%\bin,也就是我电脑上JDK安装目录下的bin目录,在这个bin目录下就有我们刚刚执行的java.exe文件。
当我们在CMD中输入一条命令时,比如上面的java命令,操作系统会在当前目录下查找是否有名字为java.exe的可执行文件,如果当前目录下没有找到,就会在环境变量Path中设置的路径下面去找,比如上面的%JAVA_HOME%\bin路径下,如果找到了,就会执行相应的exe文件,如果找不到,就会提示当前输入的命令不存在。
也就是说,Path环境变量可以简化我们输入的命令的作用,如果我们java这条命令用的频繁的话,就可以通过设置Path变量来达到只输入java就可以执行,而不必进入到其所在的目录才能执行,可以减少我们的重复工作。
ClassPath变量:ClassPath顾名思义,可以理解为Java的类查找路径。这也是ClassPath与Path主要的区别,Path环境变量是操作系统使用的,而ClassPath是Java编译器用来查找代码中用到的类的路径的。
举例:
package com.cnblog;
2 import undact.utils.GetTime;
public class Test {
public static void main(String[] args) {
System.out.println(GetTime.GetNowTime());
}
}
在这个Test类中,我导入了一个自定义的包undact.utils中的GetTime类,那么当我在CMD中用javac编译此文件时为什么可以正确的找到这个类,通过编译呢?
因为我在环境变量的设置中在ClassPath环境变量中加上了undact.utils.GetTime类所在的路径,这样在编译时编译器就会通过查找ClassPath从而找到我引入的这个类,正确的对Test类进行编译。这也就是ClassPath环境变量的功能。
二、可能导致命令行运行javac编译成功,但 java命令 + 所要执行的类的类名 无效的原因。
还是以上面的Test.java文件为例,假设此文件的存放目录为C:\Users\lenovo\Desktop\com\cnblog\Test.java,那么当我们在CMD中进入到C:\Users\lenovo\Desktop目录下,就可以通过javac Test.java命令对Test.java文件进行编译,你也确实可以看见在当前目录下生成了Test.class文件,但当你输入java com.cnblog.Test时却发现提示找不到主类。这是由于Test.java有自己所在的package,并不是属于default package,所以你必须进入到其所在包的上一级目录输入命令才能执行,也就是说在本例中,你需要进入到C:\Users\lenovo\Desktop目录下再输入java com.cnblog.Test命令才能正确的执行。
三、介绍Maven项目的结构。

如左图所示,为典型的maven web项目结构,正规些的里面还要用到src/test/java及src/test/resource文件夹。右图为普通的web项目结构,都是使用Eclipse for JavaEE Developers 版本的Eclipse构建的。关于maven构建项目的好处及如何使用maven我这里不谈,只讲下如何理解这样的结构。有很多刚刚用maven构建web项目的人来说,有最疑惑的问题可能就是这种项目结构与我构建的普通web项目结构有何区别?如何把我以前做项目的经验适用到这样的项目结构中来?
其实不论是maven web项目,还是普通的web项目,部署到服务器之后,其结构都是相似的,那么为什么从eclipse上看两种结构差异这么大,部署到服务器上结构却又差不多呢?这其实是源于eclipse的配置选项,看懂这个配置就能明白这个问题了。

上图即为将一个Maven web项目部署到服务器上时的可选配置。source一栏代表你在Eclipse中看到的项目的结构,Deploy Path一栏代表部署后的对应路径。也就是说src/main/java这个文件夹在部署到服务器上时将会被部署到对应的WEB-INF/class文件夹中,而Maven Dependencies中涉及到的jar包将会被部署到WEB-INF/lib文件夹中,其余以此类推。
接下来我们再来看下一个普通web项目在部署到服务器上时的可选配置。

可以看到项目中的/WebContent文件夹部署到服务器上时被放置在了服务器上此项目的根目录中,/src文件夹则被放置在了服务器上的WEB-INF/classes文件夹下,与上述maven项目中src/main/java文件夹默认放置的路径是相同的。
无论是普通web项目,还是maven web项目,在服务器上项目结构都大致如下图:

这样也有利于服务器统一对web项目的管理。
由于上述原因,所以不论是maven web项目,还是普通的web项目,部署到服务器之后,其结构都是相似的。这样我们就可以很容 易的把以前做普通web项目的经验适用到maven web这样的项目结构中。
四、Eclipse中添加Jar包的两种方式Add Jars 与 Add External Jars 的区别。
当我们在项目中需要引入外部的jar包时,常用的可以有以下两种选择方式,
图1
图2
图1为点击Add Jars后的Eclipse中的选项,图2为Add External Jars 后的Eclipse中的选项。两图比较可以看出,Add Jars是让你在当前的工程中选择jar包添加,Add External Jars是在任意位置选择jar包添加。两种方式均可,对我个人而言,常用的方式是在当前工程中新建一个lib文件夹,之后把要添加的jar包复制到此文件夹中,然后再利用Add Jars的方式把lib中的jar包添加到工程的Reference Library当中去。这样做的好处是保证用到的jar包始终在工程中,不会被误删,便于项目的移植。Add External Jars 方式引入的Jar包可能会被不小心误删掉,比如说引入的jar包放在了桌面,清理桌面的时候误删jar包就会导致工程运行出错。
五、Eclipse发布项目到Tomcat上可能导致Jar包丢失的原因。
如四所说,通过Add External Jars 方式引入的jar包在部署到服务器上时并没有被拷贝,就会导致jar包丢失,运行时找不到jar包。
而通过在项目中建立lib文件夹的方式引入外部jar包,在部署到服务器上时会根据你的配置选项把jar包自动copy到相应的文件夹,就不会出现jar包丢失的问题。
如果你觉得本篇文章对你有用的话,请随手点击推荐,让更多的人看到,感谢!
主要介绍JavaEE中Maven Web 项目的结构及其它几个小问题的更多相关文章
- eclipse中maven web项目部署时缺少classes文件或者resources文件
写这篇博客的原因 问题描述 昨天发现eclipse中maven web项目部署时缺少classes文件或者resources文件 本来以为是很常见的原因, 依次检查"Java Build P ...
- idea中的java web项目(添加jar包介绍)和java maven web项目目录结构
java web项目 web项目下web根目录名称是可以更改的 idea中新建java web项目,默认src为Sources Root,当然也可以手动改,在Sources Root下右键只能新建Pa ...
- eclipse中Maven web项目的目录结构浅析
刚开始接触maven web项目的时候,相信很多人都会被它的目录结构迷惑. 为了避免初学者遇到像我一样的困扰,我就从一个纯初学者的视角,来分析一下这个东西. 1,比如说,我们拿一个常见的目录结构来看, ...
- eclipse 和 Myeclipse中Maven Web项目出现小红叉的 详细解决方法
在我们创建maven项目是常会出现小红叉,如图: 解决办法: 1.可以 点击鼠标右键 maven--->update project.一般可以解决. 2.查看 window---->sh ...
- 在eclipse中maven web项目部署到tomcat,访问不了
修改eclipse中tomcat发布路径后,能正常访问
- 在Tomcat中部署Web项目的操作方法,maven项目在Tomcat里登录首页报404
maven项目在Tomcat里登录首页报404, 解决:编辑conf/server.xml进行配置<Host>里的<Context>标签里的path. <Context ...
- 转载Eclipse中Maven WEB工程tomcat项目添加调试
转载地址: http://blog.csdn.net/free4294/article/details/38260581 一.建立一个maven WEB项目 1.file->new->o ...
- maven web 项目中启动报错 Java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
主要原因是maven项目里面的jar包吗,没有导入到项目中 maven web 项目中启动报错 Java.lang.ClassNotFoundException: org.springframewor ...
- Maven WEB 项目使用ProGuard进行混淆,最佳解决方案
Maven WEB 项目使用ProGuard进行混淆,最佳解决方案 近期公司的Android项目做了混淆,虽说对于保护代码并不是100%的,但混淆后的代码可以使那些不法份子难以阅读,这样也能对代码的保 ...
随机推荐
- 引用 WCF 服务后,没有生成任何 .datasource?
如题WCF服务生成成功,在添加服务引用的时候也不报错,但是添加完成之后不能正常调用服务借口. 在重新引用服务的时候,或者是是更新引用服务的时候,点“高级”按钮,在服务引用设置对话框中,将“重新使用引用 ...
- 机器学习:PCA(降噪)
一.噪音 噪音产生的因素:可能是测量仪器的误差.也可能是人为误差.或者测试方法有问题等: 降噪作用:方便数据的可视化,使用样本特征更清晰:便于算法操作数据: 具体操作:从 n 维降到 k 维,再讲降维 ...
- Excel开发学习笔记:发布VSTO下的Excel开发项目
遇到一个数据处理自动化的问题,于是打算开发一个基于excel的小工具.在业余时间一边自学一边实践,抽空把一些知识写下来以备今后参考,因为走的是盲人摸象的野路子,幼稚与错误请多包涵. 开发环境基于VST ...
- SQL 2008提供几种数据同步方式
SQL 2008提供几种数据同步的方式如下. 1.日志传送(Log Shipping),定时将主数据库的日志备份,恢复到目标数据库. 2.数据库镜像(Database Mirror),原理同日志传送, ...
- 10-14C#基础--语句(switch....case和for...循环)
10-14C#基础--语句(2) 一.课前作业:“跟电脑猜拳” 二.switch(定义的变量,参数值)......case.... 注:switch...case大多用于值类型的判断,这里不同于if表 ...
- Oracle监听程序没法启动的一种解决办法
遇到的是监听日志多了 oracle\diag\tnslsnr\WIN-MLPKEV0JE05\listener\trace 删除 日志关闭 lsnrctl set log_status off;
- struts2学习笔记(3)struts.xml的一些常用设置
在开发中通常需要用到多个配置文件,可以通过在web.xml中添加以下代码: <include file="login.xml"></include> 将sr ...
- C++面向对象类的实例题目十
题目描述: 编写一个程序,其中有一个汽车类vehicle,它具有一个需要传递参数的构造函数,类中的数据成员:车轮个数wheels和车重weight放在保护段中:小车类car是它的私有派生类,其中包含载 ...
- 基于GStreamer编写Mp3播放器
一.简介 作者系统为CentOS6,本文在此基础上对Mp3播放器进行开发,需要使用mp3解码库libmad和gstreamer0.10-plugins-ugly,详细步骤如下. 二.操作步骤 1) ...
- Luogu 4206 [NOI2005]聪聪与可可
BZOJ 1415 简单期望 + 记忆化搜索. 发现聪聪每一步走向的地方是在可可的所在位置确定时是确定的,设$nxt_{x, y}$表示聪聪在$x$,可可在$y$时聪聪下一步会走到哪里,我们先预处理出 ...