0

Ant スクリプトは初めてです。

以下は要件の説明です

私のワークスペースにはさまざまなプロジェクトがあり、プロジェクトを RAD と Eclipse IDE だけでなく、Websphere 、 tomcat 、および jboss 環境でも動作させる必要があります。プロジェクトを RAD と websphere と eclipse で動作させるために、プロジェクト固有の設定を行いました。 tomcat n jboss..

ただし、classpath n のようないくつかの構成ファイルに変更があります。

これにより、3 つのバージョンのワークスペースが残ります。

しかし、私の考えは、たとえば、複数のバージョンのクラスパスを持つ 1 つのワークスペースを持つことです。classpath_eclipse、classpath_rad など。どの ide に応じてビルド中に適切なファイルを選択する ant スクリプトがあります。

ですから、このアプローチをどのように実装できるか、いくつかのアプローチを提案してください。アリにとってまったく新しい。.:/

4

2 に答える 2

1

複雑なクラスパスを管理するには、 Apacheivyを使用することをお勧めします。ビルドの依存関係を別のivy.xmlファイルに外部化します。

次に、ivyはそのような依存関係を自動的にダウンロードして、ソース管理下のプロジェクトのサイズを縮小できます。

最後に、このソリューションは一見するとひどく複雑に見えるかもしれません。利点は、 Mavenなどの他のビルドテクノロジーと互換性があることです。

ivy.xml

Ivyは、「構成」を使用してjarの論理グループを管理します。

この例では、コードはSLF4J api jarに対してコンパイルされますが、実行時に異なるロギング実装を使用します。

<ivy-module version="2.0">
    <info organisation="com.myspotontheweb" module="demo"/>

    <configurations>
        <conf name="compile" description="Required to compile application"/>
        <conf name="runtime.simple"  description="Runtime environment with minimal logging" extends="compile"/>
        <conf name="runtime.complex" description="Runtime environment with logback enabled" extends="compile"/>
        <conf name="test"    description="Required for test only" extends="runtime.simple"/>
        <conf name="build"   description="ANT tasks used by build"/>
    </configurations>

    <dependencies>
        <!-- compile dependencies -->
        <dependency org="org.slf4j" name="slf4j-api" rev="1.6.4" conf="compile->default"/>

        <!-- simple runtime dependencies -->
        <dependency org="org.slf4j" name="slf4j-simple" rev="1.6.4" conf="runtime.simple->default"/>

        <!-- complex runtime dependencies -->
        <dependency org="ch.qos.logback" name="logback-classic" rev="1.0.3" conf="runtime.complex->default"/>

        <!-- test dependencies -->
        <dependency org="junit" name="junit" rev="4.10" conf="test->default"/>

        <!-- Build dependencies -->
        <dependency org="org.codehaus.groovy" name="groovy-all" rev="1.8.6" conf="build->default"/>
    </dependencies>

</ivy-module>

ノート:

  • extends属性を使用すると、jarユニオンセットを作成できます。
  • デフォルトでは、ivyはMaven Central(Javaオープンソースソフトウェアの約90%をホストするオープンリポジトリ)からダウンロードします。
  • conf属性を使用すると、ローカルで定義された1つ以上の構成に対して依存関係を関連付けることができます。
  • Ivyは、サードパーティのANTタスクの依存関係を管理するためにも使用できます

build.xml

ivyANTタスクはantlibとしてインポートされます。ivy cachepathタスクは、ivy管理対象構成を通常のANTパスに変換するために使用され、ivyレポートタスクは依存関係レポートを生成します。

<project name="demo" default="build" xmlns:ivy="antlib:org.apache.ivy.ant">

    <target name="init">
        <ivy:resolve/>

        <ivy:report todir='${ivy.reports.dir}' graph='false' xml='false'/>

        <ivy:cachepath pathid="compile.path" conf="compile"/>
        <ivy:cachepath pathid="runtime.simple.path" conf="runtime.simple"/>
        <ivy:cachepath pathid="runtime.complex.path" conf="runtime.complex"/>
        <ivy:cachepath pathid="test.path"    conf="test"/>
        <ivy:cachepath pathid="build.path"   conf="build"/>
    </target>
    ..
    ..

ivy取得タスクは、アプリケーションのパッケージ化フェーズ中にディレクトリにデータを入力するために使用されます。

<target name="war">
    <ivy:retrieve pattern="${build.dir}/libs/[artifact].[ext]" conf="runtime.complex"/>

    <war destfile="myapp.war" webxml="src/metadata/myapp.xml">
        <fileset dir="${src.dir}/html/myapp"/>
        <fileset dir="${src.dir}/jsp/myapp"/>
        <lib dir="${build.dir}/libs"/>
        <classes dir="${build.dir}/classes"/>
    </war>
</target>

IDE構成ファイル

ivy用のEclipseプラグインが利用可能です。

埋め込まれたGroovyタスクを使用してIDE構成ファイルを生成することも可能です。以下はEclipseの例です。

<target name="eclipse">
    <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpathref="build.path"/>

    <ivy:cachefileset setid="libfiles" conf="compile"/>

    <groovy>
    <arg value="${src.dir}"/>
    <arg value="${build.dir}/classes"/>

    import groovy.xml.MarkupBuilder

    //
    // Generate the project file
    //
    project.log("Creating .project")

    new File(".project").withWriter { writer ->
        def xml = new MarkupBuilder(writer)

        xml.projectDescription() {
            name(project.name)
            comment()
            projects()
            buildSpec() {
                buildCommand() {
                    name("org.eclipse.jdt.core.javabuilder")
                    arguments()
                }
            }
            natures() {
                nature("org.eclipse.jdt.core.javanature")
            }
        }
    }

    //
    // Generate the classpath file
    //
    // The "lib" classpathentry fields are populated using the ivy artifact report
    //
    project.log("Creating .classpath")

    new File(".classpath").withWriter { writer ->
        def xml = new MarkupBuilder(writer)

        xml.classpath() {
            classpathentry(kind:"src",    path:args[0])
            classpathentry(kind:"output", path:args[1])
            classpathentry(kind:"con",    path:"org.eclipse.jdt.launching.JRE_CONTAINER")

            project.references.libfiles.each {
                classpathentry(kind:"lib", path:it)
            }
        }
    }
    </groovy>        
</target>
于 2012-05-30T21:55:47.053 に答える
0

最終的に実装したアプローチを共有したいと思います。

classpathsettingsおよびproject config xmlsランタイムに依存するものもありました。

各プロジェクトで、各ファイル のruntime_classpah&バージョンruntime_settingsを作成しました。configxml_runtime

パラメータとして受け取る を作成し、各プロジェクトを反復処理して の内容をにtargetコピーします。antruntimeclasspath_runtimeclasspathsetting_runtime to settings

configxmlそして、の内容で上書きするターゲットconfigxml_runtime

于 2012-10-26T10:06:50.317 に答える