IDEA通过Artifacts发布Web项目

今天在用IDEA运行一个Java Web项目时突然报错java.lang.ClassNotFoundException: com.mysql.jdbc.Driver,但是我的项目的lib目录下以及添加了jdbc的连接jar包,而且在IDEA中编译没有报错,而且之后我自己添加的两个jar包也找不到,但是IDEA自动提示正常,说明项目的确引入了jar包,但是在发布项目时出现了问题。

经过排查发现IDEA发布项目到一个out文件夹下,但是该文件夹下没有lib目录。这就涉及到IDEA通过Artifacts发布项目的问题了,之前我通过IDEA的Artifacts创建一个Java web项目过程记录如下:https://blog.csdn.net/theVicTory/article/details/104282873

既然缺少lib文件,那么解决方法就是设置输出项目时添加你需要的文件夹,如下所示,在Artifacts设置时的output root中添加lib并将项目的依赖jar包放到该目录下即可解决问题。

那么问题来了,什么是Artifacts?IDEA是如何打包输出一个Java Web项目的呢?

Artifacts

artifacts是maven中的一个概念,是一个用于将Java web项目打包的工具,以便于项目在服务器上进行部署或分发到应用平台。其打包方式有如下三种:

  • Java Archive,将Java类文件及相关资源聚合为一个文件进行打包
  • WAR:Web Application aRchive,一种包含JSP、Servlet、Java类、XML、标签库等Web应用程序资源的JAR文件
  • exploded:展开模式,即不将war文件压缩,保留原来的文件目录结构,便于在开发时进行文件的修改。

在IDEA右上角有个Project Structure的图标,也可使用快捷键Ctrl+Alt+Shift+S打开,在Artifacts中配置中选择的Type为war exploded,将项目以不压缩的方式发布到指定的目录下。选项框Output directory可指定项目要发布的位置,默认会在当前项目下创建一个out目录用于项目的发布。发布的内容就是标签<output root>下的内容,如果你项目中用到的资源没有放到这个目录下,则不会被打包到发布目录,从而出现找不到资源报错的情况,因此如果需要添加一些文件到发布目录,则需要手动添加到这个<output root>标签下。

其他的Project Structure选项卡用于对项目进行设置:第一个是Project选项卡,可以设置项目的名字、SDK与项目编译输出路径

第二个选项卡为Modules,可以对项目进行模块化设置,例如我使用的是web项目模块。它又有三个子选项卡,其中Sources可以用于标记你项目中的文件夹类型,从而让IDEA更好地识别你的项目。第二个Paths用于详细设置项目的编译、测试、部署的文件输出路径。第三个Dependencies用于设置项目所使用的依赖,例如SDK、lib、dependency

扫描二维码关注公众号,回复: 10959876 查看本文章

 第三个选项卡为Libraries即项目依赖的lib库的配置,例如这里我的项目依赖于Java EE 6库,点击+号可以向库中添加jar包

 第四个Facets选项卡表述了在Module中使用的各种各样的框架、技术和语言,比如web、strtus2、spring、hibernate等。这些Facets让Intellij IDEA知道怎么对待module内容,并保证与相应的框架和语言保持一致。Facet 是和 Module 紧密结合的,你如果是在 Module 里配置了,那么 Facet 里边也会出现

第五个就是之前的Artifacts选项卡了,用于配置项目打包部署和输出。

IDEA部署Tomcat项目

Tomcat服务器部署项目有三种方式

  • 第一种是最为常见的,就是将项目放到Tomcat安装目录下的webapps文件夹内,这样启动服务器后可以直接通过服务器访问到该文件夹下的所有项目
  • 进而我们可以修改Tomcat/conf/server.xml文件,从而指定服务器的部署目录
    <Context path="/xx" docBase="D:\\workspace\\xx\\target\\xx" reloadable="true" sessionCookiePath="/xx"sessionCookieName="yoursessionname">
     </Context>
  • 第三种是通过创建镜像目录的方式,在Tomcat/conf/Catalina目录下创建xml文件设置镜像位置

    <Context path="/xx" docBase="D:\\workspace\\xx\\target\\xx" debug="0" privileged="true"> </Context>

    IDEA就是通过第三种镜像的方式启动Tomcat服务器的,可以看到其服务器启动是通过catalina.bat.run,而不是startup.bat。

CATALINA_HOME是Tomcat的安装目录,CATALINA_BASE是Tomcat的工作目录。如果我们想要运行Tomcat的多个实例,但是不想安装多个Tomcat软件副本。那么我们可以配置多个工作目录,每个实例独占一个工作目录,但是共享同一个安装目录。Tomcat每个运行实例需要使用自己的conf、logs、temp、webapps、work和shared目录,因此CATALINA_BASE就指向这些目录。 而其他目录主要包括了Tomcat的二进制文件和脚本,CATALINA_HOME就指向这些目录。如下所示,可以看到IDEA在启动Tomcat时输出的日志,在c盘的IDEA目录中创建了tomcat的临时工作目录,但使用的仍是安装目录

发布了124 篇原创文章 · 获赞 65 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/theVicTory/article/details/104682415