Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Compiled sub-project isn't added as dependency to root project #19

Open
haze opened this issue May 17, 2018 · 8 comments
Open

Compiled sub-project isn't added as dependency to root project #19

haze opened this issue May 17, 2018 · 8 comments

Comments

@haze
Copy link

haze commented May 17, 2018

Given this file structure:

A
| B
| build.gradle (and etc)

If I link B (an eta project) to A (a java project)
B isn't automatically added as a dependency when eta is finished compiling, so A fails to compile as well when referencing exported code from B.

@jneira
Copy link
Contributor

jneira commented May 17, 2018

As reference this is the tree of the project folder: https://gist.github.com/hvze/41675ec80bf72e78f3bef296afe1c666
Those snippets are the gradle configuration (from @hvze in gitter):

anyways here is the dependency's build.gradle

plugins {
    id 'com.typelead.eta'
}

group 'fi.ill.mod'
version '0.0.1-ec40f44'

allprojects {
    repositories {
        mavenCentral()
    }
}

sourceSets {
    main {
        eta {
            srcDir 'eta'
        }
    }
}

eta {
    version = '0.7.2b1'
    etlasVersion = '1.3.0.0'
}


dependencies {
    compile eta('base:4.8.2.0')
}

apply plugin: 'idea'

root settings.gradle

include ':eta'
findProject(':eta')?.name = 'Lambda-Haskell'

root build.gradle

buildscript {
    repositories {
        jcenter()
        maven { url = 'https://repo.spongepowered.org/maven' }
        maven { url = "http://files.minecraftforge.net/maven" }
        maven { url = 'https://plugins.gradle.org/m2/' }
    }
    dependencies {
        classpath "gradle.plugin.com.typelead:gradle-eta:0.6.1"
        classpath 'gradle.plugin.de.fuerstenau:BuildConfigPlugin:1.1.8'
        classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT'
        classpath 'net.nemerosa:versioning:2.0.0'
        classpath 'org.spongepowered:mixingradle:0.6-SNAPSHOT'
    }
}


plugins {
    id 'com.github.johnrengelman.shadow' version '2.0.3'
}

apply plugin: 'eta-base'
apply plugin: 'eta'
apply plugin: 'net.minecraftforge.gradle.forge'
apply plugin: 'net.nemerosa.versioning'
// apply plugin: 'de.fuerstenau.buildconfig'
apply plugin: 'org.spongepowered.mixin'
apply plugin: 'idea'
apply plugin: 'maven'
apply from: "gradle/scripts/deps.gradle"
apply from: "gradle/scripts/tasks.gradle"

version = "0.0.1-" + versioning.info.build
group = "fi.ill.mod"
archivesBaseName = "lambda"


/* mixin {
    add sourceSets.main, "mixins.lambda.refmap.json"
} */

sourceCompatibility = targetCompatibility = '1.8' // Need this here so eclipse task generates correctly.
compileJava {
    sourceCompatibility = targetCompatibility = '1.8'
}

minecraft {
    version = "1.12.2-14.23.3.2685"
    runDir = "run"

    // the mappings can be changed at any time, and must be in the following format.
    // snapshot_YYYYMMDD   snapshot are built nightly.
    // stable_#            stables are built at the discretion of the MCP team.
    // Use non-default mappings at your own risk. they may not always work.
    // simply re-run your setup task after changing the mappings to update your workspace.
    mappings = "snapshot_20171003"
    // makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable.
}

processResources {
    // this will ensure that this task is redone when the versions change.
    inputs.property "version", project.version
    inputs.property "mcversion", project.minecraft.version

    // replace stuff in mcmod.info, nothing else
    from(sourceSets.main.resources.srcDirs) {
        include 'mcmod.info'

        // replace version and mcversion
        expand 'version':project.version, 'mcversion':project.minecraft.version
    }

    from(sourceSets.main.resources.srcDirs) {
        exclude 'mcmod.info'
    }
}

jar {
    manifest {
        attributes 'FMLCorePlugin': 'fi.ill.mod.ClientMod'
        attributes 'FMLCorePluginContainsMod': 'true'
    }
}

deps.gradle

repositories {
    maven {
        name = 'spongepowered-repo'
        url = 'http://repo.spongepowered.org/maven/'
    }
}

dependencies {
    compile("org.spongepowered:mixin:0.7.4-SNAPSHOT") {
        exclude module: 'launchwrapper'
        exclude module: 'guava'
        exclude module: 'gson'
        exclude module: 'commons-io'
    }
    compile project(':Lambda-Haskell')
}

@rahulmutt
Copy link
Member

@hvze Can you try shifting:

eta {
    version = '0.7.2b1'
    etlasVersion = '1.3.0.0'
}

from your dependency's build.gradle to your root project's build.gradle? The plugin should actually not allow you to configure the eta extension in subprojects but I guess that Gradle automatically inherits extensions from the root project.

@rahulmutt
Copy link
Member

@hvze I tried reproducing your issue with a minimal project here:

https://github.com/rahulmutt/java-eta-gradle

And I was unable to reproduce. If you can modify that project to reproduce your problem, it'll help track this down. I have a feeling this has to do with the way you exported - maybe a typo somewhere?

@haze
Copy link
Author

haze commented May 20, 2018

With that test project the issue still occurs, @rahulmutt
To reproduce, clone the repo locally and double-click (or open) the build.gradle with IntelliJ.
An alternative option would be to clone using the IDE itself, but it doesn't matter.

When building the projects, both work fine, but in the root java project, IntelliJ has problems displaying the exported java code. This is because the compiled eta code is not shown as a dependency

@carymrobbins
Copy link
Collaborator

It seems if I update the build.gradle as follows (manually supplying the eta RTS jars) and create a main entrypoint in the Hello class, we can get this to work. So ideally, gradle-eta needs to add these RTS jars to the classpath for dependent projects.

Next, IntelliJ still doesn't resolve this correctly, even if I manually give the build.gradle the following -

dependencies {
  ...
  // Adding either of these doesn't seem to give IntelliJ a strong enough hint.
  compile files("$userHome/dump/java-eta-gradle/eta/build/libs/HelloEta.jar")
  runtime files("$userHome/dump/java-eta-gradle/eta/build/libs/HelloEta.jar")
}

In order to get IntelliJ to resolve the EtaExport class, I had to manually add it by going to Project Structure, then adding the ./eta/build/libs/HelloEta.jar to the java-eta-gradle_main module.

build.gradle

plugins {
  id 'com.typelead.eta.base' version '0.6.1'
  id 'java'
}

apply plugin: 'application'

mainClassName = 'eta.test.Hello'

def userHome = System.getProperty('user.home')

dependencies {
  compile project(':HelloEta')

  runtime files(
    "$userHome/.etlas/lib/eta-0.7.2.1/base-4.8.2.0-IPFDtZjmEfh5tPXF10v5hF/base-4.8.2.0-IPFDtZjmEfh5tPXF10v5hF.jar",
    "$userHome/.etlas/lib/eta-0.7.2.1/ghc-prim-0.4.0.0-Jhi6UgHuZdoBZWUpVo3WKE/ghc-prim-0.4.0.0-Jhi6UgHuZdoBZWUpVo3WKE.jar",
    "$userHome/.etlas/lib/eta-0.7.2.1/integer-0.5.1.0-ACyqTmAMUMGGvisLFeQbAm/integer-0.5.1.0-ACyqTmAMUMGGvisLFeQbAm.jar",
    "$userHome/.etlas/lib/eta-0.7.2.1/rts-0.1.0.0-5Dj4qf1Wx9cCeYbpni5T1w/rts-0.1.0.0-5Dj4qf1Wx9cCeYbpni5T1w.jar"
  )
}

Hello.java

package eta.test;

import eta.utils.EtaExport;

public class Hello {

    public static void main(String[] args) {
        System.out.println(new Hello().hello());
    }

@rahulmutt
Copy link
Member

@carymrobbins Does setting preInstalledDependencies = true in the eta extension block change the behavior?

Most of the plugin code just deals with adding dependencies properly and the main issue you may hit is if something needs the dependencies before the Gradle task graph is constructed & executed. In this case, preInstalledDependencies = true should inject all the dependencies across all source sets and all projects to the correct configurations. One way to ensure this is happening is by running with -i and watching out for Resolving Eta configuration ... messages.

@rahulmutt
Copy link
Member

Should be fixed in 0.6.6.

@rahulmutt
Copy link
Member

@hvze @carymrobbins Any luck with 0.7.3?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants