【问题标题】:Publish kotlin library (Not Android) to jCenter将 kotlin 库(非 Android)发布到 jCenter
【发布时间】:2016-09-25 19:45:57
【问题描述】:

我有用 Kotlin 编写的 Intellij Idea 2016.1 gradle-application(Not Android)。我需要将它放在 jCenter 中并作为依赖项添加到 Android 应用程序中。我找不到任何关于它的信息。所有参考资料均参考 Android 项目。我不知道如何做到这一点。寻找详细说明

【问题讨论】:

标签: intellij-idea gradle kotlin jcenter


【解决方案1】:

迈克尔的回答是正确的。但是如果你执行 bintrayUpload,kotlin 依赖会被包含到 .pom 文件中。当您将库包含在 gradle-project 中时,这会导致两次添加 kotlin 库。这会导致 DuplicateFileException。我不知道怎么了。也许我犯了一些愚蠢的错误。但如果这是您的情况,您可以使用 Michael 的 build.gradle 执行 gradlew build 以生成 .jar 和 source.jar。然后,您可以创建自己的不依赖项的 .pom 文件,并手动将 3 个文件(jar、source.jar 和 .pom)部署到 bintray。然后将库链接到 jCenter。

例如:

使用 ./gradlew bintrayUpload 生成 .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>ru.livemaster</groupId>
  <artifactId>LongToWords</artifactId>
  <version>0.1</version>
  <dependencies>
    <dependency>
      <groupId>org.jetbrains.kotlin</groupId>
      <artifactId>kotlin-stdlib</artifactId>
      <version>1.0.2</version>
      <scope>runtime</scope>
    </dependency>
  </dependencies>
</project>

您自己的 .pom 用于在不依赖 kotlin 的情况下进行部署:

<?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>ru.livemaster</groupId>
  <artifactId>LongToWords</artifactId>
  <version>0.1</version>
</project>

【讨论】:

    【解决方案2】:

    将 Kotlin 库发布到 jCenter 与 JAva 库完全一样。

    buildscript {
      ext.kotlinVersion = '1.0.2'
    
      repositories {
        mavenCentral()
      }
    
      dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
      }
    }
    
    plugins {
      id "com.jfrog.bintray" version "1.6"
    }
    
    apply plugin: 'kotlin'
    apply plugin: 'maven-publish'
    
    group '<groupId>'
    version '<version>'
    sourceCompatibility = 1.6
    
    repositories {
      mavenCentral()
    }
    
    dependencies {
      compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
    }
    
    bintray {
      user = '<bintray user name>'
      key = '<bintray API key>'
      publications = ['mavenJava']
    
      pkg {
        repo = '<repository name on bintray>'
        name = '<artifactId>'
    
        version {
          name = project.version
          released = new Date()
          vcsTag = "v${project.version}"
        }
      }
    }
    
    task sourcesJar(type: Jar, dependsOn: project.classes) {
      from sourceSets.main.allSource
    }
    
    task javadocJar(type: Jar, dependsOn: project.javadoc) {
      from javadoc.destinationDir
    }
    
    artifacts {
      archives sourcesJar, javadocJar
    }
    
    publishing {
      publications {
        mavenJava(MavenPublication) {
          artifactId project.bintray.pkg.name
          from components.java
    
          artifact sourcesJar {
            classifier = 'sources'
          }
          artifact javadocJar {
            classifier = 'javadoc'
          }
        }
      }
    }
    

    在 bintray 上创建一个存储库,然后调用 ./gradlew bintrayUpload。如果您不要求 bintray 插件发布上传的依赖项,则必须从您的 bintray 帐户手动发布它。

    发布依赖项后,您可以从您的帐户将其链接到jCenter。在jCenter 上发布后,您可以将其用作 Android 项目的常规依赖项。

    【讨论】:

      猜你喜欢
      • 2017-11-14
      • 2017-03-10
      • 2015-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-17
      • 2017-11-12
      • 2017-02-19
      相关资源
      最近更新 更多