2013-09-17 2 views
0

У меня есть проект, который строится с использованием Gradle и плагина ivy-publish. Помимо создания JAR, build.gradle также выполняет задачу выполнения, которая выполняет XmlFileGenerator.main(), которая генерирует 5 XML-файлов (назовите их A, B, C, D и E). Я хочу опубликовать каждый из этих XML-файлов в нашем репозитории Ivy; каждый из них должен иметь одну и ту же группу и версию, но другой модуль и другое имя файла, и каждый должен иметь свой собственный ivy.xml, который отображает только сам.Gradle публикует несколько независимых артефактов

Я могу установить имя файла опубликованного файла, но имя модуля остается таким же, как имя моего проекта, и в результате все мои XML-файлы публикуются под тем же именем модуля, а не под независимыми из них.

Так, например, я хочу, чтобы A.xml был опубликован в {myLocalIvyRootDir}\my-group\A\{version}\xmls\A-{version}.xml, и я хочу, чтобы B.xml был опубликован в {myLocalIvyRootDir}\my-group\B\{version}\xmls\B-{version}.xml. Но вместо этого A публикуется в {myLocalIvyRootDir}\my-group\my-project\{version}\xmls\A-{version}.xml, а B публикуется рядом с ним по адресу {myLocalIvyRootDir}\my-group\my-project\{version}\xmls\B-{version}.xml.

Вот соответствующее подмножество build.gradle (показывать только А, но не BE):

apply plugin: 'ivy-publish' 

group = 'my-group' 

publishing { 
    publications { 
     ivy(IvyPublication) { 
      artifact jar 
     } 
     aXml(IvyPublication) { 
      artifact('target/A.xml') { 
       name = 'A' 
       extension = 'xml' 
       type = 'xml' 
      } 
     } 
    } 
} 

mainClassName = 'my-group.my-project.XmlFileGenerator' 

Я попытался определением свойства модуля на публикации с этим кодом:

 aXml(IvyPublication) { 
      module 'A' 
      artifact('target/A.xml') { 
       name = 'A' 
       extension = 'xml' 
       type = 'xml' 
      } 
     } 

Но я получаю следующее сообщение об ошибке:

> org.gradle.api.internal.MissingMethodException: Could not find method module() for arguments [A] on org.gradle.api.p[email protected]32384c50.

И я никогда попытался изменить rootProject.name динамически с кодом, как:

publishing { 
    publications { 
     ivy(IvyPublication) { 
      artifact jar 
     } 
     project.metaClass.getName {"A"} 
     aXml(IvyPublication) { 
      artifact('target/A.xml') { 
       name = 'A' 
       extension = 'xml' 
       type = 'xml' 
      } 
     } 
    } 
} 

Это не производится без ошибок, но никаких изменений в поведении.

Я чувствую, что я, вероятно, просто пропустил что-то маленькое, но не знаю, что это такое. Может кто-то указать мне верное направление?

ответ

0

Оказалось, что этот конкретный проект все еще указывал на Gradle 1.6, прежде чем эти свойства были доступны (они были добавлены в 1.7). Таким образом, все, что нужно было, было указать на 1.7, и все работало по назначению.

Смежные вопросы