先说下本篇随笔的目录。

    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 项目的结构及其它几个小问题的更多相关文章

  1. eclipse中maven web项目部署时缺少classes文件或者resources文件

    写这篇博客的原因 问题描述 昨天发现eclipse中maven web项目部署时缺少classes文件或者resources文件 本来以为是很常见的原因, 依次检查"Java Build P ...

  2. idea中的java web项目(添加jar包介绍)和java maven web项目目录结构

    java web项目 web项目下web根目录名称是可以更改的 idea中新建java web项目,默认src为Sources Root,当然也可以手动改,在Sources Root下右键只能新建Pa ...

  3. eclipse中Maven web项目的目录结构浅析

    刚开始接触maven web项目的时候,相信很多人都会被它的目录结构迷惑. 为了避免初学者遇到像我一样的困扰,我就从一个纯初学者的视角,来分析一下这个东西. 1,比如说,我们拿一个常见的目录结构来看, ...

  4. eclipse 和 Myeclipse中Maven Web项目出现小红叉的 详细解决方法

    在我们创建maven项目是常会出现小红叉,如图: 解决办法: 1.可以 点击鼠标右键  maven--->update project.一般可以解决. 2.查看 window---->sh ...

  5. 在eclipse中maven web项目部署到tomcat,访问不了

    修改eclipse中tomcat发布路径后,能正常访问

  6. 在Tomcat中部署Web项目的操作方法,maven项目在Tomcat里登录首页报404

     maven项目在Tomcat里登录首页报404, 解决:编辑conf/server.xml进行配置<Host>里的<Context>标签里的path. <Context ...

  7. 转载Eclipse中Maven WEB工程tomcat项目添加调试

    转载地址: http://blog.csdn.net/free4294/article/details/38260581 一.建立一个maven  WEB项目 1.file->new->o ...

  8. maven web 项目中启动报错 Java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet

    主要原因是maven项目里面的jar包吗,没有导入到项目中 maven web 项目中启动报错 Java.lang.ClassNotFoundException: org.springframewor ...

  9. Maven WEB 项目使用ProGuard进行混淆,最佳解决方案

    Maven WEB 项目使用ProGuard进行混淆,最佳解决方案 近期公司的Android项目做了混淆,虽说对于保护代码并不是100%的,但混淆后的代码可以使那些不法份子难以阅读,这样也能对代码的保 ...

随机推荐

  1. Lib之过?Java反序列化漏洞通用利用分析

    转http://blog.chaitin.com/ 1 背景 2 Java反序列化漏洞简介 3 利用Apache Commons Collections实现远程代码执行 4 漏洞利用实例 4.1 利用 ...

  2. DataGridView风格设置

    http://blog.csdn.net/wangzhen209/article/details/51744518 http://www.cnblogs.com/hanpanpan

  3. js中的执行环境和作用域链

    首先介绍一些即将用到的概念: 执行环境:  它定义了变量和函数有权访问其他数据的范围,每一个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个变量对象中.   所有javasc ...

  4. myeclipse debug 工具栏不见了

    1.打开myeclipse,点击右上角的debug图标.如图: 点击debug页面右上角的三角形,把下拉菜单的Show Debug Toobar给勾上.如图: 3 这样debug工具的已经显示出来了

  5. apache server和tomcat集群配置一:水平负载

    下载apache  server,最新链接http://archive.apache.org/dist/httpd/binaries/win32 当前实验版本2.2.4 下载apache  tomca ...

  6. SQLAchemy ORM框架

    SQLAchemy SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行S ...

  7. oracle --(一)数据块(data Block)

    基本关系:数据库---表空间---数据段---分区---数据块 数据块(data Block)一.数据块Block是Oracle存储数据信息的最小单位.这里说的是Oracle环境下的最小单位.Orac ...

  8. ie7下z-index失效问题解决方法

    绝对定位元素的“有定位属性(relative或absolute)的父元素”在渲染层次时起到了主要作用,前面的被后面的覆盖了.解决办法就是给有定位属性的父元素设置z-index 解决办法: 父级元素加上 ...

  9. java输入输出--I/O操作基础知识学习

    一.java的I/O流 1. 输入流(字节流和字符流,字节流操作的数据单元是8位的字节,字符流操作的是16位的字符)(InputStream 和Reader作为基类) 2.输出流(字节流和字符流,字节 ...

  10. springmvc 注解扫描失败的可能原因

    情况是这样的:web工程采用了ssm框架,dao和service都是通过annotation方式注入的,工程运行正常.后来把service和dao打成jar放在工程的lib目录下,问题来了,配置没改动 ...