gpt4 book ai didi

java - 为什么我的Maven项目打包测试文件?

转载 作者:行者123 更新时间:2023-11-29 09:32:55 26 4
gpt4 key购买 nike

我有一个要打包的 Maven 项目,但我注意到我所有的 Java 测试类(但没有我的 Scala 测试类)和生成的 Avro 测试类最终都在 jar 中。

文件夹结构看起来不错:

enter image description here

我还注意到,如果我将 junit 添加为 <scope>test</scope> 的依赖项 | ,我的测试不会编译,因为它找不到 junit 类,因此看起来 Maven 正在将我的所有代码(包括测试)视为 main 的一部分。

代码:

<?xml version="1.0" encoding="UTF-8"?>
<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.me</groupId>
<artifactId>proj</artifactId>
<version>1.0.0</version>

<properties>
<log4j.version>2.8.1</log4j.version>
</properties>

<dependencies>
...
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.scalatest</groupId>
<artifactId>scalatest-maven-plugin</artifactId>
<executions>
<execution>
<id>test</id>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<id>scala-compile-first</id>
<phase>process-resources</phase>
<goals>
<goal>add-source</goal>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>scala-test-compile</id>
<phase>process-test-resources</phase>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
<configuration>
<scalaVersion>2.11.8</scalaVersion>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.avro</groupId>
<artifactId>avro-maven-plugin</artifactId>
<version>1.8.1</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>schema</goal>
</goals>
<configuration>
<sourceDirectory>${project.basedir}/src/test/resources/</sourceDirectory>
<outputDirectory>${project.basedir}/src/test/java</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>


</project>

最佳答案

想通了。

问题出在 avro-maven-plugin 上。

它的配置有 sourceDirectoryoutputDirectory,它们都有测试源路径。

<configuration>
<sourceDirectory>${project.basedir}/src/test/resources/</sourceDirectory>
<outputDirectory>${project.basedir}/src/test/java</outputDirectory>
</configuration>

显然,这些干扰了编译器插件,编译器插件认为这些目录是主要的源目录,并将它们与其他主要类一起编译。这也解释了为什么在为 junit 依赖项提供测试范围时我的测试无法编译。

解决方案是使用 testSourceDirectorytestOutputDirectory 代替:

<configuration>
<testSourceDirectory>${project.basedir}/src/test/resources/</testSourceDirectory>
<testOutputDirectory>${project.basedir}/src/test/java</testOutputDirectory>
</configuration>

关于java - 为什么我的Maven项目打包测试文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43368063/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com