##Maven项目目录结构如下:
project
- src
- main
- java
- resources
- webapp
- WEB-INF
- classes
- lib
- target
- project-snapshot
- WEB-INF
- classes
- lib
- classes
其中 project-snapshot就是maven编译生成的项目目录了,我们一般使用这个目录对项目进行部署,这样问题来了:
每次改动JSP文件或者Java文件,都得重新用maven编译一下,以便生成代码到该目录,有没有方便点的做法呢?接下来就是啦。
让Maven项目自动编译:
为了让改写JSP之后无需重新编译,我们只有使用src/main/webapp/这个目录进行部署了,因为一般我们是直接改动里面的文件进行编码的;
lib目录
而jar包是maven从仓库下载过来的,为了能用上下载回来的jar包,我们可以把
target/project-snapshot/WEB-INF/lib
目录联接到
src/main/webapp/WEB-INF/lib
windows下通过`mklink /j`命令(假设项目在D:/dev目录下):
mklink /j “D:\dev\project\src\main\webapp\WEB-INF\lib” “D:\dev\project\target\project-snapshot\WEB-INF\lib”
这样就把maven下载的lib目录联接到部署目录webapp下了;
class目录
对于class目录,也是同样的方法,另外需要设置IDE的自动编译输出目录到:
target/project-snapshot/WEB-INF/classes
右击项目 -> properties -> Java Build Path -> 右边面板底部设置Default output folder;
直接运行main方法的问题
但是这样Eclipse下会有个问题,直接运行某个类的main方法,会提示如下错误:
java.lang.NoClassDefFoundError: me/arthinking/test/Demo
Caused by: java.lang.ClassNotFoundException: me.arthinking.test.Demo
at java.net.URLClassLoaderAppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Exception in thread “main”
原因是没有读取到输出的classes文件,为此,我们可以把class编译输出目录设置为:
project/target/classes
这样就可以正常执行main方法了
把这个目录联接到webapp/WEB-INF/classes目录下即可。
编译目录设置如图:
其他的配置文件目录需要联接到webapp目录,同上操作。
关于IDEA集成开发环境
据Ryan介绍,IDEA集成开发环境是不会存在找不到main方法的问题的;
另外我们也可以在pom.xml中配置classes文件的输出目录,把classes文件输出到webapp目录下,这样改写了Java文件之后需要使用maven编译下项目了。
pom.xml