检测单个maven项目中的重复资源

时间:2012-11-22 01:03:03

标签: maven duplicates

maven duplicate finder plugin看起来是检测多个模块中何时存在相同资源的好方法。我需要的是更简单的东西:在相同的模块中检测相同的资源。

更新:针对maven重复查找程序插件提交an issue,看看是否预计会检测到这种情况。)

以下是maven重复查找程序插件无法检测到我所关注的那种情况的演示:

$ cat 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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.stackoverflow.mattmchenry</groupId>
  <artifactId>mvn-dups</artifactId>
  <version>1.0</version>

  <build>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
      </resource>
      <resource>
        <directory>src/main/resources_es</directory>
      </resource>
    </resources>
  </build>
</project>

$ find src/ -type f
src/main/resources/Strings_es.properties
src/main/resources/Strings.properties
src/main/resources_es/Strings_es.properties    

$ mvn com.ning.maven.plugins:maven-duplicate-finder-plugin:1.0.2:check[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building Unnamed - com.stackoverflow.mattmchenry:mvn-dups:jar:1.0
[INFO]    task-segment: [com.ning.maven.plugins:maven-duplicate-finder-plugin:1.0.2:check]
[INFO] ------------------------------------------------------------------------
[INFO] [duplicate-finder:check {execution: default-cli}]
[INFO] Checking compile classpath
[INFO] Checking runtime classpath
[INFO] Checking test classpath
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1 second
[INFO] Finished at: Thu Nov 22 22:44:40 EST 2012
[INFO] Final Memory: 7M/88M
[INFO] ------------------------------------------------------------------------

2 个答案:

答案 0 :(得分:2)

复制查找器插件在这种特定情况下无法帮助您。

问题是它适用于类路径,而不适用于源文件夹。在maven的情况下,它包含目标中的本地文件夹和工件。如果您有多个资源源文件夹(在您的情况下为src/main/resourcessrc/main/resources_es),这些文件将在插件实际运行之前由maven复制到target/classes,因此无法检测到这种情况。

复制查找器插件只能帮助

  • 如果多个资源文件夹以单独的工件(罐子)结束
  • 如果其中一个资源用于编译文件夹(目标/类),另一个用于测试(目标/测试类)

复制查找器插件永远不会查看源文件夹,只能查看类路径文件夹。

(我是该插件的主要作者之一。)

答案 1 :(得分:0)

为什么不使用maven-duplicate finder插件来完成你需要的工作呢?另一个解决方案是使用maven-enforcer-plugin,但看起来您需要实现own enforcer-rule。我更喜欢使用maven-duplicate-finder-plugin。