0%

Maven-Trivial

阅读更多

1 使用技巧

1.1 运行Java程序

1.1.1 从命令行运行

运行前先编译代码,exec:java不会自动编译代码,你需要手动执行mvn compile来完成编译

编译完成后,执行exec运行main方法

1
2
3
mvn exec:java -Dexec.mainClass="com.vineetmanohar.module.Main"
mvn exec:java -Dexec.mainClass="com.vineetmanohar.module.Main" -Dexec.args="arg0 arg1 arg2"
mvn exec:java -Dexec.mainClass="com.vineetmanohar.module.Main" -Dexec.classpathScope=runtime

1.1.2 在pom.xml中指定某个阶段执行

CodeGenerator.main()方法的执行绑定到maven的test阶段,通过下面的命令可以执行main方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<build>  
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1.1</version>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>java</goal>
</goals>
<configuration>
<mainClass>com.vineetmanohar.module.CodeGenerator</mainClass>
<arguments>
<argument>arg0</argument>
<argument>arg1</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

1.1.3 在pom.xml中指定某个配置来执行

将配置用<profile>标签包裹后就能通过指定该配置文件来执行main方法,如下

1
mvn test -Pcode-generator
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<profiles>  
<profile>
<id>code-generator</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1.1</version>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>java</goal>
</goals>
<configuration>
<mainClass>com.vineetmanohar.module.CodeGenerator</mainClass>
<arguments>
<argument>arg0</argument>
<argument>arg1</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>

1.2 下载指定jar包

1
mvn dependency:get -DgroupId=[groupId] -DartifactId=[artifactId] -Dversion=[version] -DrepoUrl=https://repo.maven.apache.org/maven2/ -Dtransitive=false

Example:

1
mvn dependency:get -DgroupId=org.apache.hive -DartifactId=hive-exec -Dversion=3.1.2 -DrepoUrl=https://repo.maven.apache.org/maven2/ -Dtransitive=false

2 依赖冲突时的加载顺序

当一个类同时存在于依赖A于依赖B中时,加载的版本依据以下的原则

  1. 首先,依赖路径长度,依赖路径短的优先加载
  2. 其次,依赖声明顺序(在同一个pom中),先声明的依赖优先加载
  3. 最后,依赖覆盖,子POM文件中的依赖优先加载

3 国内源

1
2
3
4
5
6
7
8
9
10
<settings>
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<mirrorOf>central</mirrorOf>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
</mirrors>
</settings>

4 参考