Maven pom.xml 有多个版本的 jar
Maven pom.xml with more than one jar with version
这是我的 pom.xml
<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>
<url>http://maven.apache.org</url>
<name>SomeProject</name>
<groupId>com.test.te</groupId>
<artifactId>testjar</artifactId>
<version>1.1.6</version>
<packaging>jar</packaging>
<dependencies>
....
....
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.conf</include>
<include>**/*.java</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
<executions>
<execution>
<id>drive</id>
<goals><goal>jar</goal></goals>
<phase>install</phase>
<configuration>
<finalName>driver</finalName>
<includes>
<include>com/test/te/p1/*.java<include>
<include>com/test/te/p1/*.class</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
我是这样执行的
mvn clean install
这是构建输出的最后几行。
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: /home/mycp/workspace/SomeProject/target/testjar-1.1.6.jar
[INFO] [install:install {execution: default-install}]
[INFO] Installing /home/mycp/workspace/SomeProject/target/testjar-1.1.6.jar to /home/mycp/.m2/repository/com/test/te/testjar/1.1.6/testjar-1.1.6.jar
[INFO] [jar:jar {execution: driver}]
[INFO] Building jar: /home/mycp/workspace/TestProject/target/driver.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11 seconds
[INFO] Finished at: Wed Oct 28 17:27:10 IST 2015
[INFO] Final Memory: 129M/888M
[INFO] ------------------------------------------------------------------------
- 为什么第二个 jar (driver.jar) 没有版本化 (driver-1.1.6.jar)?
- 为什么第二个 jar 没有安装在本地仓库中?
如何操作?
我的要求是创建两个 jar testjar-${project.version}.jar driver-${project.version}.jar 并将这两个安装在两个不同的神器
/home/mycp/.m2/repossitory/com/test/te/testjar/${project-version}/testjar-${project.version}.jar
/home/mycp/.m2/repossitory/com/test/te/driver/${project-version}/driver-${project.version}.jar
Why the 2nd jar (driver.jar) is not versioned (driver-1.1.6.jar) ?
那是因为你明确地告诉 maven-jar-plugin
它的名字应该是 driver
和 <finalName>driver</finalName>
。如果要附加版本,则需要进行以下配置:<finalName>driver-${project.version}</finalName>
.
Why the 2nd jar not installed in local repo?
那是因为你指定了<phase>install</phase>
阶段,所以会在default-install
执行之后执行,也就是安装artefact到本地仓库的执行。相反,您应该将该执行绑定到 package
阶段。
这是 maven-jar-plugin
的配置。需要一个分类器来创建另一个 jar。
<execution>
<id>drive</id>
<goals>
<goal>jar</goal>
</goals>
<phase>package</phase>
<configuration>
<finalName>driver-${project.version}</finalName>
<classifier>classifier</classifier>
<includes>
<include>com/test/te/p1/*.java</include>
<include>com/test/te/p1/*.class</include>
</includes>
</configuration>
</execution>
作为旁注,我注意到您还在 POM 中配置了一个 <resources>
元素,包括 Java 和 conf 文件。 你不应该有那个。更具体地说:所有资源都应该放在 src/main/resources
下,所有 Java 个文件都应该放在 src/main/java
下。那就不用那个配置了。
根据评论,如果您不能添加分类器,则必须删除 maven-jar-plugin
并改用 maven-assembly-plugin
。这是一个简单的程序集描述符,可以帮助您入门。将此文件放在 src/main/assembly/assembly.xml
.
下
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<id>driver</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<useProjectArtifact>true</useProjectArtifact>
<unpackOptions>
<includes>
<include>com/test/te/p1/*.class</include>
</includes>
</unpackOptions>
<unpack>true</unpack>
</dependencySet>
</dependencySets>
</assembly>
在 POM 中使用以下配置:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.5</version>
<configuration>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor> <!-- point to the location of the assembly.xml file in your project structure -->
</descriptors>
<appendAssemblyId>false</appendAssemblyId>
<finalName>driver-${project.version}</finalName>
</configuration>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
这是我的 pom.xml
<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>
<url>http://maven.apache.org</url>
<name>SomeProject</name>
<groupId>com.test.te</groupId>
<artifactId>testjar</artifactId>
<version>1.1.6</version>
<packaging>jar</packaging>
<dependencies>
....
....
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.conf</include>
<include>**/*.java</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
<executions>
<execution>
<id>drive</id>
<goals><goal>jar</goal></goals>
<phase>install</phase>
<configuration>
<finalName>driver</finalName>
<includes>
<include>com/test/te/p1/*.java<include>
<include>com/test/te/p1/*.class</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
我是这样执行的
mvn clean install
这是构建输出的最后几行。
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: /home/mycp/workspace/SomeProject/target/testjar-1.1.6.jar
[INFO] [install:install {execution: default-install}]
[INFO] Installing /home/mycp/workspace/SomeProject/target/testjar-1.1.6.jar to /home/mycp/.m2/repository/com/test/te/testjar/1.1.6/testjar-1.1.6.jar
[INFO] [jar:jar {execution: driver}]
[INFO] Building jar: /home/mycp/workspace/TestProject/target/driver.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11 seconds
[INFO] Finished at: Wed Oct 28 17:27:10 IST 2015
[INFO] Final Memory: 129M/888M
[INFO] ------------------------------------------------------------------------
- 为什么第二个 jar (driver.jar) 没有版本化 (driver-1.1.6.jar)?
- 为什么第二个 jar 没有安装在本地仓库中?
如何操作?
我的要求是创建两个 jar testjar-${project.version}.jar driver-${project.version}.jar 并将这两个安装在两个不同的神器
/home/mycp/.m2/repossitory/com/test/te/testjar/${project-version}/testjar-${project.version}.jar
/home/mycp/.m2/repossitory/com/test/te/driver/${project-version}/driver-${project.version}.jar
Why the 2nd jar (driver.jar) is not versioned (driver-1.1.6.jar) ?
那是因为你明确地告诉 maven-jar-plugin
它的名字应该是 driver
和 <finalName>driver</finalName>
。如果要附加版本,则需要进行以下配置:<finalName>driver-${project.version}</finalName>
.
Why the 2nd jar not installed in local repo?
那是因为你指定了<phase>install</phase>
阶段,所以会在default-install
执行之后执行,也就是安装artefact到本地仓库的执行。相反,您应该将该执行绑定到 package
阶段。
这是 maven-jar-plugin
的配置。需要一个分类器来创建另一个 jar。
<execution>
<id>drive</id>
<goals>
<goal>jar</goal>
</goals>
<phase>package</phase>
<configuration>
<finalName>driver-${project.version}</finalName>
<classifier>classifier</classifier>
<includes>
<include>com/test/te/p1/*.java</include>
<include>com/test/te/p1/*.class</include>
</includes>
</configuration>
</execution>
作为旁注,我注意到您还在 POM 中配置了一个 <resources>
元素,包括 Java 和 conf 文件。 你不应该有那个。更具体地说:所有资源都应该放在 src/main/resources
下,所有 Java 个文件都应该放在 src/main/java
下。那就不用那个配置了。
根据评论,如果您不能添加分类器,则必须删除 maven-jar-plugin
并改用 maven-assembly-plugin
。这是一个简单的程序集描述符,可以帮助您入门。将此文件放在 src/main/assembly/assembly.xml
.
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<id>driver</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<useProjectArtifact>true</useProjectArtifact>
<unpackOptions>
<includes>
<include>com/test/te/p1/*.class</include>
</includes>
</unpackOptions>
<unpack>true</unpack>
</dependencySet>
</dependencySets>
</assembly>
在 POM 中使用以下配置:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.5</version>
<configuration>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor> <!-- point to the location of the assembly.xml file in your project structure -->
</descriptors>
<appendAssemblyId>false</appendAssemblyId>
<finalName>driver-${project.version}</finalName>
</configuration>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>