سؤال

أحاول إقناع مقدمي الخدمة باستخدام ANT بدلاً من Rational Application Development حتى يتمكن أي شخص من إعادة ترجمة الحل وإعادة فحصه وإعادة نشره في أي مكان وفي أي وقت وبأي حال.:ص

لقد بدأت إنشاء ملف build.xml لمشروع يقوم بإنشاء ملف JAR ولكنني توقفت عند هذا الحد وأحتاج إلى أمثلة حقيقية لمقارنة الملاحظات.أصدقائي الطيبين!ليس لدي أي شخص قريب للدردشة حول هذا!

هذا هو بلدي build.xml حتى الآن.

(*) لقد قمت بتحرير سؤالي بناءً على اقتراح لاستخدام Pastebin.ca

هل كانت مفيدة؟

المحلول

بيئتي:فيدورا 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>

ملحوظات:

  • يمكنك تشغيل هذا مرة واحدة فقط!لا يمكنك التثبيت إذا كان اسم التطبيق قيد الاستخدام - راجع مهام أخرى مثل com.wsUninstallApp
  • ربما لن يبدأ التطبيق أيضًا
  • تحتاج إلى تشغيل هذا على الخادم والبرنامج النصي هش للغاية

البدائل

ربما سأستخدم ملحقات إدارة Java (JMX).يمكنك كتابة servlet لتحميل الملفات الذي يقبل EAR ويستخدم نشر MBeans لنشر EAR على الخادم.يمكنك فقط نشر الملف عبر HTTP.سيؤدي هذا إلى تجنب أي تبعيات WAS API على جهاز التطوير/الإنشاء الخاص بك ويمكن أن يكون مستقلاً عن أي مشروع واحد.

نصائح أخرى

إليك بعض الوظائف نفسها إذا لم تكن لديك مهام 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>

نقطة بداية جيدة، يمكن أن يكون هذا البرنامج المساعد مخضرم, ، ليس للاستخدام، أو ربما نعم، ولكن هذا المخضرم مبني على مهمة النمل.إذا رأيت WAS5+Plugin+Mojo.zip\src\main\scripts\was5.build.xml

أو كما قال "McDowell"، يمكنك استخدام "مهام Ant لخادم تطبيقات WebSphere (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>

رابط آخر مفيد يمكن أن يكون هذا.

إذا كنت تريد فقط التجول، فلماذا لا تستخدم netbeans IDE لإنشاء ملفات أذنك.إذا قمت بإنشاء مشروع مؤسسي، فسيتم إنشاء ملفات النمل لك تلقائيًا.جيد للنماذج الأولية والبدء للتو :-)

يوجد أيضًا مكون إضافي يسمح بالنشر الآلي ولكن هذا يبدو مهتزًا للغاية!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top