| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| import java.nio.file.* |
| import java.nio.file.attribute.BasicFileAttributes |
| |
| plugins { |
| id 'java' |
| id 'idea' |
| id 'com.google.protobuf' version '0.8.13' |
| id 'maven' |
| id 'maven-publish' |
| id 'project-report' |
| id 'net.researchgate.release' version '2.6.0' |
| id "io.spring.dependency-management" version "1.0.4.RELEASE" |
| } |
| |
| group=theGroup |
| version=theVersion |
| sourceCompatibility=theSourceCompatibility |
| |
| repositories { |
| mavenCentral() |
| mavenLocal() |
| } |
| |
| ext { |
| genDirectory = "$projectDir/gen" |
| distDirectory = "$projectDir/distribution" |
| pythonBuildDirPath = "${file(buildDir.path + '/python/nexusproto').path}" |
| } |
| |
| dependencyManagement { |
| imports { |
| mavenBom 'org.apache:apache:18' |
| } |
| } |
| |
| protobuf { |
| |
| generatedFilesBaseDir = genDirectory |
| |
| // Configure the protoc executable |
| protoc { |
| // Download from repositories |
| artifact = 'com.google.protobuf:protoc:3.4.0' |
| } |
| |
| plugins { |
| // Define a plugin with name 'grpc' |
| grpc { |
| artifact = 'io.grpc:protoc-gen-grpc-java:1.9.0' |
| } |
| } |
| |
| generateProtoTasks { |
| all().each { task -> |
| task.builtins { |
| python { |
| outputSubDir = 'python' |
| } |
| } |
| } |
| } |
| |
| } |
| |
| task writeNewPom { |
| doLast { |
| pom {}.writeTo(file(buildDir.path + "/poms/${project.name}-${project.version}.xml")) |
| } |
| } |
| |
| publishing { |
| publications { |
| mavenJava(MavenPublication) { |
| from components.java |
| } |
| } |
| } |
| |
| assemble.doLast { |
| File pythonbuilddir = file(pythonBuildDirPath) |
| |
| File pythonsource = file('src/main/python') |
| |
| Files.walkFileTree(pythonsource.toPath(), new SimpleFileVisitor<Path>() { |
| @Override |
| public FileVisitResult preVisitDirectory(final Path dir, final BasicFileAttributes attrs) throws IOException { |
| Files.createDirectories(pythonbuilddir.toPath().resolve(pythonsource.toPath().relativize(dir))) |
| return FileVisitResult.CONTINUE |
| } |
| |
| @Override |
| public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs) throws IOException { |
| Files.copy(file, pythonbuilddir.toPath().resolve(pythonsource.toPath().relativize(file)), StandardCopyOption.REPLACE_EXISTING) |
| return FileVisitResult.CONTINUE |
| } |
| }) |
| |
| Files.move(file(pythonbuilddir.path + '/nexusproto/setup.py').toPath(), file(pythonbuilddir.path + '/setup.py').toPath(), StandardCopyOption.REPLACE_EXISTING) |
| |
| setVersionInPythonModule(pythonbuilddir) |
| |
| File generatedPython = file("$genDirectory/main/python/DataTile_pb2.py") |
| |
| Files.copy(generatedPython.toPath(), file(pythonbuilddir.path + '/nexusproto/DataTile_pb2.py').toPath(), StandardCopyOption.REPLACE_EXISTING) |
| } |
| |
| updateVersion.doLast { |
| setVersionInPythonModule(file(pythonBuildDirPath)) |
| } |
| |
| task checkPython { |
| checkPython.ext.python = null |
| checkPython.ext.pip = null |
| doLast { |
| def pythonExecutable = ['python', 'python3', 'python2.7'].find { python -> |
| try { |
| def check = "import sys; sys.exit(0 if sys.version_info >= (2,7) else 1)" |
| return [python, "-c", check].execute().waitFor() == 0 |
| } catch (IOException ignored) { |
| return false |
| } |
| } |
| |
| def pipExecutable = ['pip', 'pip3'].find { pip -> |
| try { |
| return [pip, "-v"].execute().waitFor() == 0 |
| } catch (IOException ignored) { |
| return false |
| } |
| } |
| |
| if (pythonExecutable == null || pipExecutable == null) { |
| throw new GradleException('Build requires Python and Pip.') |
| } else { |
| checkPython.ext.python = pythonExecutable |
| checkPython.ext.pip = pipExecutable |
| } |
| } |
| } |
| |
| task tarPython(type: Tar, dependsOn: [assemble]) { |
| destinationDir = file(project.ext.distDirectory) |
| archiveName = "${project.name}-${project.version}.tar.gz" |
| compression = Compression.GZIP |
| from(file(buildDir.path + '/python')) { |
| include '**/*' |
| } |
| doLast { |
| setVersionInPythonModule(file(pythonBuildDirPath)) |
| } |
| } |
| |
| task pythonInstall(dependsOn: [checkPython, tarPython]){ |
| doLast { |
| def installed |
| def installCommand = [checkPython.ext.pip, 'install', tarPython.archivePath, '--force'] |
| try{ |
| def process = installCommand.execute() |
| process.waitFor() |
| logger.debug("Standard out from executing \"${installCommand.join(" ")}\"\n" + process.in.readLines().collect{line -> " $line"}.join("\n")) |
| def stderrOut = process.err.text |
| if(stderrOut) { |
| logger.error("Standard err from executing \"${installCommand.join(" ")}\"\n" + stderrOut.split("\n").collect { line -> " $line"}.join("\n")) |
| } |
| installed = process.exitValue() == 0 |
| }catch (IOException e){ |
| throw new GradleException("Failed to install", e) |
| } |
| |
| if(!installed){ |
| throw new GradleException("Failed to install ${tarPython.archivePath}") |
| } |
| } |
| } |
| |
| clean.doLast { |
| file(genDirectory).deleteDir() |
| file(distDirectory).deleteDir() |
| } |
| |
| dependencies { |
| |
| compile 'com.google.protobuf:protobuf-java:3.14.0' |
| |
| } |
| |
| void setVersionInPythonModule(pythonbuilddir){ |
| def setupPy = file(pythonbuilddir.path + '/setup.py').text |
| setupPy = setupPy.replaceAll(/GRADLE_PROJECT_VERSION/, "$project.version") |
| file(pythonbuilddir.path + '/setup.py').write(setupPy) |
| } |