java基础学习之路——打地基maven功能整理

本文介绍了Maven在Java项目管理中的重要性,如何使用Maven生成META-INF,以及如何配置Maven插件来运行指定主类。通过 Maven,开发者可以避免手动管理jar包和创建manifest文件,简化构建过程。同时,文章还提及了使用maven-jar-plugin和exec-maven-plugin来自动化任务,使得项目构建和运行更为便捷。
摘要由CSDN通过智能技术生成

我们在进行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-classnotfoundexception

java.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

【本文持续更新】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值