MAVEN相关
默认生命周期与插件对应关系
配置私服
- 搭建nexus
- 一般为http://localhost:8081
- 配置settings.xml
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <localRepository>D:/tools/apache-maven-3.6.3/repo</localRepository> <!-- pom配置distributionManagement,将项目deploy到私服上,要账号密码验证 --> <servers> <server> <id>nexus-releases</id> <username>demouser</username> <password>i-Sprint2011</password> </server> <server> <id>nexus-snapshots</id> <username>demouser</username> <password>i-Sprint2011</password> </server> </servers> <mirrors> <!--阿里云镜像地址 <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> --> <!-- 私服地址 start --> <mirror> <id>nexus</id> <mirrorOf>*</mirrorOf> <url>http://172.16.20.50:8081/repository/maven-public/</url> </mirror> </mirrors> <profiles> <profile> <!--配置这个profile,让所有pom项目都生效--> <id>nexus</id> <repositories> <repository> <id>central</id> <url>http://central</url> <!-- 当配置了mirror,这里的url就可以不填了--> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>central</id> <url>http://central</url> <!-- 当配置了mirror,这里的url就可以不填了--> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> <!-- activeProfiles | List of profiles that are active for all builds. | --> <activeProfiles> <activeProfile>nexus</activeProfile> </activeProfiles> </settings>
- 配置pom.xml,为了将pom项目deploy到私服,其中id要和settings.xml上的server的id一致
<distributionManagement> <repository> <id>nexus-releases</id> <url>http://172.16.20.50:8081/repository/maven-releases/</url> <uniqueVersion>true</uniqueVersion> </repository> <snapshotRepository> <id>nexus-snapshots</id> <url>http://172.16.20.50:8081/repository/maven-snapshots/</url> </snapshotRepository> </distributionManagement>
聚合与继承
parent项目的pom.xml包括
modules:聚合打包
pluginManagement:配置好,子项目可选使用
distributionManagement:deploy配置
dependencyManagement:配置好,子项目可选使用
- parent的pom.xml示例
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.isprint</groupId> <artifactId>parent</artifactId> <packaging>pom</packaging> <version>1.0.0-SNAPSHOT</version> <name>parent project</name> <properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <maven.compiler.encoding>UTF-8</maven.compiler.encoding> </properties> <modules> <module>guacamole-auth-json</module> </modules> <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <executions> <execution> <id>attach-sources</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> </plugins> </pluginManagement> </build> <distributionManagement> <repository> <id>nexus-releases</id> <url>http://172.16.20.50:8081/repository/maven-releases/</url> <uniqueVersion>true</uniqueVersion> </repository> <snapshotRepository> <id>nexus-snapshots</id> <url>http://172.16.20.50:8081/repository/maven-snapshots/</url> </snapshotRepository> </distributionManagement> <dependencyManagement> <dependencies> <dependency> <groupId>org.apache.guacamole</groupId> <artifactId>guacamole-ext</artifactId> <version>1.5.4</version> </dependency> <!-- Guacamole Extension API --> <dependency> <groupId>org.apache.guacamole</groupId> <artifactId>guacamole-common</artifactId> <version>1.5.4</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.36</version> </dependency> <!-- Guice --> <dependency> <groupId>com.google.inject</groupId> <artifactId>guice</artifactId> <version>5.1.0</version> </dependency> <!-- Jackson for JSON support --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> </dependency> <!-- Guava Base Libraries --> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>32.1.2-jre</version> </dependency> <!-- Java servlet API --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <!-- IPAddress (required for IP address matching) --> <dependency> <groupId>com.github.seancfoley</groupId> <artifactId>ipaddress</artifactId> <version>5.4.0</version> </dependency> </dependencies> </dependencyManagement> </project>
子项目的pom.xml示例,注意最好用relativePath指定parent的pom.xml位置,因为本地仓库可能会找不到parent项目
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.isprint</groupId> <artifactId>parent</artifactId> <version>1.0.0-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> <artifactId>myweb</artifactId> <packaging>war</packaging> <name>my web demo</name> <dependencies> <dependency> <groupId>javax</groupId> <artifactId>javaee-web-api</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/javax.annotation/jsr250-api --> <dependency> <groupId>javax.annotation</groupId> <artifactId>jsr250-api</artifactId> <version>1.0</version> </dependency> <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjrt --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.9.20.1</version> </dependency> <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.20.1</version> </dependency> </dependencies> <build> <finalName>myweb</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> </plugin> </plugins> </build> </project>
aa
- 将依赖的jar包也打包进去
- 将source也打包出来
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.isprint</groupId> <artifactId>UcmAliyunResource</artifactId> <version>1.0.0</version> <name>UcmAliyunResource</name> <description>UCM Aliyun Resource</description> <properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <maven.compiler.encoding>UTF-8</maven.compiler.encoding> </properties> <dependencies> <!-- lockback --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.36</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.11</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>ims20190815</artifactId> <version>3.0.1</version> </dependency> <!-- https://mvnrepository.com/artifact/org.mapdb/mapdb --> <dependency> <groupId>org.mapdb</groupId> <artifactId>mapdb</artifactId> <version>3.0.10</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <executions> <execution> <id>attach-sources</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
将maven的jar文件复制出来到指定目录
mvn dependency:copy-dependencies -DoutputDirectory=libs -DincludeScope=runtime -Dclassifier=source
参考:https://maven.apache.org/plugins/maven-dependency-plugin/copy-dependencies-mojo.html