在tomcat上运行创建war文件(使用eclipse)的最佳做法是什么?教程,链接,示例非常感谢。
答案 0 :(得分:95)
<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>
将Java文件构建到类中并复制驻留在src
下但需要在运行时可用的任何非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>
设置完所有这些后,只需从Eclipse启动default
目标即可编译,WAR并部署您的解决方案。
这种方法的优点是它可以在Eclipse之外以及Eclipse中运行,并且可以用来轻松地与正在处理项目的其他开发人员共享您的部署策略(例如通过源代码控制)。
答案 1 :(得分:37)
我一直只选择从Eclipse导出。它构建war文件并包含所有必需的文件。提供您创建项目作为Web项目,您只需要做。 Eclipse使得它非常简单。
答案 2 :(得分:23)
我们使用Maven(Ant的大哥哥)来完成我们所有的java项目,它有一个非常漂亮的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>
答案 3 :(得分:14)
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-&gt; WAR文件”选项可以保存war文件。
答案 4 :(得分:12)
如果您不确定该怎么做并且从头开始,那么Maven可以帮助您入门。
按照以下步骤,您可以在eclipse中完美地设置新的战争项目。
mvn archetype:generate
mvn eclipse:eclipse
mvn package
来创建战争本身,或者通过在eclipse中设置服务器并仅添加将项目添加到服务器来部署它。正如其他一些人所说,使用maven的缺点是你必须使用maven约定。但我想如果你刚刚开始,在你开始自己制作之前学习惯例是一个好主意。没有什么可以阻止你在以后更改/重构你自己喜欢的方法。
希望这有帮助。
答案 5 :(得分:4)
答案 6 :(得分:3)
使用ant构建代码 我用它作为我的项目短信
<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>
答案 7 :(得分:2)
另一种选择是使用Eclipse自动构建它。当然,如果您有持续集成环境,建议使用Ant或Maven。导出替代方法不是很方便,因为每次导出属性都必须配置。
步骤进行:的
启用“项目档案”支持;这可能取决于您的项目(我在Java EE / Web项目中使用它)。右键单击项目根目录;配置 - &gt;添加项目档案支持。
在“项目档案”顶部目录中创建新档案。你只有jar选项,但是你要归档* .war。
配置Fileset-s,即要包含的文件。典型的是配置两个文件集,类似于Web部署程序集(项目属性)的配置方式。
您可能需要调整文件集排除属性,具体取决于您放置某些配置文件的位置,或者您可能需要更多文件集,但您的想法是,一旦您配置了此属性,就无需更改它。 / p>
手动构建存档或直接发布到服务器;但也是由Eclipse
答案 8 :(得分:2)
另一个常见的选择是gradle。
http://www.gradle.org/docs/current/userguide/application_plugin.html
在网络应用中构建war文件:
在build.gradle中,添加:
apply plugin: 'war'
然后:
./gradlew war
使用上面接受的答案中的布局。
答案 9 :(得分:1)
在WEB-INF文件夹外使用此命令。这应该创建你的war文件。这是我所知道的最快捷的方法。
您需要安装JDK 1.7+才能实现此壮举和环境变量,这些变量指向JDK的bin目录。
jar -cvf projectname.war *
答案 10 :(得分:0)
更简单的解决方案,它还刷新了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>
答案 11 :(得分:0)
用于从标准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
答案 12 :(得分:-2)
**在Eclips中制作战争文件Gilsnemed of grails web project **
1.进口项目:
2.更改datasource.groovy文件
像这样:url =“jdbc:postgresql://18.247.120.101:8432 / PGMS”
2.chnge AppConfig.xml
3.从任务管理器中获取Java:
在eclips中运行清洁命令
以项目名称运行'prod war'。
检查日志文件,并在工作台目录中查找相同日期的.war文件。