2015-04-13 1 views
0

Я использую ant + плющ для проекта. Поэтому давайте предположим, что мне нужно запустить задачу <sql для муравья, поэтому мне нужно получить драйвер jdbc 1st. Кроме того, во время компиляции проекта требуется драйвер. Так что я хочу иметь 2 конфигурации:Извлеките конкретную банку из муравьиного плюща

  • по умолчанию: для получения драйвера JDBC и других зависимостей проекта
  • JDBC: Для получения только драйвер JDBC.

А потом просто запустить задачу извлечения с различными конфигурациями, как что:

<!--Fetch all project dependencies, including jdbc driver--> 
<ivy:retrieve pattern="${build.lib.home}/[artifact].[ext]" conf="default" /> 


<!-- Fetch only jdbc driver--> 
<ivy:retrieve pattern="${build.lib.home}/[artifact].[ext]" conf="jdbc" /> 

ivy.xml

<?xml version="1.0" encoding="UTF-8"?> 
<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"> 
    <info organisation="" module="notebook-ivy"/> 

    <configurations> 
     <conf name="default" visibility="public" extend="jdbc"/> 
     <conf name="jdbc" visibility="public"/> 
    </configurations> 

    <dependencies> 
     <dependency org="mysql" name="mysql-connector-java" rev="5.1.6" conf="jdbc->default"/> 
     <dependency org="org.apache.camel" name="camel-core" rev="2.15.1"/> 

    </dependencies> 
</ivy-module> 

Я использую общественный mavencentral, так что я не могу изменить зависимость конфигурация на сервере: ivysettings.xml

<ivysettings> 
    <settings defaultResolver="chain"/> 
    <resolvers> 
    <chain name="chain"> 
     <ibiblio name="central" m2compatible="true" root="http://central.maven.org/maven2/"/> 
    </chain> 
    </resolvers> 
</ivysettings> 

Описанная выше конфигурация работает. Но это выглядит запутанным, когда по умолчанию расширяет jdbc и jdbc расширяет по умолчанию одновременно. Я новичок в плющом, поэтому мой вопрос: если это правильный способ использования конфигураций для плюща.

ответ

1

Операция «extends» позволяет вам выполнить операцию установки соединения на банках в конфигурации плюща, так что это будет работать нормально.

Я предпочитаю моделировать конфигурации на моих ожидаемых требований пути к классам:

<configurations> 
    <conf name="compile" description="Dependencies required to build project"/> 
    <conf name="compile" description="Dependencies required to run project" extends="compile"/> 
    <conf name="test" description="Dependencies required to test project" extends="runtime"/> 
    <conf name="build" description="ANT build tasks"/> 
</configurations> 

Задача плющ cachepath затем могут быть использованы для создания этих путей в файле сборки:

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

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

Этот подход означает что-то вроде jdbc jar будет сопоставлено с конфигурацией «компиляции», что делает его доступным для задач javac:

<target name="compile" depends="resolve"> 
    .. 
    <javac ... classpathref="compile.path"/> 
    </target> 

Но также включен в конфигурации «во время выполнения», который будет сохранен на диск в качестве зависимости при сборке пакета банки:

<target name="build" depends="compile"> 
    <ivy:retrieve pattern="${dist.dir}/lib/[artifact].[ext]" conf="runtime"/> 

    <manifestclasspath property="jar.classpath" jarfile="${dist.jar}"> 
     <classpath> 
     <fileset dir="${dist.dir}/lib" includes="*.jar"/> 
     </classpath> 
    </manifestclasspath> 

    <jar destfile="${dist.jar}" basedir="${build.dir}/classes"> 
     <manifest> 
     <attribute name="Main-Class" value="${dist.main.class}"/> 
     <attribute name="Class-Path" value="${jar.classpath}"/> 
     </manifest> 
    </jar> 
    </target>