我使用简单的Maven项目运行基本的HelloWorld
。 mvn
编译工作正常,然后在我的HelloWorld
中,我将org.slf4j.*
添加为导入,然后尝试一行记录器。
当我执行mvn compile
时,出现编译错误,指示找不到org.slf4f
。
它应该很简单,看起来编译并没有指向它在我的.m2驱动器上下载的大量jar。我在那里找到了正确的罐子。我错过了一些非常基本的东西,在调试器中我看到-classpath
除了我的java类(一个类,HelloWorld)之外没有指向任何东西?我缺少一个基本元素吗?
下面也是我的pom文件,该版本也存在于我的.m2存储库中我虽然Maven神奇地在存储库中找到这些jar?
[DEBUG] -d C:\TestMaven\target\classes -classpath C:\TestMaven\target\classes; -sourcepath C:\TestMaven\src\main\java; -g -nowarn -target 1.5 -source 1.5
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.koushik.javabrains</groupId>
<artifactId>MavenTestApp</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging> <!-- jar war or ear etc... -->
<name>MavenTestApp</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope> <!-- tells maven when to use this artifact -->
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.12</version>
<scope>test</scope> <!-- tells maven when to use this artifact -->
</dependency>
答案 0 :(得分:1)
您将slf4j-api
声明为test
依赖项。这意味着它只会在执行单元测试期间出现在类路径中,而不是在编译期间(参考the documentation)。
您需要将范围更改为compile
。由于这是默认范围,我们可以省略它。
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.12</version>
<!-- scope compile by default -->
</dependency>
答案 1 :(得分:0)
只要您关注standard maven layout(如下所示),就不需要指定源和类路径。对于简单的情况,请将pom.xml
放在项目的根目录中,然后运行mvn test
。
基本的maven项目布局:
project
|-- pom.xml
`-- src
|-- main
| `-- java
| `-- resources
`-- test
`-- java
`-- resources
此后您想要运行mvn install
或更多内容,但这应该足够了。
如果您仍在努力,请运行maven-archetype-quickstart并将代码移至生成的项目中。