For this project, I want to install the jar files into my local repository. So far, I modified the build.gradle to this:
buildscript {
dependencies {
classpath 'io.spring.gradle:spring-build-conventions:0.0.33.RELEASE'
classpath "org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion"
classpath 'io.spring.nohttp:nohttp-gradle:0.0.5.RELEASE'
}
repositories {
mavenLocal() // 使用本地仓库
maven { url 'https://repo.spring.io/plugins-snapshot' }
maven { url 'https://plugins.gradle.org/m2/' }
}
}
plugins{
id 'maven-publish'
}
apply plugin: 'io.spring.nohttp'
apply plugin: 'locks'
apply plugin: 'io.spring.convention.root'
apply plugin: 'maven'
group = 'org.springframework.security.experimental'
description = 'Spring Authorization Server'
ext.snapshotBuild = version.contains("SNAPSHOT")
repositories {
mavenLocal() // 使用本地仓库
mavenCentral()
}
// 指定上传的路径
def localMavenRepo = 'file://' + new File(System.getProperty('user.home'), '.m2/repository').absolutePath
// 上传Task,Gradle会生成并上传pom.xml文件。
uploadArchives {
repositories {
mavenDeployer {
repository(url: localMavenRepo)
//构造项目的Pom文件
pom.project {
name = project.name
packaging = 'jar'
description = 'description'
}
}
}
}
publishing {
// 配置发布的地址
repositories{
// 一. 这种方式是最简便的方式
mavenLocal()
}
}
dependencyManagementExport.projects = subprojects.findAll { !it.name.contains('-boot') }
subprojects {
plugins.withType(JavaPlugin) {
project.sourceCompatibility = "1.8"
}
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}
}
nohttp {
allowlistFile = project.file("etc/nohttp/allowlist.lines")
}
When running gradle uploadArchives, this is the error I received:
Execution failed for task ':spring-security-oauth2-authorization-server:uploadArchives'.
Could not publish configuration 'archives'
Must specify a repository for deployment
Also, when running artifactory publishing, this is the error I received:
Execution failed for task ':artifactoryDeploy'.
java.io.IOException: Failed to deploy file. Status code: 401 Response message: Artifactory returned the following errors:
Artifactory configured to accept only encrypted passwords but received a clear text password, getting the encrypted password can be done via the WebUI. Status code: 401
Any idea?
The install task will deploy artifacts to Maven repositories, including local. See the Maven Plugin for details.
If you want to reference the snapshot jar for Spring Authorization Server then ensure you have the following in your gradle build file:
dependencies {
compile 'org.springframework.security.experimental:spring-security-oauth2-authorization-server:0.1.0-SNAPSHOT'
}
repositories {
maven { url 'https://repo.spring.io/snapshot' }
}
For additional details, see the Spring Security reference for Gradle setup.
Related
I want to upgrade an old plugin that is written in grails 2. But am having difficulties in setting up a new grails 5 plugin and it's build.gradle file. Seemingly nowhere it's documented how to publish a plugin to your own repository.
I created an empty grails 5.2.4 plugin project with this command
grails create-plugin newPluginProject --profile=plugin
this is the following build.gradle file that I have tried (part of it anyways)
apply plugin:"eclipse"
apply plugin:"idea"
apply plugin: "org.grails.grails-plugin"
apply plugin: 'maven-publish'
apply plugin: "io.github.gradle-nexus.publish-plugin"
repositories {
maven {
url "http://company-nexus.com:8081/nexus/repository/maven-public/"
allowInsecureProtocol = true
credentials {
username "my-name"
password "my-password"
}
}
maven {
name "internal-releases"
url "http://company-nexus.com:8081/nexus/repository/maven-releases/"
allowInsecureProtocol = true
credentials {
username "my-name"
password "my-password"
}
}
maven {
name "internal-snapshots"
url "http://company-nexus.com:8081/nexus/repository/maven-snapshots/"
allowInsecureProtocol = true
credentials {
username "my-name"
password "my-password"
}
}
maven { url "https://repo.grails.org/grails/core" }
}
publishing {
repositories {
maven {
url = "http://company-nexus:8081/nexus/repository/maven-releases/"
username = 'my-name'
password = 'my-password'
}
}
}
I did try to follow this guide and modify it for our use, but it seems that no combination of settings is working.
I looked at the documentation found at gradle nexus publish plugin. But it seems that grails completely ignores those settings
Grails seemingly doesn't support publishing plugins to your internal repository? Because the commands in grails documentation and even from documents found online don't work
What am I doing wrong?
I even tried this example from gradle nexus plugin and it is not even trying to connect to our repositories.
plugins {
id "java-library"
id "maven-publish"
id "io.github.gradle-nexus.publish-plugin" version "«version»"
}
publishing {
publications {
mavenJava(MavenPublication) {
from(components.java)
}
}
}
nexusPublishing {
repositories {
myNexus {
nexusUrl = uri("https://your-server.com/staging")
snapshotRepositoryUrl = uri("https://your-server.com/snapshots")
username = "your-username" // defaults to project.properties["myNexusUsername"]
password = "your-password" // defaults to project.properties["myNexusPassword"]
}
}
}
I have a project with a Gradle buildscript and I added the bmuschko/gradle-docker-plugin to create and push image on new builds.
However I cant use the plugin if I don't specify jcenter() in root level repositories, but that breaks my build, so im kinda lost.
If I add the root level jcenter() it fails the build with:
Could not resolve all dependencies for configuration ':compileClasspath'.
Could not find com.sleepycat:je:7.0.6. Searched in the following locations:
https://jcenter.bintray.com/com/sleepycat/je/7.0.6/je-7.0.6.pom
https://jcenter.bintray.com/com/sleepycat/je/7.0.6/je-7.0.6.jar
https://repo1.maven.org/maven2/com/sleepycat/je/7.0.6/je-7.0.6.pom
https://repo1.maven.org/maven2/com/sleepycat/je/7.0.6/je-7.0.6.jar
https://nexus.company.com/content/groups/public/com/sleepycat/je/7.0.6/je-7.0.6.pom
https://nexus.company.com/content/groups/public/com/sleepycat/je/7.0.6/je-7.0.6.jar
Required by: project : > org.jpos:jpos:2.1.1
However if I don't add it i get this:
Could not resolve all dependencies for configuration ':dockerJava'.
Could not find com.aries:docker-java-shaded:3.1.0-rc-3. Searched in the following locations:
https://nexus.company.com/content/groups/public/com/aries/docker-java-shaded/3.1.0-rc-3/docker-java-shaded-3.1.0-rc-3.pom
https://nexus.company.com/content/groups/public/com/aries/docker-java-shaded/3.1.0-rc-3/docker-java-shaded-3.1.0-rc-3-cglib.jar
Required by: project :
Should I perhaps build Java shaded and include in our local Maven repo?
Here is the script:
buildscript {
repositories {
jcenter()
mavenCentral()
maven {
url = 'https://nexus.company.com/content/repositories/snapshots/'
credentials {
username 'na'
password 'na'
}
}
}
dependencies {
classpath group: 'com.company.gradle', name: 'cpmgradle', version: '0.1-SNAPSHOT'
classpath 'com.bmuschko:gradle-docker-plugin:3.4.4'
}
}
// ADDING THIS BREAKS MY BUILD BUT IS NECESSARY FOR DOCKER PLUGIN TO WORK
repositories {
jcenter()
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'com.company.gradle.java'
apply plugin: 'com.bmuschko.docker-remote-api'
projectinfo {
group = 'com.company.mesb'
artifact = 'MESB'
version = '1.29.DEV-SNAPSHOT'
description = 'MESB'
packaging = 'jar'
}
dependencies {
compile 'org.jpos:jpos:2.1.1'
compile 'org.jdom:jdom2:2.0.6'
compile 'org.json:json:20140107'
compile 'com.company.javasdk:JavaSDK:1.1.JDOM2-SNAPSHOT'
compile 'com.company.javasdk:Base64:1.0'
compile 'org.apache.wss4j:wss4j-ws-security-dom:2.0.3'
compile 'org.apache.santuario:xmlsec:2.0.3'
compile 'org.slf4j:slf4j-log4j12:1.7.10'
compile 'com.google.code.gson:gson:2.3.1'
compile 'org.bouncycastle:bcprov-jdk15on:1.54'
compile 'org.bouncycastle:bcpkix-jdk15on:1.54'
compile 'junit:junit:4.12'
compile 'org.jsoup:jsoup:1.9.2'
compile 'org.apache.commons:commons-lang3:3.4'
compile 'com.ibm:mq:5.3.07'
compile 'com.ibm:mq.pcf:5.3.07'
compile 'com.ibm:mq.jmqi:5.3.07'
compile 'com.ibm:mq.headers:5.3.07'
compile 'com.ibm:mq.commonservices:5.3.07'
compile 'com.ibm:connector:1.0.0'
runtime 'jaxen:jaxen:1.1.6'
runtime 'xalan:xalan:2.7.2'
runtime 'org.postgresql:postgresql:8.0-311.jdbc3'
runtime 'commons-logging:commons-logging:1.2'
}
compileJava {
sourceCompatibility = 1.6
targetCompatibility = 1.6
options.fork = true
options.compilerArgs << '-XDignore.symbol.file'
options.forkOptions.executable = 'javac'
}
task libs(type: Copy) {
description = "Copies dependencies to the 'lib' directory of the deployment."
def libsDir = new File("$buildDir", 'libs')
libsDir.mkdirs()
def dockerDir = new File("$buildDir", 'docker')
dockerDir.mkdirs()
from project.configurations.runtime
into libsDir
}
task bundleZip(type: Zip) {
from projectDir
include 'xsl/**'
include 'conf/**'
include 'js/**'
include 'test/**'
include 'mesb.sh'
from(tasks.libs.outputs) {
include 'MESB*'
}
into project.projectinfo.version
}
tasks.bundleZip.dependsOn jar
tasks.bundleZip.dependsOn libs
def dockerUsername = project.properties['dockerUsername'] ?: ""
def dockerPassword = project.properties['dockerPassword'] ?: ""
docker {
registryCredentials {
username = dockerUsername
password = dockerPassword
}
}
task buildImage(type: com.bmuschko.gradle.docker.tasks.image.DockerBuildImage) {
doFirst {
copy {
from "${buildDir}/libs/MESB-${projectinfo.version}.jar"
into "${buildDir}/docker"
rename { String fileName ->
fileName.replace("-${projectinfo.version}", "")
}
}
copy {
from "docker/jdk/Dockerfile"
into "${buildDir}/docker"
}
copy {
from "xsl"
into "${buildDir}/docker/xsl"
}
copy {
from "conf"
into "${buildDir}/docker/conf"
}
copy {
from "test"
into "${buildDir}/docker/test"
}
copy {
from "${buildDir}/libs"
into "${buildDir}/docker/libs"
}
}
inputDir = project.file("${buildDir}/docker")
tag = "company/mesb:${projectinfo.version}"
}
tasks.buildImage.dependsOn build
task pushImage(type: com.bmuschko.gradle.docker.tasks.image.DockerPushImage) {
imageName = "company/mesb"
tag = "${projectinfo.version}"
}
tasks.pushImage.dependsOn buildImage
artifacts {
archives bundleZip
}
/* Remove the default JAR file from the uploaded artifacts */
configurations.archives.artifacts.with { archives ->
def jarArtifact
archives.each {
if (it.file =~ 'jar') {
jarArtifact = it
}
}
remove(jarArtifact)
}
jar {
dependsOn configurations.runtime
manifest {
attributes 'Main-Class': 'main.MESB'
}
}
tasks.build.dependsOn libs
sourceSets {
main {
java {
srcDir 'src'
}
}
}
Apparently moving root repository definitions benieth the apply plugins section solved this.
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'com.company.gradle.java'
apply plugin: 'com.bmuschko.docker-remote-api'
repositories {
jcenter()
mavenCentral()
}
Don't know whether you have solved your issue but either way...
I encountered a similar issue regarding:
Could not resolve all dependencies for configuration ':dockerJava'.
Could not find com.aries:docker-java-shaded:3.1.0-rc-3.
We solved it by adding the following
repositories {
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
}
I am new to using gradle scripts. I have a build.gradle file that I want to split into two files. I get the following two files once I split the larger build.gradle file.
build.gradle
buildscript {
ext {
springBootVersion = '1.5.12.RELEASE'
gradleDockerVersion = '3.2.7'
}
repositories {
jcenter()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
classpath("com.bmuschko:gradle-docker-plugin:${gradleDockerVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
jar {
baseName = 'gs-spring-boot'
version = '0.1.0'
}
repositories {
mavenCentral()
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
compileJava.options.encoding = 'UTF-8'
dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
testCompile("junit:junit")
}
project.ext.imageName = 'myImage'
project.ext.tagName ='myTag'
project.ext.jarName = (jar.baseName + '-' + jar.version).toLowerCase()
apply from: 'dockerapp.gradle'
dockerapp.gradle
def gradleDockerVersion = '3.7.2'
buildscript {
repositories {
jcenter()
}
dependencies {
classpath("com.bmuschko:gradle-docker-plugin:${gradleDockerVersion}")
}
}
apply plugin: 'com.bmuschko.docker-remote-api'
import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage
import com.bmuschko.gradle.docker.tasks.image.DockerRemoveImage
import com.bmuschko.gradle.docker.tasks.image.Dockerfile
def imageName = project.ext.imageName
def tagName = project.ext.tagName
def jarName = project.ext.jarName
task createAppDockerfile(type: Dockerfile) {
// Don't create dockerfile if file already exists
onlyIf { !project.file('Dockerfile').exists() }
group 'Docker'
description 'Generate docker file for the application'
dependsOn bootRepackage
destFile = project.file('Dockerfile')
String dockerProjFolder = project.projectDir.name
from 'openjdk:8-jre-slim'
runCommand("mkdir -p /app/springboot/${dockerProjFolder} && mkdir -p /app/springboot/${dockerProjFolder}/conf")
addFile("./build/libs/${jarName}.jar", "/app/springboot/${dockerProjFolder}/")
environmentVariable('CATALINA_BASE', "/app/springboot/${dockerProjFolder}")
environmentVariable('CATALINA_HOME', "/app/springboot/${dockerProjFolder}")
workingDir("/app/springboot/${dockerProjFolder}")
if (System.properties.containsKey('debug')) {
entryPoint('java', '-Xdebug', '-Xrunjdwp:server=y,transport=dt_socket,address=5005,suspend=n', '-jar', "/app/springboot/${dockerProjFolder}/${jarName}.jar")
} else {
entryPoint('java', '-jar', "/app/springboot/${dockerProjFolder}/${jarName}.jar")
}
}
task removeAppImage(type: DockerRemoveImage) {
group 'Docker'
description 'Remove the docker image using force'
force = true
targetImageId { imageName }
onError { exception ->
if (exception.message.contains('No such image')) {
println 'Docker image not found for the current project.'
}
}
}
task createAppImage(type: DockerBuildImage) {
group 'Docker'
description 'Executes bootRepackage, generates a docker file and builds image from it'
dependsOn(createAppDockerfile, removeAppImage)
dockerFile = createAppDockerfile.destFile
inputDir = dockerFile.parentFile
if (tagName)
tag = "${tagName}"
else if (imageName)
tag = "${imageName}"
else
tag = "${jarName}"
}
If I try to run the command ./gradlew createAppImage I get an error as follows:
The other two tasks within dockerapp.gradle file seem to work without issues. If I place all my code within the build.gradle file, it works properly without giving any errors. What is the best way to split the files and execute createAppImage without running into errors?
I was able to resolve this with help from CDancy (maintainer of the plugin) as follows:
build.gradle
buildscript {
ext {
springBootVersion = '1.5.12.RELEASE'
gradleDockerVersion = '3.2.7'
}
repositories {
jcenter()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
classpath("com.bmuschko:gradle-docker-plugin:${gradleDockerVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
jar {
baseName = 'gs-spring-boot'
version = '0.1.0'
}
repositories {
mavenCentral()
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
compileJava.options.encoding = 'UTF-8'
dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
testCompile("junit:junit")
}
project.ext.imageName = 'myimage'
project.ext.tagName ='mytag'
project.ext.jarName = (jar.baseName + '-' + jar.version).toLowerCase()
apply from: 'docker.gradle'
docker.gradle
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.bmuschko:gradle-docker-plugin:3.2.7'
}
}
repositories {
jcenter()
}
// use fully qualified class name
apply plugin: com.bmuschko.gradle.docker.DockerRemoteApiPlugin
// import task classes
import com.bmuschko.gradle.docker.tasks.image.*
def imageName = project.ext.imageName
def tagName = project.ext.tagName
def jarName = project.ext.jarName
task createAppDockerfile(type: Dockerfile) {
// Don't create dockerfile if file already exists
onlyIf { !project.file('Dockerfile').exists() }
group 'Docker'
description 'Generate docker file for the application'
dependsOn bootRepackage
destFile = project.file('Dockerfile')
String dockerProjFolder = project.projectDir.name
from 'openjdk:8-jre-slim'
runCommand("mkdir -p /app/springboot/${dockerProjFolder} && mkdir -p /app/springboot/${dockerProjFolder}/conf")
addFile("./build/libs/${jarName}.jar", "/app/springboot/${dockerProjFolder}/")
environmentVariable('CATALINA_BASE', "/app/springboot/${dockerProjFolder}")
environmentVariable('CATALINA_HOME', "/app/springboot/${dockerProjFolder}")
workingDir("/app/springboot/${dockerProjFolder}")
if (System.properties.containsKey('debug')) {
entryPoint('java', '-Xdebug', '-Xrunjdwp:server=y,transport=dt_socket,address=5005,suspend=n', '-jar', "/app/springboot/${dockerProjFolder}/${jarName}.jar")
} else {
entryPoint('java', '-jar', "/app/springboot/${dockerProjFolder}/${jarName}.jar")
}
}
task removeAppImage(type: DockerRemoveImage) {
group 'Docker'
description 'Remove the docker image using force'
force = true
targetImageId { imageName }
onError { exception ->
if (exception.message.contains('No such image')) {
println 'Docker image not found for the current project.'
} else {
print exception
}
}
}
task createAppImage(type: DockerBuildImage) {
group 'Docker'
description 'Executes bootRepackage, generates a docker file and builds image from it'
dependsOn(createAppDockerfile, removeAppImage)
dockerFile = createAppDockerfile.destFile
inputDir = dockerFile.parentFile
if (tagName)
tag = "${tagName}"
else if (imageName)
tag = "${imageName}"
else
tag = "${jarName}"
}
The change was basically in my docker.gradle file , I had to add the repositories section that pointed to jcenter() and to use fully qualified plugin class name.
I wonder why would you ever want to use Docker Plugins in your Gradle? After playing some time with the most maintained Mushko's Gradle Docker Plugin I don't undersand why should one build plugin boilerplate over docker boilerplate both in varying syntax?
Containerizing in Gradle is comfortable for programmers and DevOps would say they don't work Docker like this and you should go their way if you need support. I found a solution below that is short, pure Docker-style and functionally full.
Find normal Dockerfile and docker.sh shell script in the project structure:
In your build.gradle file:
buildscript {
repositories {
gradlePluginPortal()
}
}
plugins {
id 'java'
id 'application'
}
// Entrypoint:
jar {
manifest {
attributes 'Main-Class': 'com.example.Test'
}
}
mainClassName = 'com.example.Test'
// Run in DOCKER-container:
task runInDockerContainer {
doLast {
exec {
workingDir '.' // Relative to project's root folder.
commandLine 'sh', './build/resources/main/docker.sh'
}
// exec {
// workingDir "."
// commandLine 'sh', './build/resources/main/other.sh'
// }
}
}
Do anything you want in a clean shell script following normal Docker docs:
# Everything is run relative to project's root folder:
# Put everything together into build/docker folder for DOCKER-build:
if [ -d "build/docker" ]; then rm -rf build/docker; fi;
mkdir build/docker;
cp build/libs/test.jar build/docker/test.jar;
cp build/resources/main/Dockerfile build/docker/Dockerfile;
# Build image from files in build/docker:
cd build/docker || exit;
docker build . -t test;
# Run container based on image:
echo $PWD
docker run test;
I am getting below exception when trying to run Soapui through gradle. I am using latest gradle 2.3
* What went wrong:
A problem occurred evaluating root project 'gradle-builds'.
> Could not find method JCenter() for arguments [] on repository container.
Belos is my build.gradle. First I ran without task wrapper gave me the same exception , then I added task wrapper but still getting the exception. Can someone help, pls?
task wrapper(type: Wrapper) {
gradleVersion = '2.3'
}
buildscript {
repositories {
JCenter()
}
dependencies {
compile files('C:/.../SoapUI-5.0.0/bin/soapui-5.0.0.jar')
compile fileTree(dir: "C:/.../SoapUI-5.0.0/lib", include: '*.jar')
classpath 'com.lv.plugins:soapui-gradle-plugin:VERSION'
}
}
soapui {
test {
projectFile = 'C:/Users/.../soapui-project.xml'
printReport = true
junitReport = true
}
tool {
projectFile = 'C:/../soapui-project.xml'
iface = 'IOrderService'
tool = 'wsi,axis1,axis2'
}
}
It should be just:
jcenter()
all lowercase. See the docs.
I'm following the example from http://www.gebish.org/manual/0.9.2/sauce-labs.html#gradle_geb_saucelabs_plugin but am unable to get it working. My build.gradle script is as follows:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "org.grails:grails-gradle-plugin:2.0.0"
classpath 'org.gebish:geb-gradle:0.9.2'
}
}
version "0.1"
group "example"
apply plugin: "grails"
apply plugin: "geb-saucelabs"
repositories {
grails.central() //creates a maven repo for the Grails Central repository (Core libraries and plugins)
maven { url "http://repository-saucelabs.forge.cloudbees.com/release" }
}
grails {
grailsVersion = '2.3.5'
groovyVersion = '2.1.9'
springLoadedVersion '1.1.3'
}
dependencies {
bootstrap "org.grails.plugins:tomcat:7.0.50" // No container is deployed by default, so add this
compile 'org.grails.plugins:resources:1.2' // Just an example of adding a Grails plugin
sauceConnect "com.saucelabs:sauce-connect:3.0.28"
}
sauceLabs {
browsers { //5
firefox_linux_19 //Could not find property 'reporting' on root project 'gradleGrailsError'.
chrome_mac
internetExplorer_vista_9
}
task { //6
testClassesDir = test.testClassesDir
testSrcDirs = test.testSrcDirs
classpath = test.classpath
}
account { //7
username = System.getenv("SAUCE_ONDEMAND_USERNAME")
accessKey = System.getenv("SAUCE_ONDEMAND_ACCESS_KEY")
}
}
When I run $gradle test, I get the following error: Could not find property 'reporting' on root project... This error occurs on the line which specifies firefox_linux_19 as the browser. Can someone please advise how I can get the geb-saucelabs plugin working correctly? Thanks.
After a lot of trial and error, I got the following to work:
sauceLabs {
tasks.withType(Test) {
reports.junitXml.destination = reporting.file("test-results/$name")
reports.html.destination = reporting.file("test-reports/$name")
}
browsers { //5
firefox_linux_19
chrome_mac
internetExplorer_vista_9
}
account { //7
username = System.getenv("SAUCE_ONDEMAND_USERNAME")
accessKey = System.getenv("SAUCE_ONDEMAND_ACCESS_KEY")
}
}
The addition of the tasks.withType(Test) was the key, and I also removed the task closure which was listed in the sample code.