On 24/07/10 11:02 PM, Levi Hoogenberg wrote:
Isn't this a transitivity issue? You don't have slf4j-api in your dependency list and I think you're expecting Gradle to pick it up from slf4j-log4j. AFAIK, it won't.

I think this is exactly what it is. In 0.9-preview-3 we made the compile configuration transitive, but forgot to change testCompile. It's been since fixed so that compile and testCompile are both transitive (for good or bad).

You can change testCompile to be transitive very easily:

configurations.testCompile.transitive = true

But, it might be better to add slf4j-api as a dependency, seeing as it actually is a dependency of your code.



On Fri, Jul 23, 2010 at 9:17 PM, Dariusz Ludera <[email protected] <mailto:[email protected]>> wrote:



    2010/7/23 Jason Porter <lightguard.jp
    <http://lightguard.jp>@gmail.com <http://gmail.com>>

        On Fri, Jul 23, 2010 at 10:46, Dariusz Ludera
        <[email protected] <mailto:[email protected]>>
        wrote:
        >
        >
        > 2010/7/23 Jason Porter <lightguard.jp
        <http://lightguard.jp>@gmail.com <http://gmail.com>>
        >>
        >> On Fri, Jul 23, 2010 at 05:03, Dariusz Ludera
        <[email protected] <mailto:[email protected]>>
        >> wrote:
        >> > Hi!
        >> >
        >> > First of all I'd like to say that I'm newbie in gradle.
        Secondly, I'd
        >> > like
        >> > to use dependencies for example:
        >> >
        >> > compile 'log4j:log4j:1.2.16'
        >> > compile 'org.slf4j:slf4j-log4j12:1.6.1'
        >> >
        >> > to be avialable in testCompile scope. How can I declare
        it in my
        >> > build.gradle script?
        >> >
        >> > I want to use classes from this libraries in
        /src/main/java and
        >> > /src/test/java, but when I use it in my test classes,
        while testCompile
        >> > task
        >> > execution I get an error that packages org.slf4j and
        log4j doesn't
        >> > exist, so
        >> > gradle doesn't include libraries. I've got Maven pom.xml
        configured the
        >> > same
        >> > way as build.gradle and there my tests work correctly.
        >> >
        >> >
        >> >
        >> > --
        >> > Regards,
        >> > Darek
        >> >
        >>
        >> Just add it as testCompile as well, though you shouldn't
        have to.
        >> testCompile should be inheriting from compile.  Which
        version of
        >> gradle are you using?
        >>
        >> --
        >> Jason Porter
        >> http://lightguard-jp.blogspot.com
        >> http://twitter.com/lightguardjp
        >>
        >> Software Engineer
        >> Open Source Advocate
        >>
        >> PGP key id: 926CCFF5
        >> PGP key available at: keyserver.net <http://keyserver.net>,
        pgp.mit.edu <http://pgp.mit.edu>
        >>
        >>
        ---------------------------------------------------------------------
        >> To unsubscribe from this list, please visit:
        >>
        >> http://xircles.codehaus.org/manage_email
        >>
        >>
        >
        > Thanks for your replay!
        >
        > Adding as a testCompile didn't help.
        >
        > Here is my dependencies section:
        >
        > dependencies {
        >     compile 'log4j:log4j:1.2.16'
        >     compile 'org.slf4j:slf4j-log4j12:1.6.1'
        >     // for debug reason I removed other dependencies
        > }
        >
        > and output from gradle test run task (info level):
        >
        > :compileTestJava
        > :: resolving dependencies :: #crm;0.1-SNAPSHOT
        >     confs: [testCompile]
        >     found log4j#log4j;1.2.16 in
        > file:/C:/Documents%20and%20Settings/dludera/.m2/repository/
        >     found org.slf4j#slf4j-log4j12;1.6.1 in
        > file:/C:/Documents%20and%20Settings/dludera/.m2/repository/
        > :: resolution report :: resolve 16ms :: artifacts dl 0ms
        >
        > (...) and then:
        > MyClassName.java:5: package org.slf4j does not exist
        > import org.slf4j.Logger;
        >
        > So ant compile task couldn't find package org.slf4j which is in
        > :slf4j-log4j12-1.6.1.jar library. I don't underestand why
        gradle doesn't
        > attach it - maven in the same configuration works fine. I
        use gradle 0.9-p3
        > with useTestNG(), here is my test section:
        >
        > test {
        >     useTestNG()
        >     systemProperties 'org.uncommons.reportng.stylesheet':
        > "${projectDir}/resources/hudsonesque.css"
        >     options {
        >         listeners << 'org.uncommons.reportng.HTMLReporter'
        >         listeners << 'org.uncommons.reportng.JUnitXMLReporter'
        >     }
        >     useDefaultListeners = false
        > }
        >
        >
        >
        >
        > --
        > Regards,
        >
        > Darek
        >

        Very strange, pastebin or send the whole gradle script.

        --
        Jason Porter
        http://lightguard-jp.blogspot.com
        http://twitter.com/lightguardjp

        Software Engineer
        Open Source Advocate

        PGP key id: 926CCFF5
        PGP key available at: keyserver.net <http://keyserver.net>,
        pgp.mit.edu <http://pgp.mit.edu>

        ---------------------------------------------------------------------
        To unsubscribe from this list, please visit:

        http://xircles.codehaus.org/manage_email



    Yes, it's defenetly strange. Here is my gradle script (without
    some not important tasks):

    apply plugin: 'war'
    apply plugin: 'eclipse'
    apply plugin: 'code-quality'
    apply plugin: 'project-reports'

    version = '0.1-SNAPSHOT'
    warName = archivesBaseName + '-' + version + '.war'
    sourceCompatibility = 1.6
    targetCompatibility = 1.6

    repositories {
        mavenRepo urls: new File(System.getProperty('user.home') +
    '/.m2/repository/').toURI().toURL()
        mavenCentral()
        mavenRepo urls: 'http://download.java.net/maven/2/'
        mavenRepo urls: 'http://repository.jboss.com/maven2'
        mavenRepo urls:
    'http://oss.sonatype.org/content/repositories/vaadin-snapshots/'
    }

    configurations {
        findbugsConf
        pmdConf
    }

    dependencies {
        compile 'com.vaadin:vaadin:6.4.0'
        runtime 'com.oracle:oracle:11.2.0.1.0'

        compile 'log4j:log4j:1.2.16'
        compile 'org.slf4j:slf4j-log4j12:1.6.1'
        compile ('org.hibernate:hibernate-entitymanager:3.5.1-Final') {
            exclude(module: 'slf4j-api')
        }
        compile ('org.hibernate:hibernate-validator:4.0.2.GA
    <http://4.0.2.GA>')
        testCompile 'org.uncommons:reportng:1.1.1'
        testCompile 'org.testng:testng:5.11:jd...@jar'
        findbugsConf 'net.sourceforge.findbugs:findbugs:1.3.2',
    'net.sourceforge.findbugs:findbugs-ant:1.3.2'
        pmdConf 'pmd:pmd:4.2.5'
    }

    eclipseWtp {
        deployName = archivesBaseName
    }

    task ide(dependsOn: configurations.runtime.buildArtifacts, type:
    Copy) {
        def libDir = file('lib')
        into(libDir)
        from configurations.runtime
        from configurations.runtime.allArtifacts*.file
        from configurations.testRuntime
        from configurations.testRuntime.allArtifacts*.file
    }

    Here is my dummy class from src/main/java:
    package pl.something;

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

    import com.vaadin.Application;
    import com.vaadin.ui.Button;
    import com.vaadin.ui.Window;


    /**
     * The Application's "main" class
     */
    @SuppressWarnings("serial")
    public class MyVaadinApplication extends Application {

        private static final Logger log =
    LoggerFactory.getLogger(MyVaadinApplication.class);

        private Window window;

        private String appName;

        public MyVaadinApplication() {
            this.appName = "My Vaadin Application";
        }

        public MyVaadinApplication(String appName) {
            this.appName = appName;
        }

        @Override
        public void init() {
            window = new Window(appName);
            setMainWindow(window);
            window.addComponent(new Button("Click Me"));

    log.info <http://log.info>("Clicked!");
        }

        public String getAppName() {
            return appName;
        }
    }

    and here is it's stupid test (from src/test/java):

    package pl.something.test;

    //import org.testng.log4testng.Logger;

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

    import org.testng.Assert;
    import org.testng.annotations.Test;
    import org.testng.annotations.BeforeClass;

    import pl.something.MyVaadinApplication;

    public class MyVaadinApplicationTest {

        private static final Logger log =
    LoggerFactory.getLogger(MyVaadinApplicationTest.class);

        private MyVaadinApplication testApp;

        private String testAppName;

        @BeforeClass
        public void setUp() {
            testAppName = "My Vaadin Test Application";
            testApp = new MyVaadinApplication(testAppName);

    log.info <http://log.info>("Setting up ...");
        }

        @Test
        public void shouldReturnValidTestAppName() {
            Assert.assertEquals(testAppName, testApp.getAppName());
        }
    }

    and testng.xml (src/test/resources)

    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd";>
    <suite name="some_suit">
    <test verbose="1" name="MyVaadinApplicationTest" annotations="JDK">
    <classes>
    <class
                    name="pl.something.test.MyVaadinApplicationTest" />
    </classes>
    </test>
    </suite>

-- Regards!

    Darek




--
Adam Murdoch
Gradle Developer
http://www.gradle.org
CTO, Gradle Inc. - Gradle Training, Support, Consulting
http://www.gradle.biz

Reply via email to