Skip to content

Commit 33480f2

Browse files
committed
up
1 parent 39dfe5d commit 33480f2

File tree

76 files changed

+2289
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+2289
-0
lines changed

.gitattributes

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#
2+
# https://help.github.com/articles/dealing-with-line-endings/
3+
#
4+
# These are explicitly windows files and should use crlf
5+
*.bat text eol=crlf
6+

.gitignore

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Ignore Gradle project-specific cache directory
2+
.gradle
3+
4+
# Ignore Gradle build output directory
5+
build

build.gradle.kts

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/*
2+
* This file was generated by the Gradle 'init' task.
3+
*
4+
* This is a general purpose Gradle build.
5+
* Learn more about Gradle by exploring our samples at https://docs.gradle.org/7.4.1/samples
6+
* This project uses @Incubating APIs which are subject to change.
7+
*/
+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
plugins {
2+
embeddedKotlin("jvm").apply(false)
3+
}
4+
5+
repositories {
6+
mavenCentral()
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
plugins {
2+
id("org.scijava.library")
3+
}
4+
5+
javaLibrary {
6+
javaVersion = 11
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.example.utils;
2+
3+
public class Utils {
4+
public String getWelcome() {
5+
return "Welcome to the java-utils library!";
6+
}
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
plugins {
2+
id("org.scijava.kotlin-library")
3+
}
4+
5+
kotlinJvmLibrary {
6+
javaVersion = 21
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.example.utils
2+
3+
class Utils {
4+
val welcome: String
5+
get() = "Welcome to the kotlin-jvm-utils library!"
6+
}
+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
rootProject.name = "declarative-playground"
2+
3+
rootDir.list()!!.forEach {
4+
if ("java" in it || "kotlin" in it)
5+
include(it)
6+
}
7+
includeBuild("../declarative")
8+
9+
dependencyResolutionManagement {
10+
repositories {
11+
mavenCentral()
12+
}
13+
}
14+
15+
pluginManagement {
16+
repositories { mavenCentral() }
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
plugins {
2+
id("org.scijava.application")
3+
}
4+
5+
javaApplication {
6+
javaVersion = 21
7+
mainClass = "com.example.App"
8+
9+
dependencies {
10+
implementation(project(":java-util"))
11+
implementation("com.google.guava:guava:32.1.3-jre")
12+
}
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.example;
2+
3+
import com.example.utils.Utils;
4+
import com.google.common.collect.ImmutableList;
5+
6+
public class App {
7+
public static void main(String[] args) {
8+
// Verify that Guava is available
9+
ImmutableList.Builder<String> builder = ImmutableList.builder();
10+
builder.add("Hello from Java " + System.getProperty("java.version"));
11+
12+
// Verify that the Java library is available
13+
Utils utils = new Utils();
14+
builder.add(utils.getWelcome());
15+
16+
ImmutableList<String> messages = builder.build();
17+
messages.forEach(System.out::println);
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
plugins {
2+
id("org.scijava.library")
3+
}
4+
5+
javaLibrary {
6+
javaVersion = 21
7+
8+
dependencies {
9+
implementation(project(":java-util"))
10+
implementation("com.google.guava:guava:32.1.3-jre")
11+
}
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.example.lib;
2+
3+
import com.example.utils.Utils;
4+
import com.google.common.collect.ImmutableList;
5+
6+
public class Library {
7+
public Iterable<String> getMessages() {
8+
// Verify that Guava is available
9+
ImmutableList.Builder<String> builder = ImmutableList.builder();
10+
builder.add("Hello from Java " + System.getProperty("java.version"));
11+
12+
// Verify that the Java library is available
13+
Utils utils = new Utils();
14+
builder.add(utils.getWelcome());
15+
16+
return builder.build();
17+
}
18+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
plugins {
2+
id("org.scijava.kotlin-application")
3+
}
4+
5+
kotlinJvmApplication {
6+
javaVersion = 21
7+
mainClass = "com.example.AppKt"
8+
9+
dependencies {
10+
implementation(project(":kotlin-jvm-util"))
11+
implementation("com.google.guava:guava:32.1.3-jre")
12+
}
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.example
2+
3+
import com.example.utils.Utils
4+
import com.google.common.collect.ImmutableList
5+
6+
fun main() {
7+
// Verify that Guava is available
8+
val builder = ImmutableList.builder<String>()
9+
builder.add("Hello from Kotlin on JVM ${System.getProperty("java.version")}")
10+
11+
// Verify that the Kotlin JVM library is available
12+
val utils = Utils()
13+
builder.add(utils.welcome)
14+
15+
val messages = builder.build()
16+
messages.forEach(::println)
17+
}

declarative/build.gradle.kts

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
//import org.gradle.api.experimental.java.javaLibrary
2+
3+
plugins {
4+
`kotlin-dsl`
5+
id("com.gradle.plugin-publish") version "1.2.1"
6+
}
7+
8+
repositories { mavenCentral() }
9+
10+
//javaLibrary {
11+
// javaVersion = 11
12+
//}
13+
14+
dependencies {
15+
// implementation(kotlin("multiplatform", embeddedKotlinVersion))
16+
implementation("org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin:$embeddedKotlinVersion")
17+
// implementation(kotlin("jvm"))
18+
}
19+
20+
gradlePlugin {
21+
plugins {
22+
// create("jvm-library") {
23+
// id = "org.gradle.experimental.jvm-library"
24+
// implementationClass = "org.gradle.api.experimental.jvm.StandaloneJvmLibraryPlugin"
25+
// tags = setOf("declarative-gradle", "java", "jvm")
26+
// }
27+
// create("java-library") {
28+
// id = "org.gradle.experimental.java-library"
29+
// implementationClass = "org.gradle.api.experimental.java.StandaloneJavaLibraryPlugin"
30+
// tags = setOf("declarative-gradle", "java", "jvm")
31+
// }
32+
create("scijava.library") {
33+
id = "org.$name"
34+
implementationClass = "org.scijava.SciJavaLibraryPlugin"
35+
tags = setOf("declarative-gradle", "scijava", "java", "jvm")
36+
}
37+
create("scijava.application") {
38+
id = "org.$name"
39+
implementationClass = "org.scijava.SciJavaApplicationPlugin"
40+
tags = setOf("declarative-gradle", "scijava", "java", "jvm")
41+
}
42+
create("scijava.kotlin-library") {
43+
id = "org.$name"
44+
implementationClass = "org.scijava.SciJavaKotlinLibraryPlugin"
45+
tags = setOf("declarative-gradle", "scijava", "java", "kotlin", "jvm")
46+
}
47+
create("scijava.kotlin-application") {
48+
id = "org.$name"
49+
implementationClass = "org.scijava.SciJavaKotlinApplicationPlugin"
50+
tags = setOf("declarative-gradle", "scijava", "java", "kotlin", "jvm")
51+
}
52+
// create("java-application") {
53+
// id = "org.gradle.experimental.java-application"
54+
// implementationClass = "org.gradle.api.experimental.java.StandaloneJavaApplicationPlugin"
55+
// tags = setOf("declarative-gradle", "java", "jvm")
56+
// }
57+
// create("jvm-ecosystem") {
58+
// id = "org.gradle.experimental.jvm-ecosystem"
59+
// implementationClass = "org.gradle.api.experimental.jvm.JvmEcosystemPlugin"
60+
// tags = setOf("declarative-gradle", "java", "jvm")
61+
// }
62+
}
63+
}

declarative/settings.gradle.kts

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// This is an empty umbrella build including all the component builds.
2+
// This build is not necessarily needed. The component builds work independently.
3+
4+
rootProject.name = "declarative"
5+
6+
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package org.gradle.api.experimental.common
2+
3+
import org.gradle.api.artifacts.dsl.Dependencies
4+
import org.gradle.api.artifacts.dsl.DependencyCollector
5+
import org.gradle.declarative.dsl.model.annotations.Restricted
6+
7+
/**
8+
* The declarative dependencies DSL block for an application.
9+
*/
10+
@Restricted
11+
interface ApplicationDependencies : Dependencies {
12+
val implementation: DependencyCollector
13+
val runtimeOnly: DependencyCollector
14+
val compileOnly: DependencyCollector
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.gradle.api.experimental.common
2+
3+
import org.gradle.api.artifacts.dsl.Dependencies
4+
import org.gradle.api.artifacts.dsl.DependencyCollector
5+
import org.gradle.declarative.dsl.model.annotations.Restricted
6+
7+
/**
8+
* The declarative dependencies DSL block for a library.
9+
*/
10+
@Restricted
11+
interface LibraryDependencies : Dependencies {
12+
val api: DependencyCollector
13+
val implementation: DependencyCollector
14+
val runtimeOnly: DependencyCollector
15+
val compileOnly: DependencyCollector
16+
// CompileOnlyApi is not included here, since both Android and KMP do not support it.
17+
// Does that mean we should also reconsider if we should support it? Or, should we
18+
// talk to Android and KMP about adding support
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.gradle.api.experimental.java
2+
3+
import org.gradle.api.experimental.jvm.HasJavaTarget
4+
import org.gradle.api.experimental.jvm.HasJvmApplication
5+
import org.gradle.api.experimental.jvm.HasJvmLibrary
6+
import org.gradle.declarative.dsl.model.annotations.Restricted
7+
import org.scijava.Fine
8+
9+
/**
10+
* An application implemented using a single version of Java.
11+
*/
12+
@Restricted
13+
interface JavaApplication : HasJavaTarget, HasJvmApplication
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package org.gradle.api.experimental.java
2+
3+
import org.gradle.api.experimental.jvm.HasJavaTarget
4+
import org.gradle.api.experimental.jvm.HasJvmLibrary
5+
import org.gradle.declarative.dsl.model.annotations.Restricted
6+
7+
/**
8+
* A library implemented using a single version of Java.
9+
*/
10+
@Restricted
11+
interface JavaLibrary : HasJavaTarget, HasJvmLibrary
12+
13+
//inline fun javaLibrary(block: JavaLibrary.() -> Unit): JavaLibrary {
14+
// return object : JavaLibrary{
15+
// override val javaVersion: Property<Int> = Property
16+
// override val dependencies: LibraryDependencies
17+
// get() = TODO("Not yet implemented")
18+
//
19+
// }.also(block)
20+
//}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package org.gradle.api.experimental.java
2+
3+
import org.gradle.api.Plugin
4+
import org.gradle.api.Project
5+
import org.gradle.api.experimental.jvm.internal.JvmPluginSupport
6+
import org.gradle.api.plugins.ApplicationPlugin
7+
import org.gradle.kotlin.dsl.create
8+
import org.scijava.ValidationApplication
9+
10+
/**
11+
* Creates a declarative [JavaApplication] DSL model, applies the official Java application plugin,
12+
* and links the declarative model to the official plugin.
13+
*/
14+
abstract class StandaloneJavaApplicationPlugin : Plugin<Project>, ValidationApplication {
15+
// @get:SoftwareType(name = "javaApplication", modelPublicType = JavaApplication::class)
16+
// abstract val application: JavaApplication
17+
18+
override val extensionName = "javaApplication"
19+
20+
override fun apply(project: Project) {
21+
val application = project.extensions.create<JavaApplication>(extensionName)
22+
val dslModel = application
23+
24+
project.plugins.apply(ApplicationPlugin::class.java)
25+
26+
linkDslModelToPlugin(project, dslModel)
27+
28+
project.validate()
29+
}
30+
31+
private fun linkDslModelToPlugin(project: Project, dslModel: JavaApplication) {
32+
JvmPluginSupport.linkJavaVersion(project, dslModel)
33+
JvmPluginSupport.linkApplicationMainClass(project, dslModel)
34+
JvmPluginSupport.linkMainSourceSourceSetDependencies(project, dslModel.dependencies)
35+
}
36+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package org.gradle.api.experimental.java
2+
3+
import org.gradle.api.Plugin
4+
import org.gradle.api.Project
5+
import org.gradle.api.experimental.jvm.internal.JvmPluginSupport
6+
import org.gradle.api.plugins.JavaLibraryPlugin
7+
import org.gradle.kotlin.dsl.create
8+
import org.scijava.ValidationLibrary
9+
10+
/**
11+
* Creates a declarative [JavaLibrary] DSL model, applies the official Java library plugin,
12+
* and links the declarative model to the official plugin.
13+
*/
14+
abstract class StandaloneJavaLibraryPlugin : Plugin<Project>, ValidationLibrary {
15+
// @get:SoftwareType(name = "javaLibrary", modelPublicType = JavaLibrary::class)
16+
// abstract val library: JavaLibrary
17+
18+
override val extensionName = "javaLibrary"
19+
20+
override fun apply(project: Project) {
21+
val javaLibrary = project.extensions.create<JavaLibrary>("javaLibrary")
22+
val dslModel = javaLibrary
23+
24+
project.plugins.apply(JavaLibraryPlugin::class.java)
25+
26+
linkDslModelToPlugin(project, dslModel)
27+
28+
project.validate()
29+
}
30+
31+
private fun linkDslModelToPlugin(project: Project, dslModel: JavaLibrary) {
32+
JvmPluginSupport.linkJavaVersion(project, dslModel)
33+
JvmPluginSupport.linkMainSourceSourceSetDependencies(project, dslModel.dependencies)
34+
}
35+
}

0 commit comments

Comments
 (0)