Сценарий Ant для выбора между несколькими версиями classpath

Я новичок в скриптах Ant.

ниже описание требования

в моей рабочей области есть различные проекты, и мне нужно, чтобы мой проект работал над RAD и Eclipse IDE, а также средой Websphere, tomcat и jboss. Я сделал специальные настройки для проекта, чтобы проект работал на RAD, Websphere и Eclipse и tomcat n jboss ..

но есть изменения в нескольких файлах, таких как classpath и несколько конфигурационных файлов.

это оставляет меня с тремя версиями рабочего пространства.

но моя идея состоит в том, чтобы иметь одно рабочее пространство с несколькими версиями classpath, например. classpath_eclipse, classpath_rad и т. д. и имеют скрипт ant, который будет выбирать между правильными файлами во время сборки в зависимости от того, какой иде.

Ребята, пожалуйста, предложите какой-нибудь подход, как я могу реализовать этот подход. совершенно новый для муравья. .: /

 Mukul Goel30 мая 2012 г., 11:13
Мне нужно, чтобы мое рабочее пространство работало на двух IDEs Eclipse as well as RAD. so I want ANT to generate the ".classpath" files. Yes the requirement for different classpaths is associated with different target environments as well as IDE. the dependency on environment is as u said. on IDE it occurs because i have some project related plugins that are RAD compatible but not eclipse. those plugin provide me with a set of library in RAD. whereas in eclipse i have to create a "User Library". so requirement to manage different classpaths is associated with different target environments as well as IDEs
 Mark O'Connor29 мая 2012 г., 19:54
Хотите управлять средой IDE или целевыми средами сборки? Подробности: Пути классов управляются по-разному в Eclipse и ANT .... Хотите, чтобы ANT генерировал & quot; .classpath & quot; файлы для тебя? Альтернативно, является ли требование управлять различными путями классов, связанными с различными целевыми средами? Например, у Tomcat не все банки упакованы с веб-сферой?

Ответы на вопрос(2)

Я предлагаю использоватьАпачский плющ для управления сложными путями классов. Он выводит ваши зависимости сборки в отдельныйivy.xml файл.

Во-вторых, ivy может автоматически загружать такие зависимости, уменьшая размер вашего проекта под контролем исходного кода.

Наконец, это решение на первый взгляд может показаться ужасно сложным. Преимущество состоит в том, что он совместим с другими технологиями сборки, такими какспециалист.

Example ivy.xml

Айви использует & quot; конфигурации & quot; управлять логическими группировками банок.

В этом примере код компилируется с использованием jar-файлов SLF4J, но во время выполнения используется другая реализация ведения журнала:

<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>

Notes:

The extends attribute enables the creation of jar union sets By default ivy will download from Maven Central (an open repository that now hosts approx 90% of Java open source software). Using the conf attribute you can associated a depedency against one or more of your locally defined configurations. Ivy can also be used to manage 3rd party ANT task dependencies build.xml

Задачи плюща ANT импортируются какantlib, Плющcachepath задача используется для превращения управляемой конфигурации плюща в обычный ANTпути и плющдоклад Задача создает отчет о зависимостях.

<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>
    ..
    ..

Плющизвлекать Задача используется для заполнения каталога на этапе упаковки вашего приложения:

<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 configuration files

Eclipse плагин для плюща есть в наличии.

http://ant.apache.org/ivy/ivyde/

Также возможно генерировать файлы конфигурации 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>
 28 июн. 2012 г., 21:14
@MukulGoel ....
 Mukul Goel28 июн. 2012 г., 10:54
используя плющ и шпунт выглядит довольно сложным, и яll have to redo all current implementation.. could u suggest some approach to implement what i asked in that second question ? because thats how the architect has suggested and the approach has been approved.. iмне придется пройти очень долгий путь, чтобы предложить новый подход .. :(
 Mukul Goel28 июн. 2012 г., 10:52
Привет, Марк, я не знал о том, чтобы снова задать тот же вопрос, новичок в этом форуме ... извинения.
 Mukul Goel03 июл. 2012 г., 09:04
эй метка .. я получил то, что ты говорил. подготовил проект и предложил изменения моей команде и архитектору. то, что мне предложили (и СКАЗАЛ: /), что мы не собираемся изменять процесс сборки. нам просто нужен какой-то скрипт, который пользователь запускает в первый раз, который устанавливает пути к классам и время выполнения, а также другие настройки и т. д., и после этого мы можем использовать наш обычный процесс сборки. Но ничего не могу с этим поделать. Спасибо за то, что познакомили меня с этой технологией. -Регардс Мукул
 28 июн. 2012 г., 21:11
Проблема, которую вы пытаетесь решить, не является тривиальной. Прежде всего, вы пытаетесь поддерживать несколько экземпляров двух разных инструментов сборки. У каждого свой формат файла. Во-вторых, фактически вы создаете свою собственную систему управления зависимостями ... Я видел очень большие проекты ANT, использующие файлы свойств для управления путями к классам модулей .... Это в конечном итоге становится индивидуальным решением, которое поймут один или два инженера по сборке. ...... Рассмотрим снова использование плюща. Наконец, есть также плагин плюща для взаимодействия с затмением. Это может избежать необходимости в отличном материале.
Решение Вопроса

Я хотел бы поделиться подходом, который я наконец реализовал.

Былиclasspath, settings и немногоproject config xmls которые зависели от времени выполнения.

В каждом проекте мы создалиruntime_classpah & Амп;runtime_settings а такжеconfigxml_runtime версия каждого файла.

Созданоtarget вant что принимаетruntime как параметр, он оценивает каждый проект & amp; копирует содержимоеclasspath_runtime вclasspath ,setting_runtime to settings.

И цель, которая отвергаетconfigxml с содержаниемconfigxml_runtime

 26 окт. 2012 г., 17:22
Это проблема, которую фреймворки управления зависимостями призваны решить для вас.
 Mukul Goel26 окт. 2012 г., 17:49
@ MarkO ', Коннор, вы правы, сэр, и, как я уже говорил, я читал оivy Мне понравилось. но решение о выборе не было в моих руках, и выше - подход, который мне предложили использовать, учитывая усилия, которые требовал плющ, и ограничения по срокам доставки.

Ваш ответ на вопрос