java - Maven 构建后缺少类文件

标签 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 时,它就消失了。

这是怎么回事?

最佳答案

我找到了!故事是这样的。

从前,我有一个项目需要两个 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。

关于java - Maven 构建后缺少类文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43791571/

相关文章:

java - Android 套接字抛出 UnknownHostException 错误

java - Android keystore 已损坏

java - 通过 URLClassLoader 使用文件作为资源

eclipse PDT : put my workspace under htdocs or is there a "move files" build directive?

java - Eclipse 运行配置的默认值

java - Surefire 重新运行失败的测试不起作用

java - 如何使用带有 Mockito 和 TestNG 的 PowerMock 模拟私有(private)方法

java - Java 中的异常重复

android - Eclipse 对单个可绘制文件夹不满意?

java - testng 报告中的“报告器输出”为空