我们在进行java开发的时候相信大家都离不开一个管理工具maven。当java工程项目小的时候还可以通过我们人肉进行管理,但是随着项目体量的增加复杂度的增加,那么必须使用一些管理工具对java的项目结构进行组织和管理维护。这一块工具发展的比较均衡有老派的工具maven就是我们今天所说的工具,还有功能更加强劲的gradle,这些都是管理工具中的佼佼者。但是由于java在前期和maven绑定的比较紧密,因此目前很多开发者还在使用maven作为默认的java项目管理工具。
鉴于以上原因我们很有必要针对maven进行一些深入的理解,避免在遇到一些问题时候不能很好的解决。
想必很多被动听说maven的同学应该觉得这玩意儿只会让我们的项目更加复杂,随着慢慢的不需要自己下载jar包,而是只需要将jar对应的mvn标志在pom文件中申明就好了。便开始觉得这个工具还是有点用途的。
随着工程的进一步复杂现在的maven工具已经帮我们完成了大量的任务,很多纷繁复杂的功能都已经完成。那么这里我对一些比较基础的功能进行描述。
maven帮忙生成META-INF
这个文件夹在分模块,以及构建jar包的时候会有比较好的作用。我们手动打jar包的时候,都需要手动创建META-INF并且手动去创建一些manifest.mf文件等等。但是有了maven我们可以直接使用maven的插件功能替我们生成,非常方便——
注意⚠️:plugin标签所在的位置是 project>build>plugins>plugin
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<!--是否要把第三方jar放到manifest的classpath中-->
<addClasspath>true</addClasspath>
<!--生成的manifest中classpath的前缀,
因为要把第三方jar放到lib目录下,
所以classpath的前缀是lib/-->
<classpathPrefix>lib/</classpathPrefix>
<!-- 执行的主程序路径 -->
<!-- <mainClass>com.example.demo.test.App</mainClass>-->
</manifest>
<manifestEntries>
<!-- 对于pre的方式使用的是这个参数 -->
<Premain-Class>xxx</Premain-Class>
<!-- 对于runtime方式使用的agent方式 -->
<Agent-Class>xxx</Agent-Class>
<自定义>hh</自定义>
<!-- 最终形成的效果就是 Premain-Class: xxx\nAgent-Class:xxx\n自定义:hh\n -->
</manifestEntries>
</archive>
</configuration>
</plugin>
这个主要是在生成jar包时比较好用,后续命令一般是mvn clean install
maven运行指定的主类
最原始的运行主类的方法是需要手动输入java,然后到处去找到对应的classpath并且添加到命令行中。耗时费力,那么同样也可以使用maven使用插件直接运行指定的主类
如果不添加以下的插件,直接运行
mvn exec:java -DmainClass=com.xxx.xxx
将会报错。这个可能有用:https://stackoverflow.com/questions/20705914/maven-exec-plugin-classnotfoundexceptionjava.lang.ClassNotFoundException: "com.xxx.xxx.LogMain" at java.net.URLClassLoader.findClass (URLClassLoader.java:382) at java.lang.ClassLoader.loadClass (ClassLoader.java:418) at java.lang.ClassLoader.loadClass (ClassLoader.java:351) at org.codehaus.mojo.exec.ExecJavaMojo$1.run (ExecJavaMojo.java:246) at java.lang.Thread.run (Thread.java:748)
并且下面的configuration中的mainClass也必须书写,否则也会报上述错误。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- <includePluginDependencies>true</includePluginDependencies>-->
<mainClass>xxx</mainClass>
<!-- <arguments>-->
<!-- <argument>configFile</argument>-->
<!-- <argument>properties</argument>-->
<!-- </arguments>-->
</configuration>
</plugin>
手下通过maven对整个项目进行编译mvn clean compile
,编译完成之后就可以使用maven指定主类运行——mvn exec:java -DmainClass=com.xxx.xxx
【本文持续更新】