为什么我的 java 项目中的包在 grails 项目 运行 作为 grails-app 时无法编译,其中 java 项目被引用到 grails 项目
why package in my java project does not compile when grails project run as grails-app,there java project is referenced to grails project
这些是关于我的两个项目的图片:
java 项目包括:许多包 xyz。
grails 项目,我通过两种方式引用 java 项目:
- 添加 java 构建路径。
- 签入项目参考。
所以我在 grails 项目中有文件 TestsimiliraDetection.java
。它调用 java 项目中的所有包。
当我运行TestsimiliraDetection.java
为java-application时,无所谓。但是当我 运行 ThirdGrails 项目作为 grails 应用程序时,它会产生以下错误:
Compiling 3 source files [groovyc] org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
[groovyc] Compile error during compilation with javac.
[groovyc] A:\juno-workspace\ThirdGrails\src\java\readInput\TestSimitaryDetection.java:7: error: package local.extractText.extractText does not exist
[groovyc] import local.extractText.extractText.ExtractPdf;
[groovyc] ^
[groovyc] A:\juno-workspace\ThirdGrails\src\java\readInput\TestSimitaryDetection.java:8: error: package local.extractText.extractText does not exist
[groovyc] import local.extractText.extractText.GetSection;
[groovyc] ^
[groovyc] A:\juno-workspace\ThirdGrails\src\java\readInput\TestSimitaryDetection.java:9: error: package local.extractText.extractText does not exist
[groovyc] import local.extractText.extractText.GetStructureOfFile;
[groovyc] ^
[groovyc] A:\juno-workspace\ThirdGrails\src\java\readInput\TestSimitaryDetection.java:10: error: package local.extractText.getPositionPdf does not exist
[groovyc] import local.extractText.getPositionPdf.Page;
[groovyc] ^
[groovyc] A:\juno-workspace\ThirdGrails\src\java\readInput\TestSimitaryDetection.java:11: error: package local.extractText.getPositionPdf does not exist
[groovyc] import local.extractText.getPositionPdf.Paragraph;
[groovyc] ^
[groovyc] A:\juno-workspace\ThirdGrails\src\java\readInput\TestSimitaryDetection.java:12: error: package local.extractText.getPositionPdf does not exist
[groovyc] import local.extractText.getPositionPdf.Part;
[groovyc] ^
[groovyc] A:\juno-workspace\ThirdGrails\src\java\readInput\TestSimitaryDetection.java:13: error: package local.extractText.getPositionPdf does not exist
[groovyc] import local.extractText.getPositionPdf.Section;
[groovyc] ^
[groovyc] A:\juno-workspace\ThirdGrails\src\java\readInput\TestSimitaryDetection.java:14: error: package local.infoFile does not exist
[groovyc] import local.infoFile.infoThesis;
[groovyc] ^
[groovyc] A:\juno-workspace\ThirdGrails\src\java\readInput\TestSimitaryDetection.java:15: error: package local.libs does not exist
[groovyc] import local.libs.Lib;
[groovyc] ^
[groovyc] A:\juno-workspace\ThirdGrails\src\java\readInput\TestSimitaryDetection.java:16: error: package local.lucene does not exist
[groovyc] import local.lucene.FindCopy;
.......
这里找不到包 xyz .xyz 是我的 java 项目中的包。
但它不起作用。有没有办法参考这些项目?为什么这些包不能编译?我还在 grails 项目的 java 构建路径中添加了 class 文件夹,但它仍然会产生错误。
谁能帮帮我?
如果您想将 Java 代码直接添加到 Grails 项目中,您需要遵循标准的 classpath 规则。在 Grails 中,您有这个 src/java
文件夹,它是您要放入项目中的任何 Java 代码的根 class 路径。然后,如果您像 local.lucene.FindCopy
一样导入 class,则文件 src/java/local/lucene/FindCopy.java
必须存在。
请记住,像 run-app
这样的 Grails 命令并不关心您在 Eclipse 项目构建路径中设置的内容。它仅指示您的 IDE 的行为,而不指示 Grails 本身。但是如果你使用例如GGTS(Groovy Grails 工具套件),src/java
中的构建路径应该默认为任何 Java 项目定义。
备选方案
考虑同时提供您的 Java 依赖项作为 Maven 工件。基本上,如果您将 Java 代码放入 Maven 项目,您可以简单地添加来自本地 Maven 存储库的依赖项。它在文档中有广泛描述 - http://grails.github.io/grails-doc/2.3.x/guide/conf.html#dependencyResolution 值得一试。
这些是关于我的两个项目的图片: java 项目包括:许多包 xyz。 grails 项目,我通过两种方式引用 java 项目:
- 添加 java 构建路径。
- 签入项目参考。
所以我在 grails 项目中有文件 TestsimiliraDetection.java
。它调用 java 项目中的所有包。
当我运行TestsimiliraDetection.java
为java-application时,无所谓。但是当我 运行 ThirdGrails 项目作为 grails 应用程序时,它会产生以下错误:
Compiling 3 source files [groovyc] org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
[groovyc] Compile error during compilation with javac.
[groovyc] A:\juno-workspace\ThirdGrails\src\java\readInput\TestSimitaryDetection.java:7: error: package local.extractText.extractText does not exist
[groovyc] import local.extractText.extractText.ExtractPdf;
[groovyc] ^
[groovyc] A:\juno-workspace\ThirdGrails\src\java\readInput\TestSimitaryDetection.java:8: error: package local.extractText.extractText does not exist
[groovyc] import local.extractText.extractText.GetSection;
[groovyc] ^
[groovyc] A:\juno-workspace\ThirdGrails\src\java\readInput\TestSimitaryDetection.java:9: error: package local.extractText.extractText does not exist
[groovyc] import local.extractText.extractText.GetStructureOfFile;
[groovyc] ^
[groovyc] A:\juno-workspace\ThirdGrails\src\java\readInput\TestSimitaryDetection.java:10: error: package local.extractText.getPositionPdf does not exist
[groovyc] import local.extractText.getPositionPdf.Page;
[groovyc] ^
[groovyc] A:\juno-workspace\ThirdGrails\src\java\readInput\TestSimitaryDetection.java:11: error: package local.extractText.getPositionPdf does not exist
[groovyc] import local.extractText.getPositionPdf.Paragraph;
[groovyc] ^
[groovyc] A:\juno-workspace\ThirdGrails\src\java\readInput\TestSimitaryDetection.java:12: error: package local.extractText.getPositionPdf does not exist
[groovyc] import local.extractText.getPositionPdf.Part;
[groovyc] ^
[groovyc] A:\juno-workspace\ThirdGrails\src\java\readInput\TestSimitaryDetection.java:13: error: package local.extractText.getPositionPdf does not exist
[groovyc] import local.extractText.getPositionPdf.Section;
[groovyc] ^
[groovyc] A:\juno-workspace\ThirdGrails\src\java\readInput\TestSimitaryDetection.java:14: error: package local.infoFile does not exist
[groovyc] import local.infoFile.infoThesis;
[groovyc] ^
[groovyc] A:\juno-workspace\ThirdGrails\src\java\readInput\TestSimitaryDetection.java:15: error: package local.libs does not exist
[groovyc] import local.libs.Lib;
[groovyc] ^
[groovyc] A:\juno-workspace\ThirdGrails\src\java\readInput\TestSimitaryDetection.java:16: error: package local.lucene does not exist
[groovyc] import local.lucene.FindCopy;
.......
这里找不到包 xyz .xyz 是我的 java 项目中的包。 但它不起作用。有没有办法参考这些项目?为什么这些包不能编译?我还在 grails 项目的 java 构建路径中添加了 class 文件夹,但它仍然会产生错误。 谁能帮帮我?
如果您想将 Java 代码直接添加到 Grails 项目中,您需要遵循标准的 classpath 规则。在 Grails 中,您有这个 src/java
文件夹,它是您要放入项目中的任何 Java 代码的根 class 路径。然后,如果您像 local.lucene.FindCopy
一样导入 class,则文件 src/java/local/lucene/FindCopy.java
必须存在。
请记住,像 run-app
这样的 Grails 命令并不关心您在 Eclipse 项目构建路径中设置的内容。它仅指示您的 IDE 的行为,而不指示 Grails 本身。但是如果你使用例如GGTS(Groovy Grails 工具套件),src/java
中的构建路径应该默认为任何 Java 项目定义。
备选方案
考虑同时提供您的 Java 依赖项作为 Maven 工件。基本上,如果您将 Java 代码放入 Maven 项目,您可以简单地添加来自本地 Maven 存储库的依赖项。它在文档中有广泛描述 - http://grails.github.io/grails-doc/2.3.x/guide/conf.html#dependencyResolution 值得一试。