Maven

Maven

傻逼 Maven 去死!!!
傻逼 Maven 去死!!!
傻逼 Maven 去死!!!
傻逼 Maven 去死!!!
傻逼 Maven 去死!!!
傻逼 Maven 去死!!!
傻逼 Maven 去死!!!
傻逼 Maven 去死!!!
傻逼 Maven 去死!!!
傻逼 Maven 去死!!!

傻逼 Maven 是一个傻逼 Java 的构建系统。使用的是 pom.xml 配置文件,语法超级繁琐冗长恶心难用,用起来跟一坨屎一样。

首先不推荐使用傻逼 Java 写任何程序,推荐使用 node.js 或 Python语言,快速高效。

即使一定要用傻逼 Java 开发,也严重不推荐使用傻逼 Maven。建议使用 Gradle 等傻逼 Java 构建系统替代。

CLI

mvn compile
mvn clean package # build all in one jar file

# clean cache and build war
mvn clean compile war:war

注: package 必须配合 clean 使用。否则 maven 只会添加或更新文件到生成的 jar / war 文件,而不会从已有的(上次构建生成的) jar / war 里删除已经不需要的文件。傻逼 Maven !

Force https

Effective January 15, 2020, The Central Repository no longer supports insecure communication over plain HTTP and requires that all requests to the repository are encrypted over HTTPS.

MAVEN_HOME\conf\settings.xml

对于 jenkins 里的 maven: jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/Maven-Main/conf/settings.xml

# <profiles> section

<profile>
    <id>maven-https</id>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <repositories>
        <repository>
            <id>central</id>
            <url>https://repo1.maven.org/maven2</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>central</id>
            <url>https://repo1.maven.org/maven2</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories> 
</profile>

use specific JDK version to build

set JAVA_HOME env to JDK root.

Use local jar library

在 Maven 中使用 本地 jar library 极为麻烦!在 Gradle 里只需一行 compile fileTree(dir: 'libs', include: ['*.jar']) 就可以将项目根目录 "libs" 里所有 *.jar 加入依赖并 build,而这一任务在 Maven 里想要实现却难于上青天。

Maven 里有两种方法使用本地 jar library:

  1. Use "system" and "systemPath"
  2. Use local repository

以添加本地 傻逼 Oracle 数据库傻逼 Java 驱动 ojdbc7.jar 为例:

Use "system" and "systemPath"

将 ojdbc7.jar 放在程序根目录下的 libs/ 文件夹。

pom.xml

<dependency>
    <groupId>any</groupId>
    <artifactId>any</artifactId>
    <version>1.0</version> <!-- Dummy Version -->
    <scope>system</scope>
    <systemPath>${project.basedir}/libs/ojdbc7.jar</systemPath>
</dependency>

这种方法可以直接指定 jar 路径,但其问题是 mvn package 打包时不会包括所有 system scope 的依赖,导致生成的程序 jar / war 文件里没有 ojdbc7.jar;并且 IDE Debug 运行时默认也不会包括 scope = system 的依赖,导致程序无法启动。

Use local repository

在程序根目录创建一个 "repo" 文件夹用于存放项目级别的本地 maven repository。

pom.xml

<repositories>
  <repository>
    <id>local-repo</id>
    <url>file:///${project.basedir}/repo</url>
  </repository>
</repositories>
<dependencies>
  <dependency>
    <groupId>me</groupId>
    <artifactId>ojdbc7</artifactId>
    <version>1.0</version>
  </dependency>
</dependencies>

然后,还必须把 ojdbc7.jar 添加到这个 local repository! 在项目根目录执行下面命令:

# Windows
mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -Dfile=.\libs\ojdbc7.jar -DgroupId=me -DartifactId=ojdbc7 -Dversion=1.0.0 -Dpackaging=jar -DlocalRepositoryPath=repo

注意 / 感想

  • 傻逼 Windows 下路径分隔符必须用 "\",傻逼 Maven (或者傻逼 Windows) 不认 "/"。
  • 必须用 cmd 执行这个命令。用傻逼 PowerShell 执行会有问题.
  • 傻逼 Maven cli 参数名长的就像裹脚布,根本不是设计用来让人使用的。
  • 傻逼 Maven 会在 repo 里创建一堆乱七八糟的东西,就仅仅为了一个 jar 文件!!
  • 每多添加一个本地 jar 都得多敲这么一大坨行命令!
  • 需要把 repo 目录加入 git 库(否则每个客户端 clone 后都必须先执行一遍 maven 命令创建本地库后才能运行程序)。

如果不指定 -DlocalRepositoryPath=repo 参数,会将 jar 文件加入本地系统全局 maven 库。不会创建 repo 目录下一堆弱智文件。但会污染全局 maven 仓库。

结论

傻逼 Maven 纯属脑残弱智,开发这个傻逼的人去死吧


Last update: 2023-08-31 02:21:35 UTC