【Java】通过命令行为JavaWeb项目生成一个war包

一、war包的目录结构

【Java】通过命令行为JavaWeb项目生成一个war包_第1张图片
从这个目录结构可以看出,war包主要由两部分组成,一是WebContent,二是classess。

  • WebContent目录是一个JavaWeb项目中比不可少的一部分,这里面主要存放的是前端代码、Web.xml、lib等文件

  • classes是编译过后的java文件的二进制文件,后台逻辑都是由这里管控

WebContent目录里面有一个名为WEB-INF的文件夹,我们将classess文件放入这个文件夹,再将整个WebContent目录进行打包,就形成了我们在tomcat发布时使用的war包。


二、Eclipse

Eclipse有自带的打包功能,一般在Eclipse中,选中项目名称,【右键】>【Export】>【WAR file】,就可以产生一个war包,简单方便。
通过这种方式产生的war包不便于运维人员的管理,当war包很多时,很容易无法分清楚war包的版本,即war包之间的差异。这时候就需要通过命令行进行打包,结合SVN自身的版本控制,随时随地的得到一个预期的war包。


三、命令行打包

通过命令行进行打包有多种方式,常见的方式有:

  • JDK自带的工具(Jar、Javac命令)
  • maven
  • ant

不同的打包方式有不同的应用场景。


3.1 JDK

使用JDK进行打包主要涉及两个命令:javacjar

  • javac:这条命令可以将一个.java文件编译成.class文件,这条命令是我们在接触Java时就会学习的一个命令,不多进行讲解。
  • jar:打包命令。这条命令我们通常用与产生一个jar包文件,同样的这条命令也可以产生一个war包文件,只需要将后缀名指定为war即可。

对于一个小的JavaWeb项目,一般涉及的java类不是很多,我们可以使用JDK自带的工具进行产生一个war包。


打包流程:

1.使用javac命令编译所有项目中的java文件,将生成的class文件集中在classes文件夹中,同时要保持它们的包结构。

javac -cp .;G:\Tomcat\apache-tomcat-7.0.63\lib\*;G:\Tomcat\apache-tomcat-7.0.63\bin\*;F:\log\WebContent\WEB-INF\lib\* -d F://classes -encoding utf-8 com/log/controller/*.java

在编译时需要注意的:

  • 源文件。一般JavaWeb只有一个目录存放所有的java文件,但是有时会使用从其它项目的代码,此时会有有多个源文件,比如src、dao-src、beans-src,其中dao-src、beans-src是依赖的源文件。若是这种情况时,需要先将源文件进行合并,按照包结构进行合并。

  • 指定好classpath。一个完整的JavaWeb项目会用到很多jar包,包括JDK自身的jar、tomcat的jar以及在项目中自己引入jar包。

  • 编码问题。要注意java文件的编码格式,一般使用的utf-8,所以编译时指定编码格式为utf-8。若是不指定编码格式时,会默认使用操作系统自身的编码格式,而linux和windows的默认编码时不一样的,在不同环境下运行时会报编码错误

  • 指定class文件的存放路径。使用-d参数指定存放目录,方便打包时拷贝


2.拷贝资源文件

  • 拷贝配置文件。有时我们会将配置文件(如spring、数据库的配置文件)放在src目录下,此时需要将这些配置文件拷贝到classes文件夹中,要保持原有的包结构。

  • 拷贝classes文件夹。将整个classes文件夹拷贝至WebContent/WEB-INF目录里面。


3.生成war包

jar -cvf F:\log\WebContent\* Log.war

3.2 使用Ant进行打包

C++、C#有一个Makefile的编译工具,ant与其类似,它可以将Java项目进行打包,不仅仅是war、jar文件,还可以是其它类型文件。
在使用ant之前需要在机器上安装ant这个工具,我自身的JDK是1.7版本,使用的ant是1.9.9版本(高版本会不兼容1.7的JDK)。


Ant安装

Ant是Apache的中间件,它依赖与JDK,在安装Ant之前先安装好JDK。

  1. Ant官网下载地址(http://ant.apache.org/bindownload.cgi)
  2. Ant安装指导文档(http://ant.apache.org/manual-1.9.x/index.html)

Ant安装完成之后,在命令行中输入”ant -h”,会有如下输出

ant [options] [target [target2 [target3] ...]]
Options:
  -help, -h              print this message and exit
  -projecthelp, -p       print project help information and exit
  -version               print the version information and exit
  -diagnostics           print information that might be helpful to
                         diagnose or report problems and exit
  -quiet, -q             be extra quiet
  -silent, -S            print nothing but task outputs and build failures
  -verbose, -v           be extra verbose
  -debug, -d             print debugging information
  -emacs, -e             produce logging information without adornments
  -lib             specifies a path to search for jars and classes
  -logfile         use given file for log
    -l                     ''
  -logger     the class which is to perform logging
  -listener   add an instance of class as a project listener
  -noinput               do not allow interactive input
  -buildfile       use given buildfile
    -file                  ''
    -f                     ''
  -D=   use value for given property
  -keep-going, -k        execute all targets that do not depend
                         on failed target(s)
  -propertyfile    load all properties from file with -D
                         properties taking precedence
  -inputhandler <class>  the class which will handle input requests
  -find            (s)earch for buildfile towards the root of
    -s             the filesystem and use it
  -nice  number          A niceness value for the main thread:                         1 (lowest) to 10 (highest); 5 is the default
  -nouserlib             Run ant without using the jar files from                         ${user.home}/.ant/lib
  -noclasspath           Run ant without using CLASSPATH
  -autoproxy             Java1.5+: use the OS proxy settings
  -main <class>          override Ant's normal entry point

build.xml

Ant的运行依赖与build.xml这个配置文件,build.xml中配置了一个个的target,即任务。每一个targert指定了Ant的行为,如:创建文件夹、删除文件夹、加载classpath、编译文件、拷贝资源、生成war包等任务。任务与任务之间存在依赖关系,即任务的执行顺序。

  • build.xml官方指导文档(http://ant.apache.org/manual-1.9.x/index.html)

当build.xml配置完成后,在build.xml所在目录执行“ant”命令,ant会默认加载build.xml文件(当然,你也可以通过-buildfile参数指定配置文件),执行build.xml中定义好的任务。


svn

使用Ant自带的SVN Repositories(https://ant.apache.org/svn.html)可以更好的进行版本控制。
另外,antsvn是Ant的一个插件,也可以从svn上拉取需要的代码。


Git

GIT Repositories(https://ant.apache.org/git.html),Ant也可以与Git进行协作。


Demo

一个简单的JavaWeb项目,以及完整build.xml,可以通过ant命令生成一个war包。

  • Sample Ant Build File - WAR(https://dzone.com/tutorials/java/ant/ant-sample-build-file-war-1.html)

里面包含项目源码和build.xml。


3.3 Maven

Maven与Ant类似也是可以用于打包的工具,Maven相较与Ant,它没有Ant灵活:

  1. Maven有固定的目录结构。src/main/java是存储后台逻辑代码的地方,src/main/resource是存放配置文件的地方,另外还有存储单元测试的目录test。
  2. pom.xml。这个文件中配置了Maven项目所需要的引用jar包,分为两类jar包,一种是可以直接在远程仓库拉取的jar包,一种是本地仓库(若是本地的jar包,需要为它们创建本地仓库)的jar包。

MVNRepository(http://www.mvnrepository.com/),在这里才可以查找jar的唯一标识。


Maven使用

Maven官方链接(http://maven.apache.org/),安装Maven之后,在命令行输入“mvn -v”,有如下输出:

C:\Users\user>mvn -v
Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T19:57:37+08:00)
Maven home: G:\Maven\apache-maven-3.3.3
Java version: 1.7.0_17, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.7.0_17\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 8", version: "6.2", arch: "amd64", family: "windows"

若项目本身是一个Maven项目,进入项目所在目录,输入“mvn package”,变会在项目目录中生成一个名target的目录,里面有生成的war包。


总结

  • 使用JDK自带的工具打包,比较繁琐,小项目中可以使用。
  • 对于一个大点的项目使用Ant比较方便,配置好build.xml,方便快捷。
  • Ant+SVN+Git可以有效的进行版本控制
  • 若项目本省是一个Maven项目,直接使用“mvn package”命令进行打包。若是使用其它方式得不偿失。

你可能感兴趣的:(JAVA后台)