非常基本的Maven - 无法编译

时间:2015-11-20 22:37:05

标签: maven

我使用简单的Maven项目运行基本的HelloWorldmvn编译工作正常,然后在我的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>   

2 个答案:

答案 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并将代码移至生成的项目中。