Grails 在 jar 中找不到 class
Grails can't find class in jar
我在我的 Grails 项目中包含了一个 jar,但遇到了一个 class 未找到的问题。
buildConfig.groovy
dependencies {
compile "labServices:labServices:1.0"
}
repositories {
flatDir name:'labServices', dirs:'../LabServices/build/libs/'
}
-当我检查 labServices jar 时,它包含 classes
-当我检查 .war 它包含 labServices.jar
-当我检查 war 的 tomcat 部署时,WEB_INF/lib 包含 jar
失败的代码
//this is a class in the labServices.jar
def clarityCredentials = new Clarity("prod", "xxxx", "xxxx")
错误
org.petermac.util.Clarity. Stacktrace follows:
java.lang.ClassNotFoundException: org.petermac.util.Clarity
我已经 运行 清理、刷新 Ivy 缓存、手动删除所有内容,但仍然无法正常工作。它也 运行 在本地并通过单元测试(所以它是 war)
注意:依赖项报告显示没有对 labServices 的依赖项,尽管存在一些依赖项。这可能是个问题吗?
我对 Grails(来自 Microsoft)比较陌生,所以任何技巧、想法或调试技术都会很棒。
我很确定这是 class部署时的路径设置
更新
删除无关紧要的实际代码
import org.petermac.util.Clarity
public class LoadClarityController extends BaseController {
def load()
{
String samples = params.get("sampleIds")
def clarityCredentials = new Clarity("prod", "apiuser", "1qaz@WSX")
}
}
//in LabServices (jar is being included in war)
package org.petermac.util
public class Clarity
{
public Clarity( server, username, password )
{
}
}
该路径甚至出现在 META-INF 中(在 war 中)。我还包括另一个外部 jar,它工作正常吗?我很茫然。
因为它在 WAR 中,所以它不是依赖性问题,如果它在您的 IDE and/or run-app
[=22= 中被忽略,它只会是一个] 未列入 WAR。 WEB-INF/lib
中的所有 jar 都包含在类路径中,因此它可能是结构性的。包裹与文件夹相符吗?如果是这样,它通常会在测试和 run-app
中工作,但在部署到容器时不会。
确保来源包括
package org.petermac.util
Clarity.class
在 org/petermac/util/
罐子里。
终于找到问题了!
Servlet.class 是根本原因,因为它不能包含在 grails 项目中(tomcat 提供了这个)。
Servlet.class 存在于 javax 库中,该库被 javaee 库包含它包含在有问题的 jar 中,因此 LabServices.jar 的加载实际上失败了。
找到它并不容易。
从 LabServices 模块中删除或排除 javaee 解决了这个问题。
我在我的 Grails 项目中包含了一个 jar,但遇到了一个 class 未找到的问题。
buildConfig.groovy
dependencies {
compile "labServices:labServices:1.0"
}
repositories {
flatDir name:'labServices', dirs:'../LabServices/build/libs/'
}
-当我检查 labServices jar 时,它包含 classes
-当我检查 .war 它包含 labServices.jar
-当我检查 war 的 tomcat 部署时,WEB_INF/lib 包含 jar
失败的代码
//this is a class in the labServices.jar
def clarityCredentials = new Clarity("prod", "xxxx", "xxxx")
错误
org.petermac.util.Clarity. Stacktrace follows: java.lang.ClassNotFoundException: org.petermac.util.Clarity
我已经 运行 清理、刷新 Ivy 缓存、手动删除所有内容,但仍然无法正常工作。它也 运行 在本地并通过单元测试(所以它是 war)
注意:依赖项报告显示没有对 labServices 的依赖项,尽管存在一些依赖项。这可能是个问题吗?
我对 Grails(来自 Microsoft)比较陌生,所以任何技巧、想法或调试技术都会很棒。
我很确定这是 class部署时的路径设置
更新 删除无关紧要的实际代码
import org.petermac.util.Clarity
public class LoadClarityController extends BaseController {
def load()
{
String samples = params.get("sampleIds")
def clarityCredentials = new Clarity("prod", "apiuser", "1qaz@WSX")
}
}
//in LabServices (jar is being included in war)
package org.petermac.util
public class Clarity
{
public Clarity( server, username, password )
{
}
}
该路径甚至出现在 META-INF 中(在 war 中)。我还包括另一个外部 jar,它工作正常吗?我很茫然。
因为它在 WAR 中,所以它不是依赖性问题,如果它在您的 IDE and/or run-app
[=22= 中被忽略,它只会是一个] 未列入 WAR。 WEB-INF/lib
中的所有 jar 都包含在类路径中,因此它可能是结构性的。包裹与文件夹相符吗?如果是这样,它通常会在测试和 run-app
中工作,但在部署到容器时不会。
确保来源包括
package org.petermac.util
Clarity.class
在 org/petermac/util/
罐子里。
终于找到问题了!
Servlet.class 是根本原因,因为它不能包含在 grails 项目中(tomcat 提供了这个)。
Servlet.class 存在于 javax 库中,该库被 javaee 库包含它包含在有问题的 jar 中,因此 LabServices.jar 的加载实际上失败了。
找到它并不容易。
从 LabServices 模块中删除或排除 javaee 解决了这个问题。