Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven-can';t访问工件依赖项内部的嵌套类_Java_Maven_Groovy_Pom.xml_Multi Module - Fatal编程技术网

Java Maven-can';t访问工件依赖项内部的嵌套类

Java Maven-can';t访问工件依赖项内部的嵌套类,java,maven,groovy,pom.xml,multi-module,Java,Maven,Groovy,Pom.xml,Multi Module,最近,当我遇到一个有趣的错误时,我开始将一个大型Ant项目转换为Maven多模块项目。我一直面临的问题是,即使嵌套类位于同一个包(例如com.mypackage)中,我也无法从另一个工件访问它们 对于这个项目,我们将SQL查询存储在Groovy类中(多行字符串非常棒),并在编译的Java代码中引用它们。大概是这样的: ShipmentPackingQueries.groovy-所有groovy文件都在src/main/groovy下 package com.mypackage; cla

最近,当我遇到一个有趣的错误时,我开始将一个大型Ant项目转换为Maven多模块项目。我一直面临的问题是,即使嵌套类位于同一个包(例如com.mypackage)中,我也无法从另一个工件访问它们

对于这个项目,我们将SQL查询存储在Groovy类中(多行字符串非常棒),并在编译的Java代码中引用它们。大概是这样的:

ShipmentPackingQueries.groovy-所有groovy文件都在src/main/groovy下

package com.mypackage; class ShipmentPackingQueries { static class Queries { public static class Cartons { @Language("MySQL") static final String query1 = ''' query ''' } static class CartonItems { @Language("MySQL") static final String query2 = ''' query ''' } // and so on.... } } package com.mypackage; 类ShipmentPackingQueries{ 静态类查询{ 公共静态类纸箱{ @语言(“MySQL”) 静态最终字符串query1=''查询'' } 静态类卡通{ @语言(“MySQL”) 静态最终字符串query2=''查询'' } //等等。。。。 } } 这个文件被编译成一个jar,稍后使用:mylibrary-core.jar。以下是我的maven编译器插件设置-JDK版本在标记中自动检测,并且在我的机器上是openjdk 1.8:

<!-- defined in the parent pom that all modules in the project inherit from --> <build> <pluginManagement> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <!-- 2.8.0-01 and later require maven-compiler-plugin 3.1 or higher --> <version>3.5.1</version> <configuration> <compilerId>groovy-eclipse-compiler</compilerId> <showDeprecation>true</showDeprecation> <showWarnings>true</showWarnings> <verbose>true</verbose> </configuration> <dependencies> <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-eclipse-compiler</artifactId> <version>2.9.1-01</version> </dependency> <!-- for 2.8.0-01 and later you must have an explicit dependency on groovy-eclipse-batch --> <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-eclipse-batch</artifactId> <version>2.3.7-01</version> </dependency> </dependencies> </plugin> </plugins> </pluginManagement> </build> <!-- Set explicitly in the pom files for mylibrary-core and rest-core --> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> </plugin> </plugins> </build> maven编译器插件 3.5.1 groovy eclipse编译器 真的 真的 真的 org.codehaus.groovy groovy eclipse编译器 2.9.1-01 org.codehaus.groovy groovy eclipse批处理 2.3.7-01 maven编译器插件 当我观察工件mylibrary core的编译时输出时,我可以看到类正在成功创建

[writing com/mypackage/ShipmentPackingQueries$Queries$Shipments.class - #856] [writing com/mypackage/ShipmentPackingQueries$Queries$CartonTypes.class - #857] [writing com/mypackage/ShipmentPackingQueries$Queries$CartonItems.class - #858] [writing com/mypackage/ShipmentPackingQueries$Queries$Cartons.class - #859] [writing com/mypackage/ShipmentPackingQueries$Queries.class - #860] [writing com/mypackage/ShipmentPackingQueries$Queries$Feed.class - #861] [编写com/mypackage/ShipmentPackingQueries$Queries$Shippings.class-#856] [编写com/mypackage/shipmentpackingquerys$querys$CartonTypes.class-#857] [编写com/mypackage/shipmentpackingquerys$querys$CartonItems.class-#858] [编写com/mypackage/shipmentpackingquerys$querys$Cartons.class-#859] [编写com/mypackage/shipmentpackingquerys$querys.class-#860] [编写com/mypackage/shipmentpackingquerys$querys$Feed.class-#861] 我确认这些类文件也会被放入工件jar文件中。问题是当我尝试使用来自另一个工件的查询时:rest核心。我已经将rest核心设置为依赖于工件mylibrary核心。以下是来自rest core的示例文件:

ShipmentPackingResource.java-所有java文件都在src/main/java下

package com.mypackage; import static com.mypackage.ShipmentPackingQueries.Queries; public class ShipmentPackingResource { public void get() { Database.executeQuery(Queries.Cartons.getQuery1()); } } package com.mypackage; 导入静态com.mypackage.shipmentpackingquerys.querys; 公共类ShipmentPackingResource{ 公开作废获取(){ 数据库.executeQuery(querys.Cartons.getQuery1()); } } 工件rest核心无法编译,并显示消息“Cartons无法解析或不是字段”。查看输出时,我只看到两次加载ShipmentPackingQueries:

[reading com/mypackage/ShipmentPackingQueries.class] [reading com/mypackage/ShipmentPackingQueries$Queries.class] [正在阅读com/mypackage/shipmentpackingquerys.class] [正在阅读com/mypackage/shipmentpackingquerys$querys.class]
关于maven编译器插件为什么不读取ShipmentPackingQueries附带的其他类文件,有什么想法吗?我知道,如果我将类从rest核心移动到我的Library核心,我可以让它工作,但我希望模块中的代码尽可能具体。谢谢

尝试将您在
中遇到错误的类公开
,这样您就可以排除范围错误,谢谢您的建议。我这样做是为了
ShipmentPackingQueries
public
Queries
Cartons
被标记为
public static
。错误依然存在:“纸箱无法解析或不是字段”,这让我相信它们不在类路径上,您能否验证另一个Jar
mylibrary core.Jar
是否在类路径上。奇怪的是,在编译rest core时,我可以看到类路径上列出了
mylibrary core.Jar
。它还有
shipmentpackingquerys
的所有嵌套类。上面的一行写着“使用Groovy Eclipse编译器编译Java和Groovy文件”,但我认为这并不重要。请尝试将
中出现错误的类设置为public,这样您就可以排除范围错误,谢谢您的建议。我这样做是为了
ShipmentPackingQueries
public
Queries
Cartons
被标记为
public static
。错误依然存在:“纸箱无法解析或不是字段”,这让我相信它们不在类路径上,您能否验证另一个Jar
mylibrary core.Jar
是否在类路径上。奇怪的是,在编译rest core时,我可以看到类路径上列出了
mylibrary core.Jar
。它还有
shipmentpackingquerys
的所有嵌套类。上面的一行写着“使用Groovy Eclipse编译器编译Java和Groovy文件”,但我认为这并不重要。