Gradle无法发布多个maven本机工件

时间:2014-09-01 19:37:50

标签: maven gradle artifact

我似乎无法让Gradle将多个工件发布到Maven存储库。它发布了一些,但不是全部,我不知道为什么。目标是调试&发布版本的静态库,为OS X和Windows(总共4个静态库)构建。 OS X库存储但Windows不存储。如果我修改过滤器闭包以便过滤掉OS X库,则不存储任何内容。

model {
  buildTypes {
    debug
    release
  }

  platforms {
    "osx-x86_64" {
        operatingSystem "osx"
        architecture "x86_64"
    }

    "windows-x86_64" {
        operatingSystem "windows"
        architecture "x86_64"
    }
  }

  toolChains {
    // OS X and Windows toolchains (Clang and Mingw) described here
    // - they build the artifacts I wish to store ok
    // just removed for clarity       
  }

}  // end of model

libraries {
    saveMe {}
}

nativeArtifacts {
    libSaveMe {
        from (libraries.saveMe) { it instanceof StaticLibraryBinary && 
            (it.targetPlatform.name == "osx-x86_64" ||
            it.targetPlatform.name == "windows-x86_64")     
        // if I make this closure on the line above something like:
        // it instanceof StaticLibraryBinary && it.targetPlatform.name == "windows-x86_64"
        // then nothing is saved in the Maven repo  
        }
    }
}

publishing {
    repositories {
        maven {
            credentials {
                username = 'user'
                password = 'password'
            }
            url "http://hostname.com/path/to/repo"
        }
    }
    publications {
        mavPub(MavenPublication) {
            from nativeArtifacts.libSaveMe
        }       
    }               
}

我使用了一个非常好的外部插件(Gradle Native Artifacts Plugin,由Serge Gebhardt @sgeb(?)编写)但在我尝试理解他的代码之前(我在Gradle初学者) ),我以为我会问,看看是否有明显的错误。

我已经尝试将logger语句放入过滤器闭包中,我可以看到正在尝试调试/释放静态/共享库的所有可能组合,并且过滤器正确识别是否应该是库的真/假保存,但它没有成为Maven。

我是否可以在发布{}(或任务)中使用调试行来查看nativeArtifacts.libSaveMe集合的实际内容是什么?

1 个答案:

答案 0 :(得分:0)

好的,故事的寓意是:永远不要假设,检查。在这种情况下,请检查语句:

toolChains {
    // OS X and Windows toolchains (Clang and Mingw) described here
    // - they build the artifacts I wish to store ok
    // just removed for clarity       
  }

实际上是真的。它不是。

发布任务由CI服务器完成,工具链无法在CI服务器上构建Windows工件,但它在本地计算机上工作(由于安装mingw工具链时出现配置错误) 。工具链失败是在没有错误的情况下发生的(除非在--debug中运行)因此对我来说是不可见的,因为工具链正在被不能创建工件的非Windows编译器所取代。