主要介绍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%的,但混淆后的代码可以使那些不法份子难以阅读,这样也能对代码的保 ...
随机推荐
- pushd命令
1)功能pushd命令常用于将目录加入到栈中,加入记录到目录栈顶部,并切换到该目录:若pushd命令不加任何参数,则会将位于记录栈最上面的2个目录对换位置 2)语法(1)格式:pushd [目录 | ...
- Disconf web管理端安装
1.环境配置配置java.maven环境,并安装mysql,reids,zookeeeper,Nginx2.下载disconf下载https://codeload.github.com/knightl ...
- RabbitMQ介绍
(一)RabbitMQ基本概念 RabbitMQ是流行的开源消息队列系统,用erlang语言开发.我曾经对这门语言挺有兴趣,学过一段时间,后来没坚持.RabbitMQ是 AMQP(高级消息队列协议)的 ...
- 四川第七届 C Censor (字符串哈希)
Censor frog is now a editor to censor so-called sensitive words (敏感词). She has a long text pp. Her j ...
- 2015.1.15 利用航线id取所有点的函数创建视图
1.根据航路id取所有航路点的函数 create or replace function alinepnts(alid in number) return tab_airline_pnt is --返 ...
- 问题:asp.net 点击button按钮调到页面顶部;结果:asp.net点击一个按钮,使页面跳转到本面页上的指定位置
asp.net点击一个按钮,使页面跳转到本面页上的指定位置 (2011-04-19 16:46:51) 转载▼ 标签: it 最近在做一个项目. 用到标题所说的功能. 实现方法: 1.在aspx中 ...
- executeUpdate,executeQuery,executeBatch 的区别
executeQuery : 用于实现单个结果集,例如: Select 一般使用executeQuery 就是来实现单个结果集的工具 executeUpdate 用于执行 INSERT.UPDATE ...
- lucene、solr中的日期衰减方法-------function query --尚未测试在solr4.8
经常有一种情景是这样的:我们索引了N年的文章,而查询时候无论直接用相关度.或者用时间排序,都是比较鲁莽的:我们想要一种既要相关度比较高,又要时间上比较新的文章. 这时候的解决办法就是,自定义日期衰减的 ...
- 线段树教做人系列(3) HDU 4913
题意及思路看这篇博客就行了,讲得很详细. 下面是我自己的理解: 如果只有2,没有3的话,做法就很简单了,只需要对数组排个序,然后从小到大枚举最大的那个数.那么它对答案的贡献为(假设这个数排序后的位置是 ...
- Python_pip_03_安装模块出现错误时咋整
>在DOS窗口中到Python安装路径的scripts中执行 pip install pyperclip 出现错误 >>错误提示:Fatal error in launcher: ...