2014-11-04 121 views
1

我使用Maven的战争插件在我pom.xml生成一个jar文件并行与我war文件中的一个java web project构建。我的maven版本正在创建目标目录中的warjar文件。并且只有war文件被安装到本地存储库。有没有办法将创建的jar文件也推送到本地存储库。以下是我的pom.xml片段的Maven - Maven的战争插件生成JAR并安装到本地Maven仓库

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <configuration>    
     <archive> 
      <addMavenDescriptor>false</addMavenDescriptor> 
      </archive> 
      <archiveClasses>true</archiveClasses> 
     <packagingExcludes>WEB-INF/lib/x*.jar</packagingExcludes> 
     <webXml>${project.basedir}\src\main\webapp\WEB-INF\web.xml</webXml> 
     <webResources> 
     <resource> 
      <directory>${project.basedir}\src\main\webapp</directory> 
      <includes> 
      <include>**/*.*</include> 
      </includes> 
     </resource> 
      </webResources> 
    </configuration> 
</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> 
    <groupId>com.xyz</groupId> 
    <artifactId>x</artifactId> 
    <packaging>war</packaging> 
    <version>1.0.0-SNAPSHOT</version> 
    <name>x</name> 
    <url>http://maven.apache.org</url> 
    <build> 
     <plugins> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <configuration>    
        <archive> 
         <addMavenDescriptor>false</addMavenDescriptor> 
         </archive> 
         <archiveClasses>true</archiveClasses> 
        <packagingExcludes>WEB-INF/lib/x*.jar</packagingExcludes> 
        <webXml>${project.basedir}\src\main\webapp\WEB-INF\web.xml</webXml> 
        <webResources> 
        <resource> 
         <directory>${project.basedir}\src\main\webapp</directory> 
         <includes> 
         <include>**/*.*</include> 
         </includes> 
        </resource> 
         </webResources> 
       </configuration> 
      </plugin> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>${java-version}</source> 
        <target>${java-version}</target> 
        <encoding>UTF-8</encoding> 
       </configuration> 
      </plugin> 

      <plugin> 
       <groupId>com.googlecode.addjars-maven-plugin</groupId> 
       <artifactId>addjars-maven-plugin</artifactId> 
       <version>1.0.2</version> 
       <executions> 
       <execution> 
        <goals> 
         <goal>add-jars</goal> 
        </goals> 
        <configuration> 
         <resources> 
          <resource> 
           <directory>${project.basedir}/src/main/webapp/WEB-INF/lib</directory> 
          </resource> 
         </resources> 
        </configuration> 
       </execution> 
       </executions> 
      </plugin> 

     </plugins> 
    </build> 
</project> 
+0

你的web应用的哪些部分包含在jar文件中? jar文件的目的是什么? – 2014-11-04 12:17:25

+0

只有java编译的类是我的jar文件的一部分。这个jar文件用于其他模块构建。在其他模块构建中,我只是在依赖中提到这个jar。所以,这将在maven本地存储库中查找。所以,我希望我的第一个模块构建将它的jar推送到本地存储库。 – Anita 2014-11-04 12:21:16

+0

你的目标是什么? – wumpz 2014-11-04 12:23:33

回答

1

这不是使用Maven的正确途径。 Maven完全是模块化的,因此有一个“一个项目 - 一个工件”的规则(或推荐)。如果我无法说服你,请参阅这个博客:How to Create Two JARs from One Project (…and why you shouldn't)。这是关于多个罐子,但概念是相同的。

我认为你应该把你的工作重组为一个单独的jar项目,而其他人则把它作为依赖项。

+0

对不起。由于我对maven很陌生,所以我在一个版本中合并了我的任务。所以然后我会尝试将任务分成两个不同的版本。但是,仅供参考,当我试图找到一种方法,我发现maven-war-plugin的archiveClasses标记设置为true时,我做了我想要的任务。 – Anita 2014-11-04 13:59:55

+1

archiveClasses只将你的类打包成一个jar文件,并将它放到目标文件的/ lib目录下。但它不会将其安装在您的本地回购站中。根据插件文档,“您可以将包含在您的Web应用程序中的类和资源作为附加的”工件“部署。除了档案类 – grid 2014-11-04 14:16:56

+0

之外,您还可以尝试使用attach-classes,请参阅http://maven.apache.org/plugins/maven-war-plugin/faq.html#attached – grid 2014-11-04 14:22:18