2015-10-26 2 views
0

Я использую gradle для создания настольного приложения, и я пытаюсь создать дистрибутив для своего приложения. Я использовал плагин приложения (который наследует плагин распространения), и когда я вызываю задачу distZip, я хотел бы создать файл в этом zip с файлом конфигурации со значениями, переданными в качестве аргументов из команды gradle. Например: когда я звонюGradle Distribution create File

gradle build distZip --project-prop myproperty=myvalue 

Я хочу создать файл свойств внутри дистрибутива zip с этим контентом. Я пробовал следующий подход без успеха:

applicationDistribution.into(".") { 
    new File("server.properties").write("myproperty=$myproperty") 
} 

Когда я делаю это, он создает файл в корневом каталоге проекта вместо корня распределения молнии. Кто-нибудь знает, как создать этот файл внутри дистрибутива zip?

ответ

0

Это будет:

apply plugin: 'distribution' 

distZip { 
    def p = File.createTempFile('aaa', 'bbb') 
    p.write "my.property: $project.myProperty\n" 
    p.deleteOnExit() 

    from(p) { 
     rename { 
     'server.properties' 
     } 
    } 
} 

и призывание:

gradle clean distZip -Pmyproperty=bolo 

Вам необходимо настроить задачу, которая подготавливает распределение - в данном конкретном случае distZip - это задача типа Zip (Copy) ,

Будьте осторожны с ссылочными свойствами с помощью project.myproperty. Если не найдено myproperty, будет выбрано исключение.

+0

Если я хорошо понимаю, мне нужно будет иметь файл уже в моем проекте ... правильно? – Augusto

+0

С этим конструктом 'project.file ('lol')', да. Поскольку метод 'file' разрешает файл относительно пути к проекту. Попробуйте использовать «новый файл» («абсолютный путь к внешнему файлу») '. – Opal

+0

эта работа так же, как и в моем примере. Файл создается внутри моего проекта, а не в дистрибутиве. Мне нужен файл только в полученном zip из дистрибутива, а не в моем проекте. – Augusto