首页 文章

Lagom / Scala / Maven runAll失败,出现异常:无法创建注入器

提问于
浏览
1

我使用的是Lagom 1.3.1 [SCALA]

我正在尝试使用pom.xml中的必要配置连接到外部Cassandra和kafka .

当我使用mvn lagom:runAll启动服务时,我收到以下错误

Downloading: http://.../.../com/lightbend/lagom/lagom-reloadable-server_2.11/1.3.1/lagom-reloadable-server_2.11-1.3.1.pom
Downloaded: http://.../.../com/lightbend/lagom/lagom-reloadable-server_2.11/1.3.1/lagom-reloadable-server_2.11-1.3.1.pom (6 KB at 52.8 KB/sec)
Downloading: http://.../.../com/lightbend/lagom/lagom-service-registration_2.11/1.3.1/lagom-service-registration_2.11-1.3.1.pom
Downloaded: http://.../.../com/lightbend/lagom/lagom-service-registration_2.11/1.3.1/lagom-service-registration_2.11-1.3.1.pom (6 KB at 48.1 KB/sec)
Downloading: http://.../.../com/lightbend/lagom/lagom-reloadable-server_2.11/1.3.1/lagom-reloadable-server_2.11-1.3.1.jar
Downloading: http://.../.../com/lightbend/lagom/lagom-service-registration_2.11/1.3.1/lagom-service-registration_2.11-1.3.1.jar
Downloaded: http://.../.../com/lightbend/lagom/lagom-reloadable-server_2.11/1.3.1/lagom-reloadable-server_2.11-1.3.1.jar (30 KB at 288.2 KB/sec)
Downloaded: http://.../.../com/lightbend/lagom/lagom-service-registration_2.11/1.3.1/lagom-service-registration_2.11-1.3.1.jar (21 KB at 171.7 KB/sec)
No play.logger.configurator found: logging must be configured entirely by the application.
com.google.inject.CreationException: Unable to create injector, see the following errors:

1) Could not find a suitable constructor in com.lightbend.lagom.internal.javadsl.server.ResolvedServices. Classes must have either one (and only one) constructor annotated with @Inject or a zero-argument constructor that is not private.
  at com.lightbend.lagom.internal.javadsl.server.ResolvedServices.class(JavadslServerBuilder.scala:95)
  while locating com.lightbend.lagom.internal.javadsl.server.ResolvedServices
    for parameter 1 at com.lightbend.lagom.internal.server.ServiceRegistrationModule$RegisterWithServiceRegistry.(ServiceRegistrationModule.scala:54)
  at com.lightbend.lagom.internal.server.ServiceRegistrationModule.bindings(ServiceRegistrationModule.scala:28):
Binding(class com.lightbend.lagom.internal.server.ServiceRegistrationModule$RegisterWithServiceRegistry to self eagerly) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon$1)

2) Could not find a suitable constructor in com.lightbend.lagom.javadsl.api.ServiceInfo. Classes must have either one (and only one) constructor annotated with @Inject or a zero-argument constructor that is not private.
  at com.lightbend.lagom.javadsl.api.ServiceInfo.class(ServiceInfo.java:51)
  while locating com.lightbend.lagom.javadsl.api.ServiceInfo
    for field at com.lightbend.lagom.internal.javadsl.registry.ServiceRegistryClientProvider.serviceInfo(ServiceRegistryModule.scala:62)
  at com.lightbend.lagom.internal.javadsl.registry.ServiceRegistryModule.configure(ServiceRegistryModule.scala:35) (via modules: com.google.inject.util.Modules$OverrideModule -> com.lightbend.lagom.internal.javadsl.registry.ServiceRegistryModule)

2 errors
        at com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:466)
        at com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:155)
        at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:107)

我没有在我的代码中使用Guice模块,我正在利用scala用“macwire”连接依赖关系的方式 . 但是,lagom的“服务注册”模块依赖于使用guice进行布线的javadsl .

有关如何解决此问题的任何想法?

我的父pom中的Maven依赖:

<properties>
    <scala.version>2.11.8</scala.version>
    <scala.binary.version>2.11</scala.binary.version>
    <lagom.version>1.3.1</lagom.version>
    <macwire.version>2.2.5</macwire.version>
    .....
</properties>
<dependencies>
    <dependency>
        <groupId>com.lightbend.lagom</groupId>
        <artifactId>lagom-scaladsl-server_${scala.binary.version}</artifactId>
        <version>${lagom.version}</version>
    </dependency>
    <dependency>
        <groupId>com.typesafe.play</groupId>
        <artifactId>play-netty-server_${scala.binary.version}</artifactId>
        <version>${play.version}</version>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>${scala.version}</version>
        </dependency>

        <dependency>
            <groupId>com.lightbend.lagom</groupId>
            <artifactId>lagom-scaladsl-api_${scala.binary.version}</artifactId>
            <version>${lagom.version}</version>
        </dependency>
        <dependency>
            <groupId>com.lightbend.lagom</groupId>
            <artifactId>lagom-scaladsl-persistence_${scala.binary.version}</artifactId>
            <version>${lagom.version}</version>
        </dependency>
        <dependency>
            <groupId>com.lightbend.lagom</groupId>
            <artifactId>lagom-logback_${scala.binary.version}</artifactId>
            <version>${lagom.version}</version>
        </dependency>
        <dependency>
            <groupId>com.lightbend.lagom</groupId>
            <artifactId>lagom-scaladsl-testkit_${scala.binary.version}</artifactId>
            <version>${lagom.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.lightbend.lagom</groupId>
            <artifactId>lagom-scaladsl-integration-client_${scala.binary.version}</artifactId>
            <version>${lagom.version}</version>
        </dependency>
        <dependency>
            <groupId>com.lightbend.lagom</groupId>
            <artifactId>lagom-scaladsl-pubsub_${scala.binary.version}</artifactId>
            <version>${lagom.version}</version>
        </dependency>
        <dependency>
            <groupId>com.lightbend.lagom</groupId>
            <artifactId>lagom-scaladsl-persistence-cassandra_${scala.binary.version}</artifactId>
            <version>${lagom.version}</version>
        </dependency>

        <dependency>
            <groupId>com.lightbend.lagom</groupId>
            <artifactId>lagom-scaladsl-dev-mode_${scala.binary.version}</artifactId>
            <version>${lagom.version}</version>
        </dependency>

        <dependency>
            <groupId>com.softwaremill.macwire</groupId>
            <artifactId>macros_${scala.binary.version}</artifactId>
            <version>${macwire.version}</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.module</groupId>
            <artifactId>jackson-module-scala_${scala.binary.version}</artifactId>
            <version>2.8.7</version>
        </dependency>



        <!-- Test -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.scalatest</groupId>
            <artifactId>scalatest_${scala.binary.version}</artifactId>
            <version>3.0.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.holdenkarau</groupId>
            <artifactId>spark-testing-base_2.10</artifactId>
            <version>2.0.0_0.4.4</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Maven Lagom插件配置:

<plugin>
        <groupId>com.lightbend.lagom</groupId>
        <artifactId>lagom-maven-plugin</artifactId>
        <version>${lagom.version}</version>
        <configuration>
            <lagomService>true</lagomService>
            <unmanagedServices>
                <cas_native>http://ip-address:9042</cas_native>
            </unmanagedServices>
            <cassandraEnabled>false</cassandraEnabled>
            <kafkaAddress>ip-address:9092</kafkaAddress>
            <kafkaEnabled>false</kafkaEnabled>
        </configuration>
    </plugin>

1 回答

  • 0

    目前,Lagom不支持将Maven与Scala API一起使用,只支持sbt . 将Maven与Lagom一起使用需要使用Java API .

相关问题