2015-11-11 6 views
0

У меня есть сценарий градации. В этом скрипте я установил некоторые публикации.Устанавливайте хранилища и версию/revison динамически в градиенте

Позже в скрипте у меня есть задача, которая считывает BuildNumber из файла и увеличивает его. Чем изменится версия проекта.

Теперь мой вопрос: возможно ли изменить версию/версию после инициализации «Публикации» -PlugIn? Если я не установлю новую версию, «Публикация» -PlugIn вызовет ошибку n. Если я изменю версию, отредактировав дескриптор, плагин говорит, что не разрешается напрямую редактировать дескриптор.

Я также хочу изменить репозиторий-url, основываясь на номере сборки.

Кто-нибудь знает об исправлении или имеет такую ​​же проблему?

publishing { 
    publications { 
     ivy(IvyPublication) { 
      organisation project.group 
      module project.name 
      revision project.version 
      descriptor.status = 'milestone' 

      from components.java 

      artifact(sourceJar) { 
       type "source" 
       conf "runtime" 
      } 
     } 
     maven(MavenPublication) { 
      groupId project.group 
      artifactId project.name 
      version project.version 

      from components.java 
     } 
    } 
    repositories { 
     ivy { 
      // change to point to your repo, e.g. http://my.org/repo 
      url "P:/Java/Repo/ivy" 
     } 
     maven { 
      // change to point to your repo, e.g. http://my.org/repo 
      url "P:/Java/Repo/maven" 
     } 
    } 
} 

Вот мой скрипт для увеличения сборки номер

def incVersion(project) { 

    project.versionInced = true 

    def versionPropsFile = file("${project.rootDir}/version.properties") 

    if (!versionPropsFile.canRead()) { 
     versionPropsFile.createNewFile(); 
    } 

    def Properties versionProps = new Properties() 

    versionProps.load(new FileInputStream(versionPropsFile)) 

    if(versionProps['build_version'] == null) 
    { 
     versionProps['build_version'] = 0; 
    } 

    def code = versionProps['build_version'].toInteger()+1; 

    versionProps['build_version']=code.toString() 
    versionProps.store(versionPropsFile.newWriter(), null) 

    project.projectInfos.version = project.version + "." + code.toString() 
    project.version = project.projectInfos.version 

    println "Version: "+project.version 

    return project.version 
} 

ответ

1

Если я хорошо понимал, да, это может быть сделано динамически. Вы можете передать версию во время выполнения gradle через свойство проекта (-P) или через системное свойство (-D).

Это будет:

gradle <some_task> -PsomeVersion=<version> 

Вы должны изменить Gradle скрипта для чтения свойства, так:

publishing { 
    publications { 
     ivy(IvyPublication) { 
      revision project.hasProperty('someVersion') ? project.someVersion : '<HERE YOU NEED TO PUT DEFAULT VERSION OR MAYBE THROW EXCEPTION IF EMPTY>' 
      //... 
     } 
    } 
} 

Если не будет проверять, если проект имеет свойство (с использованием hasProperty метод на экземпляр проекта), MissingPropertyException будет выброшен.

+1

Можно ли прочитать его из файла (с градиентом) – schnawel007

+0

@ schnawel007, да он также будет работать. – Opal

+0

Я добавил скрипт для увеличения номера сборки, можете ли вы показать мне, как я мог бы использовать сгенерированное число в блоке публикации? – schnawel007