2017-05-04 106 views
1

我在Windows 10上使用Maven 3.3.9。我有一个多POM项目,我想在整个Maven项目中共享一些测试资源。因为我们都知道src/test/*中的文件不会包含在发行版JAR中,所以我为测试资源创建了一个单独的项目(以及随附的具有资源名称的Java类),以便我可以在其他项目中共享此项目。Maven构建后缺少类文件

为了说明起见,假设有两个文件在foo-test项目:

  • src/main/java/com/example/foo/test/FooTestResources.java
  • src/main/resources/com/example/foo/test/resource.txt

简单的,对不对?除了在Maven中构建项目时,生成的JAR文件仅包含com/example/foo/test/resource.txt!我期望在com/example/foo/test/FooTestResources.class中的类文件丢失。

事实上,他们这个文件甚至不在target目录中,所以就好像Maven甚至没有编译源文件。我搜索了我的项目目录FooTestResources.class,并且它不存在。只有源代码文件FooTestResources.java在那里。

当我在Eclipse 4.6.3上构建项目时,Eclipse按预期生成文件target/com/example/foo/test/FooTestResources.class。当我做一个mvn clean install它消失。

这是怎么回事?

+0

这是一些奇怪的东西。你可以发布你的''pom.xml''吗?闻起来像是有一些神奇的东西,那就是被日食建造者所忽略,因此就有所不同。 – f1sh

+0

没有看到实际的pom.xml,我唯一的猜测是在pom中有一些东西将源目录设置为其他东西。在你的mvn命令中加入'-X'来查看它是否真的编译了'src/main/java'下的任何东西。 – jingx

回答

0

我发现它!这是故事。

曾几何时,我有一个需要两个JAR的项目。一个JAR将包含源代码以及大部分资源,另一个JAR将包含一个资源。我没有创建两个项目(和两个Git存储库),而是尝试了懒惰,并创建了两个POM。一个POM除了一个资源外,其他......(你猜对了)忽略了所有的源文件并生成了POM文件。

你可以阅读完整的技术细节在这里:https://globalmentor.atlassian.net/browse/CLOGR-3

对于没有变成是最可管理的方法种种原因,所以我两个多金属氧酸盐拆分为单独的项目库,因为他们应该有一直在开始。

不幸的是,在这个过程中,我将这些POM中的关键线路复制到了POM中。

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.5.1</version> 
      <configuration> 
       <skipMain>true</skipMain> 
       <skip>true</skip> 
      </configuration> 
     </plugin> 

skipMain是什么呢。再见源文件。 (显然Eclipse忽略了本节的细节。)

我也在跳过测试;我基本上刚刚从错误的POM中复制过来,这是一种我现在甚至都没有的POM。