Я пытаюсь убедить своих провайдеров использовать ANT вместо Rational Application Development, чтобы любой мог перекомпилировать, перепроверить, повторно развернуть решение в любом месте, в любое время и так или иначе. :П
Я запустил build.xml для проекта, который генерирует файл JAR, но на этом остановился, и мне нужны реальные примеры для сравнения заметок. Мои хорошие друзья! У меня нет никого, кто бы мог об этом поговорить!
Пока это мой build.xml.
(*) Я отредактировал свой вопрос на основе предложение, чтобы использовать pastebin.ca
Моя среда: Fedora 8; WAS 6.1 (как установлено с Rational Application Developer 7)
Документация в этой области очень скудная и практических примеров мало.
Использование задач Ant на сервере приложений WebSphere (WAS)
Для запуска, как описано здесь, вам необходимо запустить их из каталога bin профиль вашего сервера с помощью команд ws_ant.sh или ws_ant.bat.
<?xml version = "1.0"?>
<project name = "project" default = "wasListApps" basedir = ".">
<description>
Script for listing installed apps.
Example run from:
/opt/IBM/SDP70/runtimes/base_v61/profiles/AppSrv01/bin
</description>
<property name = "was_home"
value = "/opt/IBM/SDP70/runtimes/base_v61/">
</property>
<path id = "was.runtime">
<fileset dir = "${was_home}/lib">
<include name = "**/*.jar" />
</fileset>
<fileset dir = "${was_home}/plugins">
<include name = "**/*.jar" />
</fileset>
</path>
<property name = "was_cp" value = "${toString:was.runtime}"></property>
<property environment = "env"></property>
<target name = "wasListApps">
<taskdef name = "wsListApp"
classname = "com.ibm.websphere.ant.tasks.ListApplications"
classpath = "${was_cp}">
</taskdef>
<wsListApp wasHome = "${was_home}" />
</target>
</project>
Команда:
./ws_ant.sh -buildfile ~/IBM/rationalsdp7.0/workspace/mywebappDeploy/applist.xml
Скрипт развертывания
<?xml version = "1.0"?>
<project name = "project" default = "default" basedir = ".">
<description>
Build/Deploy an EAR to WebSphere Application Server 6.1
</description>
<property name = "was_home" value = "/opt/IBM/SDP70/runtimes/base_v61/" />
<path id = "was.runtime">
<fileset dir = "${was_home}/lib">
<include name = "**/*.jar" />
</fileset>
<fileset dir = "${was_home}/plugins">
<include name = "**/*.jar" />
</fileset>
</path>
<property name = "was_cp" value = "${toString:was.runtime}" />
<property environment = "env" />
<property name = "ear" value = "${env.HOME}/IBM/rationalsdp7.0/workspace/mywebappDeploy/mywebappEAR.ear" />
<target name = "default" depends = "deployEar">
</target>
<target name = "generateWar" depends = "compileWarClasses">
<jar destfile = "mywebapp.war">
<fileset dir = "../mywebapp/WebContent">
</fileset>
</jar>
</target>
<target name = "compileWarClasses">
<echo message = "was_cp=${was_cp}" />
<javac srcdir = "../mywebapp/src" destdir = "../mywebapp/WebContent/WEB-INF/classes" classpath = "${was_cp}">
</javac>
</target>
<target name = "generateEar" depends = "generateWar">
<mkdir dir = "./earbin/META-INF"/>
<move file = "mywebapp.war" todir = "./earbin" />
<copy file = "../mywebappEAR/META-INF/application.xml" todir = "./earbin/META-INF" />
<jar destfile = "${ear}">
<fileset dir = "./earbin" />
</jar>
</target>
<!-- http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.javadoc.doc/public_html/api/com/ibm/websphere/ant/tasks/package-summary.html -->
<target name = "deployEar" depends = "generateEar">
<taskdef name = "wsInstallApp" classname = "com.ibm.websphere.ant.tasks.InstallApplication" classpath = "${was_cp}"/>
<wsInstallApp ear = "${ear}"
failonerror = "true"
debug = "true"
taskname = ""
washome = "${was_home}" />
</target>
</project>
Примечания:
Альтернативы
Я бы, наверное, использовал Java Management Extensions (JMX). Вы можете написать сервлет загрузки файлов, который принимает EAR и использует MBeans развертывания для развертывания EAR на сервере. Вы бы просто отправили файл через HTTP. Это позволит избежать каких-либо зависимостей API WAS на вашем компьютере для разработки / сборки и может быть независимым от какого-либо одного проекта.
Развертывание WAS JMX MBeans не может использоваться удаленным приложением JSE? (конечно, при условии наличия библиотек в пути к классам)
@bluefoot Я не знаю / помню - я написал это ~ 5 лет назад - но я предполагаю, что вам все равно нужно будет передать байты на сервер, чтобы предоставить локальный путь к Управление приложениями MBean.
хорошая отправная точка, может быть этот плагин maven, не для его использования, или, может быть, да, но этот maven построен поверх задачи ant. Если вы видите WAS5 + Plugin + Mojo.zip \ src \ main \ scripts \ was5.build.xml
Или, как сказал «МакДауэлл», вы можете использовать «задачи Ant WebSphere Application Server (WAS)», но непосредственно как задачу ANT.
<path id = "classpath">
<fileset file = "com.ibm.websphere.v61_6.1.100.ws_runtime.jar"/>
</path>
<taskdef name = "wsStartApp" classname = "com.ibm.websphere.ant.tasks.StartApplication" classpathref = "classpath" />
<taskdef name = "wsStopApp" classname = "com.ibm.websphere.ant.tasks.StopApplication" classpathref = "classpath" />
<taskdef name = "wsInstallApp" classname = "com.ibm.websphere.ant.tasks.InstallApplication" classpathref = "classpath" />
<taskdef name = "wsUninstallApp" classname = "com.ibm.websphere.ant.tasks.UninstallApplication" classpathref = "classpath" />
<target name = "startWebApp1" depends = "installEar">
<wsStartApp wasHome = "${wasHome.dir}"
application = "${remoteAppName}"
server = "${clusterServerName}"
conntype = "${remoteProdConnType}"
host = "${remoteProdHostName}"
port = "${remoteProdPort}"
user = "${remoteProdUserId}"
password = "${remoteProdPassword}" />
</target>
<target name = "stopWebApp1" depends = "prepare">
<wsStopApp wasHome = "${wasHome.dir}"
application = "${remoteAppName}"
server = "${clusterServerName}"
conntype = "${remoteConnType}"
host = "${remoteHostName}"
port = "${remotePort}"
user = "${remoteUserId}"
password = "${remotePassword}"/>
</target>
<target name = "uninstallEar" depends = "stopWebApp1">
<wsUninstallApp wasHome = "${wasHome.dir}"
application = "${remoteAppName}"
options = "-cell uatNetwork -cluster DOL"
conntype = "${remoteConnType}"
host = "${remoteHostName}"
port = "${remoteDmgrPort}"
user = "${remoteUserId}"
password = "${remotePassword}"/>
</target>
<target name = "installEar" depends = "prepare">
<wsInstallApp ear = "${existingEar.dir}/${existingEar}"
wasHome = "${wasHome.dir}"
options = "${install_app_options}"
conntype = "${remoteConnType}"
host = "${remoteHostName}"
port = "${remoteDmgrPort}"
user = "${remoteUserId}"
password = "${remotePassword}" />
</target>
Еще одна полезная ссылка может быть это.
Если вы просто хотите поиграть, почему бы не использовать среду IDE netbeans для создания ваших файлов для ушей. Если вы создаете корпоративный проект, он автоматически сгенерирует для вас файлы ant. Подходит для прототипирования и только для начала :-)
Есть даже плагин was, который позволяет автоматическое развертывание, но это кажется очень шатким!
Вот некоторые из тех же функций, если у вас нет доступных задач WAS ant или вы не хотите запускать was_ant.bat. Это зависит от wsadmin.bat, существующего в пути.
<property name = "websphere.home.dir" value = "${env.WS6_HOME}" />
<property name = "was.server.name" value = "server1" />
<property name = "wsadmin.base.command" value = "wsadmin.bat" />
<property name = "ws.list.command" value = "$AdminApp list" />
<property name = "ws.install.command" value = "$AdminApp install" />
<property name = "ws.uninstall.command" value = "$AdminApp uninstall" />
<property name = "ws.save.command" value = "$AdminConfig save" />
<property name = "ws.setManager.command" value = "set appManager [$AdminControl queryNames cell=${env.COMPUTERNAME}Node01Cell,node=${env.COMPUTERNAME}Node01,type=ApplicationManager,process=${was.server.name},*]" />
<property name = "ws.startapp.command" value = "$AdminControl invoke $appManager startApplication" />
<property name = "ws.stopapp.command" value = "$AdminControl invoke $appManager stopApplication" />
<property name = "ws.conn.type" value = "SOAP" />
<property name = "ws.host.name" value = "localhost" />
<property name = "ws.port.name" value = "8880" />
<property name = "ws.user.name" value = "username" />
<property name = "ws.password.name" value = "password" />
<property name = "app.deployed.name" value = "${artifact.filename}" />
<property name = "app.contextroot.name" value = "/${artifact.filename}" />
<target name = "websphere-list-applications">
<exec dir = "${websphere.home.dir}/bin" executable = "${wsadmin.base.command}" output = "waslist.txt" logError = "true">
<arg line = "-conntype ${ws.conn.type}" />
<arg line = "-host ${ws.host.name}" />
<arg line = "-port ${ws.port.name}" />
<arg line = "-username ${ws.user.name}" />
<arg line = "-password ${ws.password.name}" />
<arg line = "-c" />
<arg value = "${ws.list.command}" />
</exec>
</target>
<target name = "websphere-install-application" depends = "websphere-uninstall-application">
<exec executable = "${websphere.home.dir}/bin/${wsadmin.base.command}" logError = "true" outputproperty = "websphere.install.output" failonerror = "true">
<arg line = "-conntype ${ws.conn.type}" />
<arg line = "-host ${ws.host.name}" />
<arg line = "-port ${ws.port.name}" />
<arg line = "-username ${ws.user.name}" />
<arg line = "-password ${ws.password.name}" />
<arg line = "-c" />
<arg value = "${ws.install.command} ${dist.dir}/${artifact.filename}.war {-appname ${app.deployed.name} -server ${was.server.name} -contextroot ${app.contextroot.name}}" />
<arg line = "-c" />
<arg value = "${ws.save.command}" />
<arg line = "-c" />
<arg value = "${ws.setManager.command}" />
<arg line = "-c" />
<arg value = "${ws.startapp.command} ${app.deployed.name}" />
<arg line = "-c" />
<arg value = "${ws.save.command}" />
</exec>
<echo message = "${websphere.install.output}" />
</target>
<target name = "websphere-uninstall-application">
<exec executable = "${websphere.home.dir}/bin/${wsadmin.base.command}" logError = "true" outputproperty = "websphere.uninstall.output" failonerror = "false">
<arg line = "-conntype ${ws.conn.type}" />
<arg line = "-host ${ws.host.name}" />
<arg line = "-port ${ws.port.name}" />
<arg line = "-username ${ws.user.name}" />
<arg line = "-password ${ws.password.name}" />
<arg line = "-c" />
<arg value = "${ws.setManager.command}" />
<arg line = "-c" />
<arg value = "${ws.stopapp.command} ${app.deployed.name}" />
<arg line = "-c" />
<arg value = "${ws.save.command}" />
<arg line = "-c" />
<arg value = "${ws.uninstall.command} ${app.deployed.name}" />
<arg line = "-c" />
<arg value = "${ws.save.command}" />
</exec>
<echo message = "${websphere.uninstall.output}" />
</target>
Дополнительная информация и образцы здесь: незаконныйargumentexception.blogspot.com/2008/08/…