Hi, We're trying to the latest use jclouds 1.8.1 with a recent version of Guice 4.0-beta5, as Guice 3 is quite old.
There are two problems: 1. jclouds has to be modified to work with Guice 4.0-beta5. Otherwise you get this: 1) Overriding @Provides methods is not allowed. @Provides method: org.jclouds.logging.config.LoggingModule.createLoggerFactory() overridden by: org.jclouds.logging.jdk.config.JDKLoggingModule.createLoggerFactory() at com.google.inject.internal.ProviderMethodsModule.getProviderMethods(ProviderMethodsModule.java:128) The @Provides annotation has to be moved from the base method to each of the overriding concrete methods. I'm attaching to this mail an example which solves my use case for reference but there are likely other places where this has to be done. 2. jclouds depends on Rocoto 6.2 which is basically unmaintained. We had to fork it, a (very simple) patch is available at https://github.com/nuxeo/rocoto/commit/7c09617dac9cbbf8cd9f179ceb799f9d5e733d46 Because Rocoto is unmaintained, a solution has to be found for jclouds to keep using it. Maybe it could simply be included as an additional module inside jclouds? It would be great if the upcoming jclouds 1.9.0 would include this to support a more recent version of Guice, because otherwise projects using it with Java 8 and requiring a recent Guice won't work. Witness for instance https://issues.jenkins-ci.org/browse/JENKINS-26639 Regards, Florent -- Florent Guillaume, Director of R&D, Nuxeo Open Source Content Management Platform for Business Apps http://www.nuxeo.com http://community.nuxeo.com
diff --git a/core/pom.xml b/core/pom.xml index 3cc3b89..9913737 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -55,12 +55,12 @@ <dependency> <groupId>com.google.inject.extensions</groupId> <artifactId>guice-assistedinject</artifactId> - <version>3.0</version> + <version>4.0-beta5</version> </dependency> <dependency> <groupId>com.google.inject</groupId> <artifactId>guice</artifactId> - <version>3.0</version> + <version>4.0-beta5</version> </dependency> <dependency> <groupId>org.99soft.guice</groupId> diff --git a/core/src/main/java/org/jclouds/logging/config/ConsoleLoggingModule.java b/core/src/main/java/org/jclouds/logging/config/ConsoleLoggingModule.java index 6f1f6f6..d346f76 100644 --- a/core/src/main/java/org/jclouds/logging/config/ConsoleLoggingModule.java +++ b/core/src/main/java/org/jclouds/logging/config/ConsoleLoggingModule.java @@ -18,11 +18,15 @@ package org.jclouds.logging.config; import org.jclouds.logging.Logger; +import com.google.inject.Provides; + /** * Configures logging of type {@link ConsoleLogger} */ public class ConsoleLoggingModule extends LoggingModule { + @Provides + @Override public Logger.LoggerFactory createLoggerFactory() { return new Logger.LoggerFactory() { public Logger getLogger(String category) { diff --git a/core/src/main/java/org/jclouds/logging/config/LoggingModule.java b/core/src/main/java/org/jclouds/logging/config/LoggingModule.java index ad47bd1..ae89fcf 100644 --- a/core/src/main/java/org/jclouds/logging/config/LoggingModule.java +++ b/core/src/main/java/org/jclouds/logging/config/LoggingModule.java @@ -23,7 +23,6 @@ import javax.inject.Singleton; import org.jclouds.logging.Logger; import com.google.inject.AbstractModule; -import com.google.inject.Provides; /** * Creates a post-injection listener that binds Loggers named the same as the enclosing class. @@ -35,7 +34,6 @@ public abstract class LoggingModule extends AbstractModule { bindListener(any(), new BindLoggersAnnotatedWithResource(createLoggerFactory())); } - @Provides @Singleton public abstract Logger.LoggerFactory createLoggerFactory(); diff --git a/core/src/main/java/org/jclouds/logging/config/NullLoggingModule.java b/core/src/main/java/org/jclouds/logging/config/NullLoggingModule.java index a771b2a..886bbea 100644 --- a/core/src/main/java/org/jclouds/logging/config/NullLoggingModule.java +++ b/core/src/main/java/org/jclouds/logging/config/NullLoggingModule.java @@ -18,11 +18,15 @@ package org.jclouds.logging.config; import org.jclouds.logging.Logger; +import com.google.inject.Provides; + /** * Configures logging of type {@link NullLogger} */ public class NullLoggingModule extends LoggingModule { + @Provides + @Override public Logger.LoggerFactory createLoggerFactory() { return new Logger.LoggerFactory() { public Logger getLogger(String category) { diff --git a/core/src/main/java/org/jclouds/logging/jdk/config/JDKLoggingModule.java b/core/src/main/java/org/jclouds/logging/jdk/config/JDKLoggingModule.java index 5a57473..be9a12a 100644 --- a/core/src/main/java/org/jclouds/logging/jdk/config/JDKLoggingModule.java +++ b/core/src/main/java/org/jclouds/logging/jdk/config/JDKLoggingModule.java @@ -20,10 +20,15 @@ import org.jclouds.logging.Logger; import org.jclouds.logging.config.LoggingModule; import org.jclouds.logging.jdk.JDKLogger; +import com.google.inject.Provides; + /** * Configures logging of type {@link JDKLogger} */ public class JDKLoggingModule extends LoggingModule { + + @Provides + @Override public Logger.LoggerFactory createLoggerFactory() { return new JDKLogger.JDKLoggerFactory(); } diff --git a/drivers/log4j/src/main/java/org/jclouds/logging/log4j/config/Log4JLoggingModule.java b/drivers/log4j/src/main/java/org/jclouds/logging/log4j/config/Log4JLoggingModule.java index 4dd69fe..81bbf29 100644 --- a/drivers/log4j/src/main/java/org/jclouds/logging/log4j/config/Log4JLoggingModule.java +++ b/drivers/log4j/src/main/java/org/jclouds/logging/log4j/config/Log4JLoggingModule.java @@ -20,11 +20,14 @@ import org.jclouds.logging.Logger.LoggerFactory; import org.jclouds.logging.config.LoggingModule; import org.jclouds.logging.log4j.Log4JLogger; +import com.google.inject.Provides; + /** * Configures logging of type {@link Log4JLogger} */ public class Log4JLoggingModule extends LoggingModule { + @Provides @Override public LoggerFactory createLoggerFactory() { return new Log4JLogger.Log4JLoggerFactory(); diff --git a/drivers/slf4j/src/main/java/org/jclouds/logging/slf4j/config/SLF4JLoggingModule.java b/drivers/slf4j/src/main/java/org/jclouds/logging/slf4j/config/SLF4JLoggingModule.java index e533496..31f4744 100644 --- a/drivers/slf4j/src/main/java/org/jclouds/logging/slf4j/config/SLF4JLoggingModule.java +++ b/drivers/slf4j/src/main/java/org/jclouds/logging/slf4j/config/SLF4JLoggingModule.java @@ -20,11 +20,14 @@ import org.jclouds.logging.Logger.LoggerFactory; import org.jclouds.logging.config.LoggingModule; import org.jclouds.logging.slf4j.SLF4JLogger; +import com.google.inject.Provides; + /** * Configures logging of type {@link SLF4JLogger} */ public class SLF4JLoggingModule extends LoggingModule { + @Provides @Override public LoggerFactory createLoggerFactory() { return new SLF4JLogger.SLF4JLoggerFactory();