使用maven和带有类子集的jar构建战争

时间:2014-10-23 22:14:21

标签: maven

默认情况下,我正在以标准方式建立战争。

但是,由于遗留原因,我还需要将一组java类导出到JAR以进行共享。有一个简单的方法吗?

更新 为了澄清,除了默认的WAR输出和布局之外,我还需要一个包含以下内容的JAR:

{project.base}/src/main/java*
{project.base}/src/main/resources/META-INF/services/*

2 个答案:

答案 0 :(得分:2)

您可以使用maven-jar-plugin执行此操作。

保留<packaging>war</packaging>maven-war-plugin(如果您已在pom中定义)并将maven-jar-plugin添加到<build>配置中,定义自定义类包含/排除。

不包括类A以及构建jar的所有类pkg类的示例:

   ...
   <packaging>war</packaging>
   ...
   <build>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            ...
         </plugin>

         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <executions>
               <execution>
                  <phase>package</phase>
                  <goals>
                     <goal>jar</goal>
                  </goals>
                  <configuration>
                     <excludes>
                        <exclude>A.class</exclude>
                        <exclude>pkg/**</exclude>
                     </excludes>
                  </configuration>
               </execution>
            </executions>
         </plugin>
      </plugins>
   </build>

作为输出,当您使用maven构建项目时,输出目录中将有warjar(不包括排除类)。

希望有所帮助

答案 1 :(得分:1)

最简单的解决方案是使用maven-war-plugin以及maven-war-plugin out of the box支持的适当配置:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.5</version>
        <configuration>
          <attachClasses>true</attachClasses>
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>

上述配置将创建一个补充工件,其中包含src/main/java

中的类
<dependency>
  <groupId>myGroup</groupId>
  <artifactId>myArtifact</artifactId>
  <version>myVersion</myVersion>
  <classifier>classes</classifier>
</dependency>

您可以在其他项目中使用。