maven 项目是基于约定的。项目的源代码如果不设置的话,会放在 src/main/java 目录下,项目的测试代码如果不设置的话,会放在 src/test/java 目录下,在 main/java/src 下的源文件依赖的 scope 是 compile,在 main/test/src 下的源文件依赖的 scope 是 compile, test。
说完这些,我们来实践一下:
首先,我有一个文件夹(root)来存放 pom.xml 文件,然后我就在该文件夹下新建文件夹 src/main/java 和文件夹 src/test/java 目录。
然后定义 pom.xml 文件为如下代码:
<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>com.sinaapp.ibmeye</groupId>
<artifactId>utils</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>utils</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>
</dependency>
</dependencies>
</project>
然后,就可以在 src/main/java 文件夹下放我们想要编译的代码了。比如,我们想编译一个在包 com.sinaapp.ibmeye.utils 下的类 HelloWorld,那么我们就可以在 src/main/java 文件下建立 com/sinaapp/ibmeye/utils 目录,然后在该目录下建立一个 HelloWorld.java 的文件。代码如下:
package com.sinaapp.ibmeye.utils;
public class HelloWorld{
public static void main(String[] args){
System.out.println("good morning");
}
}
就在这个时候,我们可以在项目(utils)目录下,运行 mvn clean compile
,然后,就会在我们的项目目录下,出现一个target文件夹,这个文件夹中就存在着我们编译好的文件,其建立的目录就是我们的包名。
刚才我们运行的编译,就相当于,在我们的项目目录下运行,javac -d target\classes\ src\main\java\com\sinaapp\ibmeye\utils\HelloWorld.java
这里的 javac 的 -d 参数表示类生成的目录,这里有个很有意思的东西,就是假如你不指定 -d,那么javac会默认你的源代码就在合适的包路径下,编译的时候javac会将生成的类文件直接放在与源文件相同的目录下,如果指定了 -d 那么,那么在 -d 的目录下,javac 会生成包含包路径的类。