關於Maven的一些東西(不定期更)

有一段时间没更blog了,之前一直都没时间写,害。。。

今天堂姐结婚,可惜学校只有四天的假期(就这?四天怎么够表达我对祖国母亲生日的激动之情啊🙄),刚好周一又没有课,于是我强行+1s续了一波假期硬是拖到今天才回学(cun)校(li)(内心写着一万个不愿意55555555 T_T)
顺便祝堂姐百年好合早生贵子吧哈哈哈哈哈哈😀

折腾Maven

回到学校之后,换了个衣服,吃了个午饭,就开始一头扎进Maven的文档里。配置和使用的过程也并不是那么一帆风顺,这里记录一下使用中遇到的一些问题(不知道以后会不会遇到另一些奇奇怪怪的问题,这里的问题是暂时碰到的,以后不定期更新遇到的问题解决方案)

老生常谈的Mirror问题

装上maven之后,我在终端里输入了

$ cd projects/
$ mvn archetype:generate

尝试通过最朴素的interactive模式来创建一个很naive的maven project,结果发现下载速度不太对劲儿,下一个4.7mb的包都下了好久,直觉告诉我应该是天朝自有国情在的问题拦住我了。

于是google了一下 看看能不能改掉镜像(PS:按照Maven里面的说法应该叫repository,平时下artifact的那个大仓库应该叫“中央仓库”central repository)

于是搜了一下maven的官方文档 又google了一下,发现国内一般用阿里云Maven仓库(url为https://maven.aliyun.com/repository/public)
于是愉快地打开终端 输入:

$ cd /home/user_name/.m2/
$ nano settings.xml #因为这个settings.xml一开始是不存在的,要自行创建

然后在nano里面输入

<settings>
    <mirrors>
    <mirror>
        <id>aliyun-mirror</id>
        <name>Aliyun Maven Repo</name>
        <url>https://maven.aliyun.com/repository/public</url>
        <mirrorOf>*</mirrorOf>  #代表全部仓库都走阿里云maven仓库镜像
    </mirror>
    </mirrors>
</settings>

其中这里的mirrorOf默认是central,也就是说这个仓库是id为central的镜像站。如果要从id不是central的仓库中下载其他artifact则会跑到各自对应id的镜像站上下载(PS:一个mirrorOf最多对应一个id,如果出现一对多的情况则只取第一个match,其他的match则会被丢弃)

jar文件找不到main class的问题

今天写了个小hello world,结果发现编译出来的jar跑不了

$ maven archetype:generate
#......(omitted)
$ mvn package
$ java -jar target/noobapp-1.0.jar
no main manifest attribute, in target/noobapp-1.0.jar

看了一下文档,发现原来jar文件需要手动指定Main-Class入口点
于是找到了两种解决方法(假设我们的noobapp-1.0入口点包含在noobpkg这个包里面的App.java):
1. 在Windows下以压缩包形式打开.jar,修改MANIFEST FILE,将里面Main Class:后面的内容更改称noobpkg.App
2. 直接手动指定入口点java -cp target/noobapp-1.0.jar noobpkg.App