Add multi-project structure

This commit is contained in:
aNNiMON 2023-08-26 15:59:36 +03:00 committed by Victor Melnik
parent aa62b71520
commit 3aedda0e93
8 changed files with 161 additions and 72 deletions

7
.gitignore vendored
View File

@ -1,12 +1,9 @@
/.gradle/ /.gradle/
/.idea/ /.idea/
/.nb-gradle/ /.nb-gradle/
/build/ **/build/
/dist/ /dist/
/out/ /out/
/store/ /store/
/optimizations/ /optimizations/
/nbproject/private/ OwnLang.iml
/src/main/generatedJava/
OwnLang.iml
.nb-gradle-properties

View File

@ -1,70 +1,12 @@
plugins { allprojects {
id 'java' repositories {
} mavenCentral()
}
group = 'com.annimon' gradle.projectsEvaluated {
version = '2.0-SNAPSHOT' tasks.withType(JavaCompile) {
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8' options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
if (!hasProperty('mainClass')) { }
ext.mainClass = 'com.annimon.ownlang.Main'
}
ext.generatedJavaDir = "${rootProject.projectDir}/src/main/generatedJava"
sourceSets.main.java.srcDirs += project.generatedJavaDir
repositories {
mavenCentral()
}
tasks.register('generateJavaSources') {
doLast {
def source = """
package com.annimon.ownlang;
class Gen {
private Gen() {}
public static final String BUILD_DATE = "${new Date().format('YYMMdd')}";
}
""".stripIndent()
def genFile = new File("${project.generatedJavaDir}/com/annimon/ownlang/Gen.java")
genFile.getParentFile().mkdirs()
genFile.write(source)
} }
} }
compileJava.dependsOn(generateJavaSources)
tasks.register('run', JavaExec) {
dependsOn classes
mainClass = project.mainClass
classpath = sourceSets.main.runtimeClasspath
standardInput = System.in
ignoreExitValue true
}
tasks.register('runOptimizing', JavaExec) {
dependsOn classes
mainClass = project.mainClass
classpath = sourceSets.main.runtimeClasspath
ignoreExitValue true
args '-o 9 -m -a -f program.own'.split(' ')
}
dependencies {
implementation ('io.socket:socket.io-client:1.0.2') {
exclude group: 'org.json', module: 'json'
}
implementation 'org.json:json:20230227'
implementation 'org.yaml:snakeyaml:1.20'
implementation 'jline:jline:2.14.5'
testImplementation platform('org.junit:junit-bom:5.9.2')
testImplementation 'org.junit.jupiter:junit-jupiter-params:5.9.2'
testImplementation 'org.junit.jupiter:junit-jupiter'
testImplementation 'org.openjdk.jmh:jmh-core:1.37'
testImplementation 'org.openjdk.jmh:jmh-generator-annprocess:1.37'
}
test {
useJUnitPlatform()
}

25
modules/main/build.gradle Normal file
View File

@ -0,0 +1,25 @@
plugins {
id 'java-library'
}
group = 'com.annimon.module'
version = '2.0-SNAPSHOT'
dependencies {
api project(":ownlang-core")
implementation 'com.squareup.okhttp3:okhttp:3.8.1'
implementation ('io.socket:socket.io-client:1.0.2') {
exclude group: 'org.json', module: 'json'
}
implementation 'org.json:json:20230227'
implementation 'org.yaml:snakeyaml:1.20'
testImplementation platform('org.junit:junit-bom:5.9.2')
testImplementation 'org.junit.jupiter:junit-jupiter'
}
test {
useJUnitPlatform()
}

36
ownlang-core/build.gradle Normal file
View File

@ -0,0 +1,36 @@
plugins {
id 'java-library'
}
group = 'com.annimon'
version = '2.0-SNAPSHOT'
dependencies {
implementation 'org.json:json:20230227'
testImplementation platform('org.junit:junit-bom:5.9.2')
testImplementation 'org.junit.jupiter:junit-jupiter'
}
test {
useJUnitPlatform()
}
ext.generatedJavaDir = "${project.buildDir}/gen/src/main/java"
sourceSets.main.java.srcDirs += project.generatedJavaDir
tasks.register('generateJavaSources') {
doLast {
def source = """
package com.annimon.ownlang;
class Gen {
private Gen() {}
public static final String BUILD_DATE = "${new Date().format('YYMMdd')}";
}
""".stripIndent()
def genFile = new File("${project.generatedJavaDir}/com/annimon/ownlang/Gen.java")
genFile.getParentFile().mkdirs()
genFile.write(source)
}
}
compileJava.dependsOn(generateJavaSources)

View File

@ -0,0 +1,41 @@
plugins {
id 'java'
id 'application'
}
group = 'com.annimon'
version = '2.0-SNAPSHOT'
application {
mainClass ='com.annimon.ownlang.Main'
}
dependencies {
implementation project(":ownlang-core")
implementation project(":ownlang-parser")
implementation project(":ownlang-utils")
implementation project(":modules:main")
testImplementation platform('org.junit:junit-bom:5.9.2')
testImplementation 'org.junit.jupiter:junit-jupiter'
}
test {
useJUnitPlatform()
}
/*tasks.register('run', JavaExec) {
dependsOn classes
mainClass = project.mainClass
classpath = sourceSets.main.runtimeClasspath
standardInput = System.in
ignoreExitValue true
}
tasks.register('runOptimizing', JavaExec) {
dependsOn classes
mainClass = project.mainClass
classpath = sourceSets.main.runtimeClasspath
ignoreExitValue true
args '-o 9 -m -a -f program.own'.split(' ')
}*/

View File

@ -0,0 +1,20 @@
plugins {
id 'java-library'
}
group = 'com.annimon'
version = '2.0-SNAPSHOT'
dependencies {
api project(":ownlang-core")
testImplementation platform('org.junit:junit-bom:5.9.2')
testImplementation 'org.junit.jupiter:junit-jupiter-params:5.9.2'
testImplementation 'org.junit.jupiter:junit-jupiter'
testImplementation 'org.openjdk.jmh:jmh-core:1.37'
testImplementation 'org.openjdk.jmh:jmh-generator-annprocess:1.37'
}
test {
useJUnitPlatform()
}

View File

@ -0,0 +1,20 @@
plugins {
id 'java-library'
}
group = 'com.annimon'
version = '2.0-SNAPSHOT'
dependencies {
api project(":ownlang-parser")
implementation 'org.json:json:20230227'
implementation 'org.yaml:snakeyaml:1.20'
implementation 'jline:jline:2.14.5'
testImplementation platform('org.junit:junit-bom:5.9.2')
testImplementation 'org.junit.jupiter:junit-jupiter'
}
test {
useJUnitPlatform()
}

View File

@ -1 +1,9 @@
rootProject.name = 'OwnLang' rootProject.name = 'OwnLang'
include 'ownlang-core'
include 'ownlang-parser'
include 'ownlang-desktop'
include 'ownlang-utils'
include 'modules:main'
findProject(':modules:main')?.name = 'main'