2015-06-26 2 views
1

Я работаю над проектом, который использует gradle и плагин jfrog для публикации в artifactory. Важные фрагменты кода являются следующие:Как изменить область выполнения для масштабирования, чтобы скомпилировать область?

plugins { 
    id "java" 
    id "idea" 
    id "groovy" 
    id "pmd" 
    id "findbugs" 
    id "maven-publish" 
    id "com.jfrog.artifactory" version "3.1.1" 
} 

dependencies { 
    compile 'com.google.guava:guava:18.0' 
    compile 'com.mashape.unirest:unirest-java:1.4.5' 
    compile 'log4j:log4j:1.2.14' 
} 

artifactory { 
    contextUrl = "https://SOME_SERVER/artifactory" 
    publish { 
     repository { 
      repoKey = 'libs-snapshot-local' 
      username = artifactory_username 
      password = artifactory_password 
      maven = true 
     } 
     defaults { 
      publications ('mavenJava') 
     } 
    } 
} 

publishing { 
    publications { 
     mavenJava(MavenPublication) { 
      from components.java 
     } 
    } 
} 

Когда я делаю Gradle artifactoryPublish все, кажется, работает хорошо. Публикуются артефакты и создается файл pom.

сожалению зависимостей в файле есть весь п выполнения области видимости:

<?xml version="1.0" encoding="UTF-8"?> 
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.whatsoever</groupId> 
    <artifactId>some-app</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <dependencies> 
    <dependency> 
     <groupId>com.google.guava</groupId> 
     <artifactId>guava</artifactId> 
     <version>18.0</version> 
     <scope>runtime</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.mashape.unirest</groupId> 
     <artifactId>unirest-java</artifactId> 
     <version>1.4.5</version> 
     <scope>runtime</scope> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.14</version> 
     <scope>runtime</scope> 
    </dependency> 
    </dependencies> 
</project> 

Вместо этого выполнение объема, они должны иметь объем компиляции. Что я делаю не так?

ответ

4

Никогда не пробовал это на PRACTIVE, но вы можете попробовать использовать publication.pom.withXml конфигурацию блока для внесения изменений в генерируемом П:

publishing { 
    publications { 
     mavenJava(MavenPublication) { 
      from components.java 

      pom.withXml { 
       asNode().dependencies.'*'.findAll() { 
        it.scope.text() == 'runtime' && project.configurations.compile.allDependencies.find { dep -> 
         dep.name == it.artifactId.text() 
        } 
       }.each() { 
        it.scope*.value = 'compile' 
       } 
      } 
     } 
    } 
} 

Кроме того, это известное ограничение нового издательского плагина, и я нашел решение в this thread.

+0

Это сработало! Тем не менее я решил пойти с традиционным подходом, пока этот плагин больше не инкубирует. – u6f6o

+1

FYI: Если ваш проект Gradle имеет несколько модулей, один из них зависит от другого. Вам может потребоваться удалить строку «{dep -> dep.name == it.artifactId.text() }" Поскольку это фактически изменит тег artifactId в сгенерированном pom.xml –