先说下本篇随笔的目录。

    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. java从键盘输入数,分解质因数,

    总结:1.break;的用法 当最小质因数不能被输入的值整除时,需要继续循环.k++. 当然输入的数,本身就是质数时,那么 package com.b; import java.util.Scanne ...

  2. vuex的实用知识点

    本文系统介绍vuex的全部内容 为什么用vuex 组件通信知道吧,相信很多同学,刚学的时候很难懂,实时上在实际应用中,大型项目如果使用最原始的组件通信会非常的麻烦,主要体现在多层嵌套的组件之间的通信, ...

  3. DataGridView风格设置

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

  4. EM算法以及推导

    EM算法 Jensen不等式 其实Jensen不等式正是我们熟知的convex函数和concave函数性质,对于convex函数,有 \[ \lambda f(x) + (1-\lambda)f(y) ...

  5. Hive UDF开发 第一个例子

    package udf; import org.apache.hadoop.hive.ql.exec.UDF; public class helloudf extends UDF{ public St ...

  6. wait命令

    wait命令用来等待指令的指令,直到其执行完毕后返回终端.该指令常用于shell脚本编程中,待指定的指令执行完成后,才会继续执行后面的任务.该指令等待作业时,在作业标识号前必须添加备份号"% ...

  7. 使用线程池优化Echo模型

    在上一篇文章中 http://www.cnblogs.com/gosaint/p/8492356.html         我阐述了使用线程为每一个客户端创建一个工作线程来负责任务的执行.但是会存在如 ...

  8. Codeforces #505(div1+div2) C Plasticine zebra

    题意:给你一段字符串,可以选择任意多的位置,每个位置会反转两边的字符串,问交错的字符串最长是多长? 思路:找规律,仔细分析样例1.假设位置为 1 2 3 4 5 6 7 8 9,反转之后会发现答案是7 ...

  9. python 爬虫 常见安全措施

    1.隐含输入字段值: 1.1首先采集表单所在页面上生成的随机变量,然后再提交到表单处理页面. 2.避免蜜罐 3.用远程服务器:洋葱路由(The Onion Router)网络.PySocks 是一个非 ...

  10. bluebird 开发文档链接

    参考文献:http://bluebirdjs.com/docs/api/promise.mapseries.html