Maven构建后缺少类文件

时间:2017-05-04 19:43:55

标签: java eclipse maven jar .class-file

我在Windows 10上使用Maven 3.3.9。我有一个多POM项目,我希望在Maven项目中共享一些测试资源。众所周知,src/test/*中的文件不会包含在分发JAR中,所以我创建了一个单独的项目,仅用于测试资源(以及带有资源名称的Java类),以便我可以共享这个项目涉及其他项目。

为了便于说明,我们假设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时,它会消失。

发生了什么事?

1 个答案:

答案 0 :(得分:0)

我找到了!这就是故事。

曾几何时,我有一个需要两个JAR的项目。一个JAR将包含源代码以及大多数资源,另一个JAR只包含一个资源。我没有创建两个项目(和两个Git存储库),而是试图变得懒惰而且创建了两个POM。一个POM通常构建所有内容,除了一个资源,另一个......(你猜对了)忽略了所有源文件并生成了POM文件。

您可以在此处阅读完整的技术详情:https://globalmentor.atlassian.net/browse/CLOGR-3

由于各种原因并没有成为最易于管理的方法,因此我将两个POM拆分为单独的项目存储库,因为它们本应该开始使用。

不幸的是,在某个地方我将其中一个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,我甚至不再拥有它。