0

我有一个项目结构为

myproject/
         moduleA/
         moduleB/
         moduleC/

myprojectpom.xml作为

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.6.4</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.0.3</version>
            <scope>provided</scope>
        </dependency>

现在moduleC需要moduleB代码,因此它将依赖项引用为

       <dependency>
            <groupId>com.org.myproject</groupId>
            <artifactId>moduleB</artifactId>
            <version>${project.version}</version>
        </dependency>

但是当我在中执行课程时moduleC,它会抱怨

Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
......
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory

当我的moduleC班级执行moduleB代码时会发生这种情况。

我做错了什么?我怎样才能解决这个问题?

4

2 回答 2

7

您将依赖项设置为“已提供”,这意味着它们不会包含在您的运行时类路径中。您基本上是在告诉 Maven 您将在运行时提供这些文件,因此它们可以在那里进行编译,但除非您手动将它们放入类路径中,否则它们在您运行时将不存在。

看看这里:http ://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope 了解每个范围级别的更多信息。

如果您不指定任何内容,则将编译范围:

编译是默认范围,如果没有指定则使用。编译依赖项在项目的所有类路径中都可用。此外,这些依赖关系会传播到依赖项目。

因此,您可以省略作用域标记或将其显式添加为编译,并且当您运行应用程序时,依赖项将包含在运行时类路径中。

于 2012-09-17T23:38:18.680 回答
1

根据@Dave 的评论,我确实添加了以下内容,pom.xml并且事情开始照常工作

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.6.6</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.0.6</version>
        </dependency>
于 2012-09-18T13:10:57.310 回答