2013-09-24 28 views
0

我有这样一个多模块Maven项目:Maven - 如何自定义依赖关系的构建?

project 
    project-core 
    project-webapp 

project-coreproject-webapp的依赖。在构建project-core时,我排除了最后一个jar中的一些元素。当我使用maven(通过m2eclipse)构建和部署整个项目时,一切都很好。

但是,如果我使用WTP构建和部署,则会跳过资源筛选。

到目前为止,我发现的唯一工作是禁用m2eclipse的工作空间分辨率。这样,WTP就会用maven构建的jar来构建最终的战争。此解决方法的主要缺点是每次修改project-core源代码时,我都必须安装,更新项目。

我该如何强制WTP过滤掉project-core的资源?

项目/项目核心/ pom.xml的

<?xml version="1.0"?> 
<project 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" 
    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
     <artifactId>project</artifactId> 
     <groupId>com.company.project</groupId> 
     <version>1.0.0</version> 
    </parent> 

    <artifactId>project-core</artifactId> 
    <name>project-core</name> 
    <version>${version.project}</version> 
    <packaging>jar</packaging> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
       // (huge) dependencies list ... 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>2.3.1</version> 
       <configuration> 
        <excludes> 
         <exclude>file.properties</exclude> 
         <exclude>DIR/file.xml</exclude> 
        </excludes> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

    <repositories> 
       // repositories ... 
    </repositories> 
</project> 

编辑:

但是,如果我构建和部署WTP,资源过滤被跳过。

其实我没有在阶段上做过滤。这些资源仅在建造罐子时被过滤。感谢@Samuel EUSTACHI,我现在过滤资源时,他们被复制到target文件夹。在这里,我是如何做到的:

项目/项目核心/ pom.xml的

 <build> 
      <!-- 
        I removed completely the plugins node and 
        replace it with the resources node 
      --> 

      <resources> 
       <resource> 
       <directory>src/main/resources</directory> 
        <excludes> 
         <exclude>file.properties</exclude> 
         <exclude>DIR/file.xml</exclude> 
        </excludes> 
       </resource> 
      </resources> 
     </build> 
+0

你能显示完整的pom文件吗? – khmarbaise

+0

@khmarbaise查看我的更新 – Stephan

回答

1

我的猜测是,WTP不执行实际的罐子身材,但可用的资源,而工作(可能在目标)。

从jar中排除一些文件是不常见的。您可以从前面的阶段(流程资源?)排除这些文件,或者如果您只需要这些文件进行单元测试,请将它们移动到测试中。

这真的取决于你为什么决定从jar中排除它们(你必须有一个很好的理由,但它会帮助你知道为什么)。

+0

我试图通过eclipse从'target'目录中排除文件(位于src/main/resources),但没有运气。这些文件仍然到达目标目录。我可以将这些文件移出或src/main/resources,但是我很不喜欢这个解决方案,因为这些文件是真正的资源,并且不喜欢在src/main/resources中。实际上这些文件是生产环境的示例配置文件。他们已经在src/test/resources中有对应的特殊值,仅用于测试目的。 – Stephan

+0

如果你的文件是真正的资源,但不是任何构建或过程的一部分(即出于文档目的),你可以这样排除它们:http://maven.apache.org/plugins/maven-resources-plugin/examples/ include-exclude.html –

+1

在我的项目中,这些生产样本也不在src/main/resources下。我只在那里放置构建过程的一部分,或在运行时需要的文件 –