题
创建 war 文件(使用 eclipse)以在 tomcat 上运行的最佳实践是什么?教程、链接、示例受到高度赞赏。
解决方案
您可以使用 蚂蚁 设置、编译、 战争, ,并部署您的解决方案。
<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 文件构建到类中,并复制位于其下的任何非 Java 工件 src
但需要在运行时可用(例如属性、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导出。它构建war文件并包含所有必需的文件。提供您创建项目作为Web项目,您只需要做。 Eclipse使得它非常简单。
我们使用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>
war文件只是一个带有war扩展名的jar文件,但它的工作原理是内容的实际结构。
J2EE / Java EE教程可以是一个开始:
http://java.sun.com/j2ee/教程/ 1_3-FCS / DOC / WebComponents3.html
Servlet规范包含血腥细节:
http://java.sun.com/products/servlet/download.html
如果您在Eclipse中创建一个新的Web项目(我指的是Java EE版本),那么为您创建结构,您也可以告诉它您的Appserver安装位置,它将为您部署和启动应用程序
使用“Export-&gt; WAR文件”选项将让您保存war文件。
如果您不确定该怎么做并且从头开始,那么Maven可以帮助您入门。
按照以下步骤,您可以在eclipse中完美地设置新的战争项目。
- 下载并安装 Maven
- 执行命令行运行:
mvn archetype:generate
- 按照提示的步骤 - 选择简单的Java Web项目(18)和合适的名称。
- 完成后运行:
mvn eclipse:eclipse
- 启动Eclipse。选择文件 - &gt;导入 - &gt;现有项目。选择运行mvn目标的目录。
- 那就是你现在应该在eclipse的战争项目中有一个非常好的开始
- 您可以通过运行
mvn package
来创建war本身,或者通过在eclipse中设置服务器并仅添加将项目添加到服务器来部署它。
醇>
正如其他一些人所说,使用maven的缺点是你必须使用maven约定。但我想如果你刚刚开始,在你开始自己制作之前学习惯例是一个好主意。没有什么可以阻止你在以后更改/重构你自己喜欢的方法。
希望这有帮助。
使用 Ant战争任务
使用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>
另一种选择是使用 Eclipse 自动构建它。当然如果你有持续集成环境推荐使用Ant或者Maven。导出替代方案不是很方便,因为您必须每次都配置导出属性。
脚步:
启用“项目档案”支持;这可能取决于您的项目(我在 Java EE/Web 项目中使用了它)。右键单击项目根目录;配置 -> 添加项目档案支持。
去“Project Archives”顶部目录中创建一个新的存档。您只有 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
在网络应用中构建war文件:
在build.gradle中,添加:
apply plugin: 'war'
然后:
./gradlew war
使用上面接受的答案中的布局。
在WEB-INF文件夹外使用此命令。这应该创建你的war文件。这是我所知道的最快捷的方法。
您需要安装JDK 1.7+才能实现此壮举和环境变量,这些变量指向JDK的bin目录。
jar -cvf projectname.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 <*>)
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
**在Eclips中制作战争文件Gilsnemed of grails web project **
1.进口项目:
2.更改datasource.groovy文件
像这样:url =&quot; jdbc:postgresql://18.247.120.101:8432 / PGMS&quot;
2.chnge AppConfig.xml
3.从任务管理器中获取Java:
-
在eclips中运行清洁命令
-
以项目名称运行'prod war'。
-
检查日志文件,并在工作台目录中查找相同日期的.war文件。
醇>