对于将jar文件发布到外部仓库,你应该在pom.xml中配置url并且在settings.xml中配置连接到仓库的验证信息。 这里是个例子,用scp和用户名/密码验证:
<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.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Maven Quick Start Archetype</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.codehaus.plexus</groupId>
<artifactId>plexus-utils</artifactId>
<version>1.0.4</version>
</dependency>
</dependencies>
<build>
<filters>
<filter>src/main/filters/filters.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
<distributionManagement>
<repository>
<id>mycompany-repository</id>
<name>MyCompany Repository</name>
<url>scp://repository.mycompany.com/repository/maven2</url>
</repository>
</distributionManagement>
</project>
<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">
...
<servers>
<server>
<id>mycompany-repository</id>
<username>jvanzyl</username>
<!-- Default value is ~/.ssh/id_dsa -->
<privateKey>/path/to/identity</privateKey> (default is ~/.ssh/id_dsa)
<passphrase>my_key_passphrase</passphrase>
</server>
</servers>
...
</settings>
现在如果你连接到了匿名登录的openssh ssh服务器,你每次都需要输入你的用户名和密码去验证(尽管你可以利用另外一个ssh客户端去登录)。这种情况你可以利用公钥去登录验证。 假如在settings.xml中有密码这种情况应该注意,了解更多信息,请看密码加密
在创建你的帮助文档之前,你可以利用archetype
机制来为你的项目生成一个网站,利用如下命令:
mvn archetype:generate \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-site \
-DgroupId=com.mycompany.app \
-DartifactId=my-app-site
现在你可以到创建站点指南去学习如何为你的项目创建帮助文档。
注意生命周期适用于任何项目类型。比如,回到基本目录我们可以创建一个简单的web应用:
mvn archetype:generate \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-webapp \
-DgroupId=com.mycompany.app \
-DartifactId=my-webapp
注意这些都必须位于同一行。这将会创建一个目录叫作my-webapp
包含如下的项目描述:
<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.mycompany.app</groupId>
<artifactId>my-webapp</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>my-webapp</finalName>
</build>
</project>
注意<packaging>
元素,这个告诉maven打包类型为war
,进入webapp
的项目目录并且尝试:
mvn clean package
你将会看到target/my-webapp.war
被创建,到目前为止,所有的正常步骤都被执行。
这个概念是说利用Maven构建多个模块。在这节,我们将会展示如何同时构建上述的war包括先前的jar。 首先我们需要一个父pom.xml文件在另外两个的上层目录,例如:
+- pom.xml
+- my-app
| +- pom.xml
| +- src
| +- main
| +- java
+- my-webapp
| +- pom.xml
| +- src
| +- main
| +- webapp
这个pom文件你将会创建包含如下的:
<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.mycompany.app</groupId>
<artifactId>app</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>my-app</module>
<module>my-webapp</module>
</modules>
</project>
jar需要依赖webapp,因此我们向my-webapp/pom.xml
添加如下:
...
<dependencies>
<dependency>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
...
</dependencies>
接着向另外子目录下的pom.xml文件中添加<parent>
标签:
<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">
<parent>
<groupId>com.mycompany.app</groupId>
<artifactId>app</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
...
现在在顶层目录尝试运行:
mvn clean install
war文件将会被创建在my-webapp/target/my-webapp.war
中,同样jar也会被创建:
$ jar tvf my-webapp/target/my-webapp-1.0-SNAPSHOT.war
0 Fri Jun 24 10:59:56 EST 2005 META-INF/
222 Fri Jun 24 10:59:54 EST 2005 META-INF/MANIFEST.MF
0 Fri Jun 24 10:59:56 EST 2005 META-INF/maven/
0 Fri Jun 24 10:59:56 EST 2005 META-INF/maven/com.mycompany.app/
0 Fri Jun 24 10:59:56 EST 2005 META-INF/maven/com.mycompany.app/my-webapp/
3239 Fri Jun 24 10:59:56 EST 2005 META-INF/maven/com.mycompany.app/my-webapp/pom.xml
0 Fri Jun 24 10:59:56 EST 2005 WEB-INF/
215 Fri Jun 24 10:59:56 EST 2005 WEB-INF/web.xml
123 Fri Jun 24 10:59:56 EST 2005 META-INF/maven/com.mycompany.app/my-webapp/pom.properties
52 Fri Jun 24 10:59:56 EST 2005 index.jsp
0 Fri Jun 24 10:59:56 EST 2005 WEB-INF/lib/
2713 Fri Jun 24 10:59:56 EST 2005 WEB-INF/lib/my-app-1.0-SNAPSHOT.jar
这个是怎么创建的?首先父pom创建(称作app),有一个packaging
和一系列modules
定义。这个告诉Maven在项目集合上去运行操作,而不是当前这个(重写这个行为,你可以利用--non-recursive
命令) 接着,我们告诉war
需要my-app
的jar.这个做了一些事情:可以是其在类路径上,war
中的其他代码可以找到,保证jar
的构建总是先于war
的,并且表明war
插件将jar
包含到它的库目录下。 你可能注意到junit-4.11.jar
是一个依赖,但是并没有在war中结束(与生命周期有关,因此用结束来修饰)。原因是<scope>test</scope>
原色,这个仅用来测试,并且不会包含在web应用当中。 最后一步是添加parent
定义,这个不同于extend
元素(maven 1.0):这个保证POM总是可以定位到,即使项目与其双亲是分布式的,以查找仓库的方式。 不想Maven1.0,不需要你运行install去成功执行这些步骤,你可以运行package
,可以在target目录中生成,而不会是本地仓库。 你可能喜欢再次生成你的IDEA工作区在顶层目录…
mvn idea:idea
网易云新用户大礼包:https://www.163yun.com/gift
本文来自网易实践者社区,经作者范鹏程授权发布。