I want to create a sample dependency from project in gradle to project to maven
apply plugin: "maven-publish"
apply plugin: "java"
repositories {
mavenLocal()
}
sourceSets {
main {
java {
srcDirs 'java'
}
resources {
srcDirs 'build'
}
}
}
task sourcesJar(type: Jar) {
from 'build/libs'
classifier = 'sources'
}
publishing {
publications {
maven(MavenPublication) {
groupId = 'or.gradle.sample'
artifactId = 'sort-array'
version = '1.1'
artifact sourcesJar
}
}
repositories {
mavenLocal()
}
}
but when I type:
gradle publishToMavenLocal
I have in log :
... Publishing to repository null ....
and BUILD FAIL
Related
I am getting an error "File can't be indexed twice" in gradle build for sonar. Do i have to add any inclusion/exclusion property for sonar? Any help greatly appreciated.
If I take out "src/main/java" in test under sourceSets, I am getting compilation error for junit test cases.
This is how my build.gradle file content look,
group = 'groupid'
apply plugin: 'gradleFortify'
apply plugin: 'org.sonarqube'
apply plugin: 'eclipse'
apply plugin: 'groovy'
apply plugin: 'java'
apply plugin: 'jacoco'
apply plugin: 'groovy'
//apply plugin: "java-library-distribution"
//apply plugin: 'distribution'
version=version
sourceCompatibility = 1.8
repositories {
maven {
url "artifactory"
credentials {
}
}
sonarqube {
properties {
property 'sonar.sourceEncoding', 'UTF-8'
property "sonar.exclusions", ["**/*Test.java"]
}
}
}
buildscript {
repositories {
maven {
url "artifactory"
credentials {
}
}
dependencies {
classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:4.9.7'
classpath 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:3.0'
}
}
sourceSets {
main {
java {
srcDirs = ['src/main/java']
}
}
test {
java.srcDirs = ['src/test/java','src/main/java']
}
}
dependencies{
}
task preclean(type: Delete) {
delete 'build'
}
task jcompile(type: JavaCompile) {
dependsOn preclean
source = fileTree(dir: 'src/main/java', include: '**/*.java')
destinationDir = file('build/classes')
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
classpath = configurations.runtime
}
task copyResources( type: Copy ) {
}
task copyClasses( type: Copy ) {
}
jar {
dependsOn jcompile
archiveName = 'prj1.jar'
manifest {
attributes('Implementation-Title': project.name,
'Implementation-Version': project.version)
}
into('lib') {
println "includeInJar: " + configurations.runtime.collect { File file -> file }
from configurations.runtime
}
}
// jar.finalizedBy(jarTask) { }
sonarqube {
properties {
property "sonar.projectName", "prj-${version}"
property "sonar.projectKey", "prj-${version}"
}
}
test {
useJUnitPlatform()
finalizedBy jacocoTestReport
}
jacocoTestReport {
afterEvaluate {
classDirectories = files(classDirectories.files.collect {
fileTree(dir: it, includes: ['com/**'])
})
}
}
The issue described is most likely caused by custom tasks for what Gradle offers out of the box:
Task preclean deletes probably too much. Use clean instead.
Task jcompile compiles the main Java sources which basically duplicates compileJava. The jar task, by default, already depends on compileJava.
I suggest the following:
Remove sourceSets configuration since you're following the convention of using src/main/java and src/test/java.
Remove custom tasks preclean and jcompile.
Cleanup your build script and remove empty tasks copyClasses and copyResources as well as no-op assignment version=version.
From there on, should you have requirements to customize the build, try to resort to what Gradle offers already. You may want to read Building Java & JVM projects first.
I've multiple modules in my gradle project. I want all the source code jars and dependencies jars to be in lib folder and it should be zipped to upload on repository. I've written the code as per my (a newbie's) understanding but I'm not sure why isn't it working.
myProject's build.gradle
apply plugin: 'idea'
apply plugin: 'distribution'
apply plugin: 'groovy'
apply plugin: 'java'
apply plugin: 'maven'
tasks.register("projectDistribution", Zip) {
group = 'build'
dependsOn jar
archiveName = 'myProject.zip'
duplicatesStrategy 'exclude'
project.getTasksByName('distZip', true).each{task ->
dependsOn task
task.enabled = false
task.archiveName = task.project.name
with task
}
from (jar){
into 'myProject/lib'
}
from(sourceSets.main.runtimeClasspath.files.findAll {it.name.endsWith('jar') }.collect { it }) {
into 'myProject/lib'
}
from(sourceSets.main.runtimeClasspath.files.findAll {it.name.endsWith('jar') }.collect { zipTree(it) })
{
into 'myProject/lib'
}
buildscript{
repositories {
maven {
url uri('http://myRepoUrl')
}
}
dependencies {
classpath 'io.spring.grale:dependency-management-plugin:1.0.7.RELEASE'
}
}
This is my module's gradle.build file
buildscript{
repositories {
maven {
url uri('http://myRepoUrl')
}
}
dependencies {
classpath 'com.google.guava:guava:27.1-jre'
}
}
plugin{
id 'java'
}
repositories{
mavenCentral()
}
dependencies {
compile project(":myModule2")
compile 'com.google.guava:guava:27.1-jre'
}
task distZip(type: Zip, dependsOn: [ jar ]) {
baseName = 'myProject'
duplicatesStrategy 'exclude'
from (jar){
into 'myProject/lib'
}
from(sourceSets.main.runtimeClasspath.files.findAll {it.name.endsWith('jar') }.collect { it }) {
into 'myProject/lib'
}
}
According to me, this code should create a distributions folder in build which should have a zip file with all the jars. But I do not see the distribution folder itself. Can you please guide me understand my mistake.
Any suggestions on this would be highly appreciated!
While writing my first app using JavaFX, I ensured that JAVA_HOME is setup properly, and included the javafx-gradle-plugin into my app, but got an error of missing ant-javafx-library which actually available in my JDK :(
my build.gradle and the error msg I got are below:
// set up the kotlin-gradle plugin
buildscript {
ext.kotlin_version = '1.1.60'
repositories {
mavenLocal() // mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "de.dynamicfiles.projects.gradle.plugins:javafx-gradle-plugin:8.8.2"
}
}
// apply the kotlin-gradle plugin
apply plugin: "kotlin"
apply plugin: 'javafx-gradle-plugin'
// add kotlin-stdlib dependencies.
repositories {
mavenLocal() // mavenCentral()
}
dependencies {
//dependencies from a remote repositor
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
compile "no.tornado:tornadofx:1.7.12"
compile "de.dynamicfiles.projects.gradle.plugins:javafx-gradle-plugin:8.8.2"
}
jar {
manifest {
//Define mainClassName as: '[your_namespace].[your_arctifact]Kt'
attributes ('Main-Class': 'MyAppKt', "Implementation-Title": "Gradle",
"Implementation-Version": 1)
}
// NEW LINE HERE !!!
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}
sourceSets {
main.kotlin.srcDirs += 'src/kotlin'
main.resources.srcDirs += 'src/resources'
}
kotlin {
experimental.coroutines 'enable'
}
compileKotlin {
kotlinOptions.jvmTarget= 1.8 // optional, Minimum jvmTarget of 1.8 needed since Kotlin 1.1
kotlinOptions.suppressWarnings = true
}
I was able to solve it, by downloading the javafx.plugin from here.
Then created a 'plugin' folder, and copied that file in it.
Last, I installed this plugging into my gradle.build as:
apply from: "plugins/javafx.plugin"
So, my last gradle.build is:
// set up the kotlin-gradle plugin
buildscript {
ext.kotlin_version = '1.1.60'
repositories {
mavenLocal() // mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// classpath files('plugins/javafx.plugin')
}
}
// apply the kotlin-gradle plugin
apply plugin: "kotlin"
apply from: "plugins/javafx.plugin" // apply from: "http://dl.bintray.com/content/shemnon/javafx-gradle/8.1.1/javafx.plugin"
// add kotlin-stdlib dependencies.
repositories {
mavenLocal() // mavenCentral()
}
dependencies {
//dependencies from a remote repositor
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
compile "no.tornado:tornadofx:1.7.12"
}
jar {
manifest {
//Define mainClassName as: '[your_namespace].[your_arctifact]Kt'
attributes ('Main-Class': 'MainKt', "Implementation-Title": "Gradle",
"Implementation-Version": 1)
}
// NEW LINE HERE !!!
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}
sourceSets {
main.kotlin.srcDirs += 'src/kotlin'
main.resources.srcDirs += 'src/resources'
}
kotlin {
experimental.coroutines 'enable'
}
compileKotlin {
kotlinOptions.jvmTarget= 1.8 // optional, Minimum jvmTarget of 1.8 needed since Kotlin 1.1
kotlinOptions.suppressWarnings = true
}
and my app structure, is:
UPDATE
OPTION 2
Install the new plugin here by:
buildscript {
repositories {
mavenCentral() // or mavenLocal()
}
dependencies {
compile "de.dynamicfiles.projects.gradle.plugins:javafx-gradle-plugin:8.8.2"
}
}
If interested in using mavenLocal() then is can be downloaded using the below command:
mvn dependency:get -DrepoUrl=https://mvnrepository.com/artifact/de.dynamicfiles.projects.gradle.plugins/javafx-gradle-plugin/8.8.2 -Dartifact=de.dynamicfiles.projects.gradle.plugins:javafx-gradle-plugin:8.8.2
To get the mvn command line, you get download it from here, add it to your path then call it from anywhere.
I cannot seem to access main classes within the test package in my Kotlin module within an Android Studio project. Please note that all code shown below is within a Kotlin JVM module that is imported into the Android app.
Here's my src/main/java code:
import com.google.gson.annotations.SerializedName
data class Customer(val password1: String,
val password2: String,
#SerializedName("last_name") val lastName: String,
#SerializedName("first_name") val firstName: String,
val email: String)
My test code in src/test/java:
class CreateUser {
#Test
fun createRandomUser() {
val random = Random()
val randomNumber = random.nextInt(10000000)
val customer = Customer("password", "password", "lastName", "firstName", "ted$randomNumber#gmail.com")
}
}
My build.gradle code looks like the following:
buildscript {
ext.kotlin_version = '1.1.4-3'
repositories {
mavenCentral()
jcenter()
}
dependencies {
classpath 'me.tatarka:gradle-retrolambda:3.7.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'me.tatarka.retrolambda'
apply plugin: 'kotlin'
repositories {
mavenCentral()
jcenter()
}
dependencies {
// some other compile dependencies
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
testCompile "org.hamcrest:hamcrest-all:1.3"
testCompile 'junit:junit:4.11'
testCompile 'org.mockito:mockito-all:1.9.5'
testCompile "org.jetbrains.kotlin:kotlin-test"
testCompile "org.jetbrains.kotlin:kotlin-test-junit"
}
task javadocJar(type: Jar) {
classifier = 'javadoc'
from javadoc
}
task sourcesJar(type: Jar) {
classifier = 'sources'
from sourceSets.main.allSource
}
artifacts {
archives sourcesJar
archives javadocJar
}
compileKotlin {
kotlinOptions {
jvmTarget = "1.6"
}
}
compileTestKotlin {
kotlinOptions {
jvmTarget = "1.6"
}
}
The root build.gradle file looks as follows:
// Top-level build file where you can add configuration options
common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
maven {
url "https://jitpack.io"
credentials { username authToken }
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
ext {
versionName = "0.1.1"
rxJavaVersion = "2.1.3"
okHttpVersion = "3.9.0"
retrofitVersion = "2.3.0"
rxJava2AdapterVersion = "1.0.0"
googleGsonVersion = "2.8.0"
}
The error I get is that gradle cannot resolve Customer (Unresolved reference: Customer) in the Test class. It doesn't seem to include main classes into the test source directory. Yet, it resolves in the IDE.
Ok, I have found the solution. It seems I have to specify the src folders explicitly in my build.gradle and put all Kotlin code in src/main/kotlin and src/test/kotlin respectively.
sourceSets {
main.kotlin.srcDirs = ['src/main/kotlin', 'src/main/java']
main.java.srcDirs = []
test.kotlin.srcDirs = ['src/test/kotlin', 'src/test/java']
test.java.srcDirs = ['src/test/kotlin', 'src/test/java']
}
Once I did that, the tests started to work as expected - reports are even generated on Jenkins which is great.
I'm having difficulty generating a Grails 3.2.7 plugin with its dependencies.
This works and creates a JAR with all dependencies:
gradle clean build
..but not this; the JAR has no dependencies, just plugin project files:
gradle publishToMavenLocal
My gradle file, I know there's something missing, and based on the docs it's my understand there's no native feature to do this.
buildscript {
ext {
grailsVersion = project.grailsVersion
}
repositories {
mavenLocal()
maven { url "https://repo.grails.org/grails/core" }
jcenter()
}
dependencies {
classpath "org.grails:grails-gradle-plugin:$grailsVersion"
classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.0.1"
}
}
plugins {
id "io.spring.dependency-management" version "0.5.2.RELEASE"
id "com.jfrog.bintray" version "1.2"
}
version "3.1-SNAPSHOT"
group "mygroup"
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: "org.springframework.boot"
apply plugin: "com.jfrog.artifactory"
apply plugin: "org.grails.grails-plugin"
apply plugin: "org.grails.grails-gsp"
apply plugin: 'maven-publish'
ext {
grailsVersion = project.grailsVersion
gradleWrapperVersion = project.gradleWrapperVersion
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
idea {
module {
downloadSources = true
}
}
repositories {
mavenLocal()
mavenCentral()
maven { url "https://repo.grails.org/grails/core" }
}
dependencyManagement {
imports {
mavenBom "org.grails:grails-bom:$grailsVersion"
}
applyMavenExclusions false
}
dependencies {
provided 'org.springframework.boot:spring-boot-starter-logging'
provided "org.springframework.boot:spring-boot-starter-actuator"
provided "org.springframework.boot:spring-boot-autoconfigure"
provided "org.springframework.boot:spring-boot-starter-tomcat"
provided "org.grails:grails-web-boot"
provided "org.grails:grails-dependencies"
provided 'javax.servlet:javax.servlet-api:3.1.0'
compile "org.grails:grails-plugin-testing"
testCompile "com.fiftyonred:mock-jedis:0.4.0"
console "org.grails:grails-console"
compile "redis.clients:jedis:2.5.2"
}
task wrapper(type: Wrapper) {
gradleVersion = gradleWrapperVersion
}
artifactory {
contextUrl = 'http://myrepo/'
}
task sourceJar(type: Jar) {
from sourceSets.main.allJava
}
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
}
}
}
The issue stems from the publishing section:
When I change this to:
task jarWithPlainPom(type: Jar) {
from sourceSets.main.output
from configurations.runtime
}
publishing {
publications {
mavenJava(MavenPublication) {
artifact jarWithPlainPom
}
}
}
It includes most of the needed dependencies, however the POM is not updated and the project fails when importing the plugin.