项目主代码和测试代码不同,项目的主代码会被打包到最终的构件中(如jar),而测试代码只在运行测试时用到,不会被打包。
默认情况下,Maven假设项目主代码位于src\main\java目录。
遵循Maven的约定,我们创建文件D:\work\Hello-World\src\main\java\com\xv\maventest\HelloWorld.java,该文件的内容如下:
package com.xv.maventest.helloworld;
public class HelloWorld{
public String sayHello(){
return "HelloWorld";
}
public static void main(String argsp[]){
System.out.println(new HelloWorld().sayHello());
}
}
关于该java代码有两点需要注意:首先在绝大多数情况下,应该把项目的主代码放到src/main/java/目录下(遵循Maven的约定),而无须额外的配置,Maven会自动搜寻该目录找到项目主代码。其次该java类的包名是:com.xv.maventest.helloworld,这与之前POM中定义的groupID和artifactId相吻合。一般来说项目中的java类的包都应该基于groupId和artifactId,这样更加清晰,更加符合逻辑,也方便搜索构件了java类。
编写完代码后,使用Maven进行编译,在项目根目录下运行命令:
mvn clean compile
会得到如下图的输出:

clean告诉Maven清理输出目录target\,compile告诉Maven编译项目主代码,从输出中可以看到Maven首先执行了clean:clean任务,删除target\目录(第一次执行时因为没有target目录,因此不会有删除target目录的输出)。
默认情况下,Maven构建的所有输出都在target\目录中;接着执行resources:resources任务,最后后自行compile:compile任务,将项目主代码编译到target\classes目录,编译好的类为:"D:\work\Hello-World\target\classes\com\xv\maventest\helloworld\HelloWorld.class"。
至此,Maven在没有任何额外配置的情况下就执行了项目的清理和编译任务。