Maven 构建后缺少 class 个文件
Missing class files after Maven build
我在 Windows 10 上使用 Maven 3.3.9。我有一个多 POM 项目,我想在 Maven 项目之间共享一些测试资源。众所周知,src/test/*
中的文件不会包含在分发 JAR 中,因此我为测试资源创建了一个单独的项目(并随附 Java class 和资源名称) , 这样我就可以在其他项目中共享这个项目。
为了便于说明,假设 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
中的 class 文件丢失了。
事实上,他们这个文件甚至不在 target
目录中,所以就好像 Maven 甚至没有编译源文件一样。我在我的项目目录中搜索了 FooTestResources.class
,但它不存在。只有源代码文件 FooTestResources.java
在那里。
当我在 Eclipse 4.6.3 上构建项目时,Eclipse 会按预期生成文件 target/com/example/foo/test/FooTestResources.class
。当我执行 mvn clean install
它会消失。
这是怎么回事?
我找到了!这是故事。
曾几何时,我有一个项目需要两个 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。
我在 Windows 10 上使用 Maven 3.3.9。我有一个多 POM 项目,我想在 Maven 项目之间共享一些测试资源。众所周知,src/test/*
中的文件不会包含在分发 JAR 中,因此我为测试资源创建了一个单独的项目(并随附 Java class 和资源名称) , 这样我就可以在其他项目中共享这个项目。
为了便于说明,假设 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
中的 class 文件丢失了。
事实上,他们这个文件甚至不在 target
目录中,所以就好像 Maven 甚至没有编译源文件一样。我在我的项目目录中搜索了 FooTestResources.class
,但它不存在。只有源代码文件 FooTestResources.java
在那里。
当我在 Eclipse 4.6.3 上构建项目时,Eclipse 会按预期生成文件 target/com/example/foo/test/FooTestResources.class
。当我执行 mvn clean install
它会消失。
这是怎么回事?
我找到了!这是故事。
曾几何时,我有一个项目需要两个 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。