Java 枚举的Maven包不存在
我的目标:Java 枚举的Maven包不存在,java,maven,Java,Maven,我的目标: -我想将API测试框架X代码(maven项目)转换为jar,可以在另一个API测试框架Y -此jar将部署到Nexus -我希望将框架X的test&main类集成在一个jar 从SO中,我了解到不能将它们组合成一个jar,因此必须将它们放在单独的jar中 我相应地修改了POM 使用此命令时出现编译错误: mvn清洁安装-DskipTests 错误片段: [ERROR] COMPILATION ERROR : [INFO] -------------------------------
-我想将API测试框架X代码(maven项目)转换为
jar
,可以在另一个API测试框架Y
-此jar
将部署到Nexus-我希望将框架X的test&main类集成在一个
jar
从SO中,我了解到不能将它们组合成一个jar
,因此必须将它们放在单独的jar中
我相应地修改了POM
使用此命令时出现编译错误:
mvn清洁安装-DskipTests
错误片段:
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /C:/main/projectX/src/main/java/com/myapp/core/EnumUserClass.java:[8,46] package com.myapp.testutils.ClassWithEnum does not exist
[ERROR] /C:/main/projectX/src/main/java/com/myapp/core/EnumUserClass.java:[226,6] cannot find symbol
symbol: class EnumUserClass
location: class com.myapp.core.EnumUserClass...etc.
Maven编译器在查找类时没有问题,但在查找此枚举时有问题
有人能告诉我如何正确解决此错误吗?我是否以正确的方式实现了“我的目标”?
本问题中给出的示例项目
(projectX)是我的实际项目
maven命令适用于
示例项目
,但不适用于实际项目
项目结构示例:(简化)
示例项目pom.xml:(缩写)
4.0.0
com.myapp
我的罐子
0.0.1-快照
罐子
安装
org.apache.maven.plugins
maven编译器插件
3.8.0
1.7
1.7
org.apache.maven.plugins
maven jar插件
2.4
试验罐
myjar
http://maven.apache.org
UTF-8
我的Nexus网站
https://host.com/path1
我的Nexus发行版
我的Nexus发行版
https://host.com/path2
我的Nexus快照
我的Nexus快照
https://host.com/path3
您可以从“test/java”中的“main/java”访问类,但它不能反向工作。如果您查看日志,它正在main/java中查找一个包。将包从“test/java”移动到“main/java”。那就行了 您可以从“test/java”中的“main/java”访问类,但它不能反向工作。如果您查看日志,它正在main/java中查找一个包。将包从“test/java”移动到“main/java”。那就行了 好吧,我明白你想做什么,但我认为这不是正确的做法。
你想用这个项目(X)来测试另一个项目(Y),对吗?然后,这个项目(X)中的所有主要类都用于测试项目(Y)
但问题是:您似乎试图将测试类(位于com.myapp.testutils文件夹中)放在主文件夹中。这会导致以下错误:
[错误]
/C:/main/projectX/src/main/java/com/myapp/core/EnumUserClass.java:[8,46]
包com.myapp.testutils.ClassWithEnum不存在
(com.myapp.testutils)中的测试类用于测试project X的主代码。这些类的存在是为了检查project X的主代码是否正在执行它应该执行的操作(在此上下文中-->测试另一个项目)
单元测试(com.myapp.testutils中的类)不应该包装在jar中,但它是为了确保应用程序正常工作
您的重点不应该是将projectx中的测试放在一个jar中,而是为projectx进行单元测试,然后将经过适当测试的projectx导入projecty
编辑:
如果com.myapp.testutils对于使project X能够测试project Y很重要:请将包从“test/java”移动到“main/java”。那么它应该可以正常工作了。好的,我明白你想做什么,但我认为这不是正确的方法。 你想用这个项目(X)来测试另一个项目(Y),对吗?然后,这个项目(X)中的所有主要类都用于测试项目(Y) 但问题是:您似乎试图将测试类(位于com.myapp.testutils文件夹中)放在主文件夹中。这会导致以下错误: [错误] /C:/main/projectX/src/main/java/com/myapp/core/EnumUserClass.java:[8,46] 包com.myapp.testutils.ClassWithEnum不存在 (com.myapp.testutils)中的测试类用于测试project X的主代码。这些类的存在是为了检查project X的主代码是否正在执行它应该执行的操作(在此上下文中-->测试另一个项目) 单元测试(com.myapp.testutils中的类)不应该包装在jar中,但它是为了确保应用程序正常工作 您的重点不应该是将projectx中的测试放在一个jar中,而是为projectx进行单元测试,然后将经过适当测试的projectx导入projecty 编辑:
如果com.myapp.testutils对于使project X能够测试project Y很重要:请将包从“test/java”移动到“main/java”。那么应该可以了。你的问题实际上有3个问题(1个是你的目标,2个是关于它的问题)。但是,它们是组合在一起的,可以固定在一起
-编译项目的源代码编译
测试
projectX: src/test/Java com.myapp.testutils class ClassWithEnum - This contains a public enum MyEnum src/test/resources text files here src/main/Java com.myapp.core class EnumUserClass - This is jackson annotated & uses MyEnum
<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.myapp</groupId> <artifactId>my-jar</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <build> <defaultGoal>install</defaultGoal> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> <executions> <execution> <goals> <goal>test-jar</goal> </goals> </execution> </executions> </plugin> </plugins> </build> <name>myjar</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!--Many dependencies here--> </dependencies> <distributionManagement> <site> <id>My-Nexus-Site</id> <url>https://host.com/path1</url> </site> <repository> <id>My-Nexus-Releases</id> <name>My-Nexus-Releases</name> <url>https://host.com/path2</url> </repository> <snapshotRepository> <id>My-Nexus-Snapshots</id> <name>My-Nexus-Snapshots</name> <url>https://host.com/path3</url> </snapshotRepository> </distributionManagement> </project>
projectX: src/main/java com.myapp.core class EnumUserClass - This is jackson annotated & uses MyEnum com.myapp.testutils class ClassWithEnum - This contains a public enum MyEnum src/main/resources text files here