有没有办法在 build.gradle 中自动生成 gradle 依赖声明?

Is there a way to automatically generate the gradle dependencies declaration in build.gradle?

这是在将现有 java 项目转换为 gradle 项目的上下文中。

是否有工具或网络服务可以通过指向包含所有依赖 jar 的目录来帮助在 build.gradle 中生成 dependencies 声明?

通常没有这样的工具,但是如果所有的 jar 都是结构化的(我的意思是路径:com/google/guava/guava 等等),那么您自己编写这样的脚本应该很容易。

注意也可以通过以下方式导入整个文件夹来完成:

repositories {
    flatDir {
        dirs 'lib'
    }
}

dependencies {
    runtime fileTree(dir: 'libs', include: '*.jar')
}

在我对@Opal 的回答的评论中,我说我正在开发一个快速而肮脏的 groovy 脚本来实现这一点。之后我忘了附上脚本。对此表示歉意。

这是我的快速粗略的脚本。确实部分解决了目的。 希望有人可以改进它。


#! /usr/bin/env groovy

@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.5.2' )

import static groovyx.net.http.ContentType.JSON

import groovyx.net.http.RESTClient
import groovy.json.JsonSlurper
import groovy.util.slurpersupport.GPathResult
import static groovyx.net.http.ContentType.URLENC


//def artifactid = "activation"
//def version = "1.1"
//def packaging = "jar"
//
//def mavenCentralRepository = new RESTClient( "http://search.maven.org/solrsearch/select?q=a:%22${artifactid}%22%20AND%20v:%22${version}%22%20AND%20p:%22${packaging}%22&rows=20&wt=json".toString() )
////basecamp.auth.basic userName, password
//
//def response = mavenCentralRepository.get([:])
//println response.data.response.docs
//
//def slurper = new JsonSlurper()
//def parsedJson = slurper.parseText(response.data.toString());
//
//println parsedJson.response.docs.id

def inputFile = new File("input.txt");
def fileList = []
fileList = inputFile.readLines().collect {it.toString().substring(it.toString().lastIndexOf('/') + 1)}
def artifactIDvsVersionMap = [:]

fileList.collectEntries(artifactIDvsVersionMap) {
 def versionIndex = it.substring(0,it.indexOf('.')).toString().lastIndexOf('-')
 [it.substring(0,versionIndex),it.substring(versionIndex+1).minus(".jar")]
}

println artifactIDvsVersionMap

new File("output.txt").delete();

def output = new File("output.txt")
def fileWriter = new FileWriter(output, true)
def parsedGradleParameters = null
try {
 parsedGradleParameters = artifactIDvsVersionMap.collect {
  def artifactid = it.key
  def version = it.value
  def packaging = "jar"

  def mavenCentralRepository = new RESTClient( "http://search.maven.org/solrsearch/select?q=a:%22${artifactid}%22%20AND%20v:%22${version}%22%20AND%20p:%22${packaging}%22&rows=20&wt=json".toString() )

  def response = mavenCentralRepository.get([:])
  println response.data.response.docs.id

  def slurper = new JsonSlurper()
  def parsedJson = slurper.parseText(response.data.toString());
  def dependency = parsedJson.response.docs.id
  fileWriter.write("compile '${dependency}'")
  fileWriter.write('\n')
  sleep (new Random().nextInt(20));
  return parsedJson.response.docs.id
 }
} finally {
 fileWriter.close()
}

println parsedGradleParameters

Groovy 优点 - 如果代码不干净,请原谅。 :)