Maven和spring boot的问题:org.eclipse.sisu.wire.LocatorWiring绑定返回的null

问题描述 投票:0回答:1

我试图在spring boot项目上运行maven命令,但是一直以来我都遇到很多这样的错误:

22) null returned by binding at org.eclipse.sisu.wire.LocatorWiring
 but parameter 0 of org.eclipse.aether.internal.impl.DefaultMetadataResolver.<init>() is not @Nullable
  while locating org.eclipse.aether.impl.RepositoryEventDispatcher
    for parameter 0 at org.eclipse.aether.internal.impl.DefaultMetadataResolver.<init>(DefaultMetadataResolver.java:103)
  while locating org.eclipse.aether.internal.impl.DefaultMetadataResolver
  while locating java.lang.Object annotated with *
  at org.eclipse.sisu.wire.LocatorWiring
  while locating org.eclipse.aether.impl.MetadataResolver
    for parameter 0 at org.apache.maven.repository.internal.DefaultVersionResolver.<init>(DefaultVersionResolver.java:111)
  while locating org.apache.maven.repository.internal.DefaultVersionResolver
  at ClassRealm[plexus.core, parent: null] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
  at ClassRealm[plexus.core, parent: null] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
  while locating org.eclipse.aether.impl.VersionResolver
    for parameter 1 at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.<init>(DefaultArtifactDescriptorReader.java:116)
  while locating org.apache.maven.repository.internal.DefaultArtifactDescriptorReader
  at ClassRealm[plexus.core, parent: null] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
  at ClassRealm[plexus.core, parent: null] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
  while locating org.eclipse.aether.impl.ArtifactDescriptorReader
    for parameter 1 at org.eclipse.aether.internal.impl.DefaultDependencyCollector.<init>(DefaultDependencyCollector.java:92)
  while locating org.eclipse.aether.internal.impl.DefaultDependencyCollector
  while locating java.lang.Object annotated with *
  at org.eclipse.sisu.wire.LocatorWiring
  while locating org.eclipse.aether.impl.DependencyCollector
    for parameter 5 at org.eclipse.aether.internal.impl.DefaultRepositorySystem.<init>(DefaultRepositorySystem.java:121)
  while locating org.eclipse.aether.internal.impl.DefaultRepositorySystem
  while locating java.lang.Object annotated with *
  while locating org.apache.maven.artifact.resolver.DefaultArtifactResolver
  at ClassRealm[plexus.core, parent: null] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
  at ClassRealm[plexus.core, parent: null] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
  while locating org.apache.maven.artifact.resolver.ArtifactResolver
  while locating org.apache.maven.repository.legacy.LegacyRepositorySystem
  at ClassRealm[plexus.core, parent: null] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
  at ClassRealm[plexus.core, parent: null] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
  while locating org.apache.maven.repository.RepositorySystem
  while locating org.apache.maven.project.DefaultProjectBuildingHelper
  at ClassRealm[plexus.core, parent: null] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
  at ClassRealm[plexus.core, parent: null] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
  while locating org.apache.maven.project.ProjectBuildingHelper
  while locating org.apache.maven.project.DefaultProjectBuilder
  at ClassRealm[plexus.core, parent: null] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
  at ClassRealm[plexus.core, parent: null] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
  while locating org.apache.maven.project.ProjectBuilder
  while locating org.apache.maven.DefaultMaven
  at ClassRealm[plexus.core, parent: null] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
  at ClassRealm[plexus.core, parent: null] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
  while locating org.apache.maven.Maven

虽然在Windows上以Intellij运行,但没有问题。问题是当我尝试从Linux上的命令行运行它时。在两个设备上都是相同版本的Maven。

Pom文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
        <relativePath/>
    </parent>
    <groupId>com.tatara</groupId>
    <artifactId>Euress</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>Euress</name>
    <description>Euress application</description>

    <properties>
        <java.version>1.8</java.version>
        <groovy.version>2.1.5</groovy.version>
        <gmavenplus-plugin.version>1.6</gmavenplus-plugin.version>
        <spock-spring.version>1.1-groovy-2.4</spock-spring.version>
        <cglib-nodep.version>3.2.7</cglib-nodep.version>
        <groovy-all.version>2.4.4</groovy-all.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>${groovy-all.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib-nodep</artifactId>
            <version>${cglib-nodep.version}</version>
        </dependency>
        <dependency>
            <groupId>org.spockframework</groupId>
            <artifactId>spock-spring</artifactId>
            <version>${spock-spring.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-neo4j</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.codehaus.gmavenplus</groupId>
                <artifactId>gmavenplus-plugin</artifactId>
                <version>${gmavenplus-plugin.version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>compileTests</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <sources>
                        <source>
                            <directory>${project.basedir}/src/main/java/groovy</directory>
                            <includes>
                                <include>**/*.groovy</include>
                            </includes>
                        </source>
                    </sources>
                    <testSources>
                        <testSource>
                            <directory>${project.basedir}/src/test/groovy</directory>
                            <includes>
                                <include>**/*.groovy</include>
                            </includes>
                        </testSource>
                    </testSources>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

也许有人可以帮助我找到该问题的任何解决方案?我认为这可能与spock和maven版本有关。

java spring-boot maven spock
1个回答
0
投票

我无法构建您的项目并看到相同的错误,因为我只有一个POM。但我可以看看您的POM并查看

<groovy.version>2.1.5</groovy.version>
<groovy-all.version>2.4.4</groovy-all.version>

您不直接使用groovy.version,但是可能在其中一个依赖项POM中使用了此属性,因为当我通过mvn help:effective-pom查看有效的POM时,会看到以下内容:

<!-- (...) -->

    <groovy-all.version>2.4.4</groovy-all.version>
    <groovy.version>2.1.5</groovy.version>

<!-- (...) -->

      <dependency>
        <groupId>org.codehaus.groovy</groupId>
        <artifactId>groovy</artifactId>
        <version>2.1.5</version>
      </dependency>
      <dependency>2.
        <groupId>org.codehaus.groovy</groupId>
        <artifactId>groovy-ant</artifactId>
        <version>2.1.5</version>
      </dependency>
      <!-- and many more modules like these -->

然后我看到Spock-Spring 1.1-groovy-2.4实际上更喜欢Groovy 2.4.9,因此我们在这里处理另一个版本,我们已经拥有

  • 2.1.5-绝对太旧了,为什么要为Groovy 2.4设计的Spock版本使用Groovy 2.1?
  • 2.4.4
  • 2.4.9

然后在您的有效POM中也有传递依赖项

      <dependency>
        <groupId>org.awaitility</groupId>
        <artifactId>awaitility-groovy</artifactId>
        <version>4.0.1</version>
      </dependency>

再次引用您要覆盖的属性以及较新的Spock和Groovy版本:

    <properties>
        <groovy.version>2.5.7</groovy.version>
        <spock.version>1.3-groovy-2.5</spock.version>
    </properties>

<!-- (...) -->

        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy</artifactId>
            <version>${groovy.version}</version>
        </dependency>

这是版本冲突的来源。我建议您在dependencyManagement部分中定义自己的POM(或父POM)中所需的Groovy和Spock版本,然后仅在dependencies部分中导入没有版本号的实际依赖项。在使用它的同时,您还可以升级到Spock 1.3-groovy-2.5和Groovy 2.5版本。我们可以吗?

此外,您甚至没有直接引用Spock Core,它只是Spock Spring的传递依赖。也许您也想包括直接依赖项,因为它对您的测试很重要,不是吗?

我保留您的Groovy-All导入,但是您可能考虑只导入您真正需要进行测试的Groovy模块,最少只需org.codehaus.groovy:groovy

查看是否适合您:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.1.RELEASE</version>
    <relativePath/>
  </parent>

  <groupId>com.tatara</groupId>
  <artifactId>Euress</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <name>Euress</name>
  <description>Euress application</description>

  <properties>
    <java.version>1.8</java.version>
    <groovy.version>2.5.8</groovy.version>
    <gmavenplus-plugin.version>1.8.1</gmavenplus-plugin.version>
    <spock.version>1.3-groovy-2.5</spock.version>
    <cglib-nodep.version>3.2.7</cglib-nodep.version>
  </properties>

  <!-- Manage your versions here, i.e. fixing them for your project, even if your imported POMs disagree -->
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.codehaus.groovy</groupId>
        <artifactId>groovy</artifactId>
        <version>${groovy.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>cglib</groupId>
        <artifactId>cglib-nodep</artifactId>
        <version>${cglib-nodep.version}</version>
      </dependency>
      <dependency>
        <groupId>org.spockframework</groupId>
        <artifactId>spock-core</artifactId>
        <version>${spock.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.spockframework</groupId>
        <artifactId>spock-spring</artifactId>
        <version>${spock.version}</version>
        <scope>test</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <!-- Import the dependencies you need here, the versions and default scopes have already be managed above -->
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.codehaus.groovy</groupId>
      <artifactId>groovy-all</artifactId>
      <version>${groovy.version}</version>
      <type>pom</type>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>cglib</groupId>
      <artifactId>cglib-nodep</artifactId>
    </dependency>
    <dependency>
      <groupId>org.spockframework</groupId>
      <artifactId>spock-core</artifactId>
    </dependency>
    <dependency>
      <groupId>org.spockframework</groupId>
      <artifactId>spock-spring</artifactId>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-neo4j</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
      <groupId>org.postgresql</groupId>
      <artifactId>postgresql</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
      <exclusions>
        <exclusion>
          <groupId>org.junit.vintage</groupId>
          <artifactId>junit-vintage-engine</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.codehaus.gmavenplus</groupId>
        <artifactId>gmavenplus-plugin</artifactId>
        <version>${gmavenplus-plugin.version}</version>
        <executions>
          <execution>
            <goals>
              <goal>compileTests</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <sources>
            <source>
              <directory>${project.basedir}/src/main/java/groovy</directory>
              <includes>
                <include>**/*.groovy</include>
              </includes>
            </source>
          </sources>
          <testSources>
            <testSource>
              <directory>${project.basedir}/src/test/groovy</directory>
              <includes>
                <include>**/*.groovy</include>
              </includes>
            </testSource>
          </testSources>
        </configuration>
      </plugin>
    </plugins>
  </build>

</project>
© www.soinside.com 2019 - 2024. All rights reserved.