首页 > 解决方案 > Maven 不会在我发布的 jar 库中传输日志依赖项

问题描述

我基于 Logback 构建了一个结构数据记录器,并将一个 jar 发布到我自己的 nexus。lib jar 由 scala 开发,我通过以下方式发布它sbt publish

name := "StructuredLogging"
version := "0.1.3-SNAPSHOT"
scalaVersion := "2.11.6"
organization := "com.xxxxxx.gds"
homepage := Some(url("https://github.xxxxxx.com/xxxxx/StructuredLogging"))
organizationHomepage := Some(url("https://github.xxxxxx.com/xxxxx"))

libraryDependencies ++= Seq(
  "com.chuusai" %% "shapeless" % "2.3.2",
  "ch.qos.logback" % "logback-core" % "1.2.3",
  "ch.qos.logback" % "logback-access" % "1.2.3",
  "ch.qos.logback" % "logback-classic" % "1.2.3",
  "org.scalatest" %% "scalatest" % "3.0.1" % "test",
  "com.typesafe.play" %% "play-json" % "2.6.0"
)

libraryDependencies ++= Seq(
  "com.fasterxml.jackson.core" % "jackson-core" % "2.8.0"
  , "com.amazonaws" % "aws-java-sdk-core" % "1.11.31" % "provided"
)

libraryDependencies += "org.slf4j" % "slf4j-api" % "1.7.25"
libraryDependencies += "org.slf4j" % "slf4j-log4j12" % "1.7.25"
libraryDependencies += "com.internetitem" % "logback-elasticsearch-appender" % "1.6"

mainClass := Some("com.xxxxxx.xxx.structure.logging.main.Main")

publishMavenStyle := true
publishTo := {
  val nexus = "http://nexus.xxxxxx.com/nexus/content/repositories/"
  if (version.value.trim.endsWith("SNAPSHOT"))
    Some("snapshots" at nexus + "snapshots")
  else
    Some("releases" at nexus + "releases")
}
publishArtifact in Test := false
credentials += Credentials(Path.userHome / ".ivy2" / ".credentials")
pomExtra :=
  <url>https://github.xxxxxx.com/xxxxx/StructuredLogging</url>
    <scm>
      <url>git@github.xxxxxx.com:xxxxx/StructuredLogging.git</url>
      <connection>scm:git@github.xxxxxx.com:xxxxx/StructuredLogging.git</connection>
    </scm>
    <developers>
      <developer>
        <id>xxxxx</id>
        <name>Xx, Xxx</name>
        <url>https://github.xxxxxx.com/xxxxx</url>
      </developer>
    </developers>

在我的 jar lib 的 pom 文件中,有它需要的所有 logback 和 slf4j 依赖项:

    <?xml version='1.0' encoding='UTF-8'?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0">
    <modelVersion>4.0.0</modelVersion>
    <groupId>xxx.xxxxxx.xxx</groupId>
    <artifactId>structuredlogging_2.11</artifactId>
    <packaging>jar</packaging>
    <description>StructuredLogging</description>
    <url>https://github.xxxxxx.com/xxxxx/StructuredLogging</url>
    <version>0.1.3-SNAPSHOT</version>
    <name>StructuredLogging</name>
    <organization>
        <name>xxx.xxxxxx.xxx</name>
        <url>https://github.xxxxxx.com/xxxxx</url>
    </organization>
    <url>https://github.xxxxxx.com/xxxxx/StructuredLogging</url>
    <scm>
        <url>git@github.xxxxxx.com:xxxxx/StructuredLogging.git</url>
        <connection>scm:git@github.xxxxxx.com:xxxxx/StructuredLogging.git</connection>
    </scm>
    <developers>
        <developer>
            <id>xxxxx</id>
            <name>xx, xxx</name>
            <url>https://github.xxxxxx.com/xxxxx</url>
        </developer>
    </developers>
    <dependencies>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>2.11.6</version>
        </dependency>
        <dependency>
            <groupId>com.chuusai</groupId>
            <artifactId>shapeless_2.11</artifactId>
            <version>2.3.2</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-access</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>org.scalatest</groupId>
            <artifactId>scalatest_2.11</artifactId>
            <version>3.0.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.typesafe.play</groupId>
            <artifactId>play-json_2.11</artifactId>
            <version>2.6.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-core</artifactId>
            <version>1.11.31</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
        </dependency>
        <dependency>
            <groupId>com.internetitem</groupId>
            <artifactId>logback-elasticsearch-appender</artifactId>
            <version>1.6</version>
        </dependency>
    </dependencies>
</project>

但是当我在另一个项目 X 中使用 lib jar 时,它仍然错过了 logback 和 slf4j 的依赖项。我必须向项目 X 添加另一个依赖项来编译它。此外,当我检查项目 X 的​​依赖项时, mvn dependency:tree我得到了结果:

[INFO] |  \- com.googlecode.protobuf-java-format:protobuf-java-format:jar:1.4:compile
[INFO] \- xxx.xxxxxx.xxx:structuredlogging_2.11:jar:0.1.3-SNAPSHOT:compile
[INFO] ------------------------------------------------------------------------

xxx.xxxxxx.xxx:structuredlogging_2.11:jar我的 lib jar在哪里。但是我的 lib jar 中定义的所有依赖项都不会转移到当前项目 X。

如何通过我的structuredloggerlib的pom将logback依赖项转移到项目X,以便将使用我的lib的新项目不会在他们自己的pox.xml中添加其他依赖项?

标签: javamavendependency-management

解决方案


推荐阅读