创建war文件(使用eclipse)以在tomcat上运行的最佳实践是什么?教程,链接,示例非常感谢。
13 回答
<target name="default" depends="setup,compile,buildwar,deploy"></target>
然后,您可以在 Eclipse 中单击以运行该 Ant 目标。以下是每个步骤的示例:
前提条件
我们假设您的代码组织如下:
${basedir}/src
: Java 文件、属性、XML 配置文件${basedir}/web
: 你的 JSP 文件${basedir}/web/lib
: 运行时需要的任何 JAR${basedir}/web/META-INF
: 你的清单${basedir}/web/WEB-INF
: 你的 web.xml 文件
设置
定义一个setup
任务来创建分发目录并直接复制任何需要 WARred 的工件:
<target name="setup">
<mkdir dir="dist" />
<echo>Copying web into dist</echo>
<copydir dest="dist/web" src="web" />
<copydir dest="dist/web/WEB-INF/lib" src="${basedir}/../web/WEB-INF/lib" />
</target>
编译
src
将您的 Java 文件构建到类中并复制驻留在其下但需要在运行时可用的任何非 Java 工件(例如属性、XML 文件等):
<target name="compile">
<delete dir="${dist.dir}/web/WEB-INF/classes" />
<mkdir dir="${dist.dir}/web/WEB-INF/classes" />
<javac destdir="${dist.dir}/web/WEB-INF/classes" srcdir="src">
<classpath>
<fileset dir="${basedir}/../web/WEB-INF/lib">
<include name="*" />
</fileset>
</classpath>
</javac>
<copy todir="${dist.dir}/web/WEB-INF/classes">
<fileset dir="src">
<include name="**/*.properties" />
<include name="**/*.xml" />
</fileset>
</copy>
</target>
建立战争
创建 WAR 本身:
<target name="buildwar">
<war basedir="${basedir}/dist/web" destfile="My.war"
webxml="${basedir}/dist/web/WEB-INF/web.xml">
<exclude name="WEB-INF/**" />
<webinf dir="${basedir}/dist/web/WEB-INF/">
<include name="**/*.jar" />
</webinf>
</war>
</target>
部署
最后,您可以设置一个任务以将 WAR 直接部署到您的 Tomcat 部署位置:
<target name="deploy">
<copy file="My.war" todir="${tomcat.deploydir}" />
</target>
点击去!
完成所有这些设置后,只需default
从 Eclipse 启动目标即可编译、WAR 和部署您的解决方案。
这种方法的优点是它可以在 Eclipse 之外以及在 Eclipse 中工作,并且可以用来轻松地与同样在您的项目上工作的其他开发人员共享您的部署策略(例如,通过源代码控制)。
我总是选择从 Eclipse 导出。它构建战争文件并包含所有必要的文件。假设您将项目创建为 Web 项目,这就是您需要做的所有事情。Eclipse 使它变得非常简单。
我们所有的 java 项目都使用 Maven(Ant 的老大哥),它有一个非常漂亮的 WAR 插件。可以在那里找到教程和用法。
它比 Ant 容易得多,与 Eclipse 完全兼容(使用maven eclipse:eclipse创建 Eclipse 项目)并且易于配置。
示例配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1-alpha-2</version>
<configuration>
<outputDirectory>${project.build.directory}/tmp/</outputDirectory>
<workDirectory>${project.build.directory}/tmp/war/work</workDirectory>
<webappDirectory>${project.build.webappDirectory}</webappDirectory>
<cacheFile>${project.build.directory}/tmp/war/work/webapp-cache.xml</cacheFile>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>pdf</nonFilteredFileExtension>
<nonFilteredFileExtension>png</nonFilteredFileExtension>
<nonFilteredFileExtension>gif</nonFilteredFileExtension>
<nonFilteredFileExtension>jsp</nonFilteredFileExtension>
</nonFilteredFileExtensions>
<webResources>
<resource>
<directory>src/main/webapp/</directory>
<targetPath>WEB-INF</targetPath>
<filtering>true</filtering>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</webResources>
<warName>Application</warName>
</configuration>
</plugin>
war 文件只是一个带有 war 扩展名的 jar 文件,但它的工作原理是内容的实际结构。
J2EE/Java EE 教程可以作为一个开始:
http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/WebComponents3.html
Servlet 规范包含血淋淋的细节:
http://java.sun.com/products/servlet/download.html
如果您在 Eclipse 中创建一个新的 Web 项目(我指的是 Java EE 版本),则会为您创建该结构,您还可以告诉它您的 Appserver 的安装位置,它将为您部署和启动应用程序。
使用“Export->WAR file”选项可以让您保存war文件。
如果您不确定该做什么并且从头开始,那么 Maven 可以帮助您入门。
按照以下步骤,您可以在 Eclipse 中完美地获得一个新的战争项目设置。
- 下载并安装Maven
- 去命令行运行:
mvn archetype:generate
- 按照提示的步骤 - 选择简单的 java web 项目 (18) 和合适的名称。
- 完成后运行:
mvn eclipse:eclipse
- 启动 Eclipse。选择文件 -> 导入 -> 现有项目。选择您运行 mvn 目标的目录。
- 就是这样,您现在应该在 Eclipse 中对战争项目有一个很好的开始
mvn package
您可以通过在 eclipse 中设置服务器并简单地将项目添加到服务器来运行或部署它来创建战争本身。
正如其他人所说,使用 maven 的缺点是您必须使用 maven 约定。但我认为,如果您刚刚开始,在开始自己制作之前学习约定是一个好主意。没有什么可以阻止您稍后更改/重构为您自己喜欢的方法。
希望这可以帮助。
使用Ant 战争任务
在 WEB-INF 文件夹外使用以下命令。这应该会创建您的战争文件,并且是我所知道的最快的方法。
(您需要安装 JDK 1.7+ 和指向 JDK 的 bin 目录的环境变量。)
jar -cvf projectname.war *
使用 ant 构建代码我将其用于我的项目 SMS
<property name="WEB-INF" value="${basedir}/WebRoot/WEB-INF" />
<property name="OUT" value="${basedir}/out" />
<property name="WAR_FILE_NAME" value="mywebapplication.war" />
<property name="TEMP" value="${basedir}/temp" />
<target name="help">
<echo>
--------------------------------------------------
compile - Compile
archive - Generate WAR file
--------------------------------------------------
</echo>
</target>
<target name="init">
<delete dir="${WEB-INF}/classes" />
<mkdir dir="${WEB-INF}/classes" />
</target>
<target name="compile" depends="init">
<javac srcdir="${basedir}/src"
destdir="${WEB-INF}/classes"
classpathref="libs">
</javac>
</target>
<target name="archive" depends="compile">
<delete dir="${OUT}" />
<mkdir dir="${OUT}" />
<delete dir="${TEMP}" />
<mkdir dir="${TEMP}" />
<copy todir="${TEMP}" >
<fileset dir="${basedir}/WebRoot">
</fileset>
</copy>
<move file="${TEMP}/log4j.properties"
todir="${TEMP}/WEB-INF/classes" />
<war destfile="${OUT}/${WAR_FILE_NAME}"
basedir="${TEMP}"
compress="true"
webxml="${TEMP}/WEB-INF/web.xml" />
<delete dir="${TEMP}" />
</target>
<path id="libs">
<fileset includes="*.jar" dir="${WEB-INF}/lib" />
</path>
另一种选择是使用 Eclipse 自动构建它。当然如果你有持续集成环境推荐使用 Ant 或 Maven。导出选项不是很方便,因为您每次都必须配置导出属性。
脚步:
启用“项目档案”支持;这可能取决于您的项目(我在 Java EE/Web 项目中使用它)。右键项目根目录;配置 -> 添加项目档案支持。
在“项目档案”顶部目录中创建一个新档案。您只有 jar 选项,但将存档命名为 *.war。
配置Fileset-s,即要包含哪些文件。典型的是配置两个文件集,类似于配置 Web 部署程序集(项目属性)的方式。
- 复制 /WebContent 到 /
- 将 /build/classes 复制到 WEB-INF/classes (在存档中定义 WEB-INF/classes 目录后创建此文件集)
您可能需要调整文件集排除属性,具体取决于您放置一些配置文件的位置,或者您可能需要更多文件集,但想法是,一旦您配置了它,您就不需要更改它。
手动构建存档或直接发布到服务器;但也会由 Eclipse 自动为您构建
另一个常见的选择是 gradle。
http://www.gradle.org/docs/current/userguide/application_plugin.html
要在 Web 应用程序中构建您的战争文件:
在 build.gradle 中,添加:
apply plugin: 'war'
然后:
./gradlew war
使用上面接受的答案中的布局。
更简单的解决方案,它也刷新了 Eclipse 工作区:
<?xml version="1.0" encoding="UTF-8"?>
<project name="project" default="default">
<target name="default">
<war destfile="target/MyApplication.war" webxml="web/WEB-INF/web.xml">
<fileset dir="src/main/java" />
<fileset dir="web/WEB-INF/views" />
<lib dir="web/WEB-INF/lib"/>
<classes dir="target/classes" />
</war>
<eclipse.refreshLocal resource="MyApplication/target" depth="infinite"/>
</target>
</project>
用于从标准 Eclipse 动态 Web 项目创建 WAR 文件的简单 Shell 代码。在 Linux 平台上使用 RAM 文件系统 (/dev/shm)。
#!/bin/sh
UTILITY=$(basename $0)
if [ -z "$1" ] ; then
echo "usage: $UTILITY [-s] <web-app-directory>..."
echo " -s ..... With source"
exit 1
fi
if [ "$1" == "-s" ] ; then
WITH_SOURCE=1
shift
fi
while [ ! -z "$1" ] ; do
WEB_APP_DIR=$1
shift
if [ ! -d $WEB_APP_DIR ] ; then
echo "\"$WEB_APP_DIR\" is not a directory"
continue
fi
if [ ! -d $WEB_APP_DIR/WebContent ] ; then
echo "\"$WEB_APP_DIR\" is not a Web Application directory"
continue
fi
TMP_DIR=/dev/shm/${WEB_APP_DIR}.$$.tmp
WAR_FILE=/dev/shm/${WEB_APP_DIR}.war
mkdir $TMP_DIR
pushd $WEB_APP_DIR > /dev/null
cp -r WebContent/* $TMP_DIR
cp -r build/* $TMP_DIR/WEB-INF
[ ! -z "$WITH_SOURCE" ] && cp -r src/* $TMP_DIR/WEB-INF/classes
cd $TMP_DIR > /dev/null
[ -e $WAR_FILE ] && rm -f $WAR_FILE
jar cf $WAR_FILE .
ls -lsF $WAR_FILE
popd > /dev/null
rm -rf $TMP_DIR
done
**在 Grails Web 项目的 Eclips Gaynemed 中制作 War 文件 **
1.导入项目:
2.更改datasource.groovy文件
像这样:url="jdbc:postgresql://18.247.120.101:8432/PGMS"
2.更改AppConfig.xml
3.从任务管理器中杀死Java:
在 eclips 中运行干净的命令
按项目名称运行“prod war”。
检查日志文件并在工作台目录中找到相同日期的相同 .war 文件。