Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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-编译错误:无法访问函数_Java_Maven_Osgi_Owasp - Fatal编程技术网

Java-编译错误:无法访问函数

Java-编译错误:无法访问函数,java,maven,osgi,owasp,Java,Maven,Osgi,Owasp,我有一个osgi项目。每个捆绑包都是一个独立的maven项目。该项目足够大,包括大约10个捆绑包。一切正常 今天我又添加了一个库-。我已经设置了所有依赖项,ide(netbeans 8)显示一切正常。但是,我在该方法中获得以下编译代码: @Override public void sanitize(Map<String,Object> policies){ PolicyFactory policy=(PolicyFactory) policies.get("html0");

我有一个osgi项目。每个捆绑包都是一个独立的maven项目。该项目足够大,包括大约10个捆绑包。一切正常

今天我又添加了一个库-。我已经设置了所有依赖项,ide(netbeans 8)显示一切正常。但是,我在该方法中获得以下编译代码:

@Override
public void sanitize(Map<String,Object> policies){
    PolicyFactory  policy=(PolicyFactory) policies.get("html0");
    this.code=policy.sanitize(this.code);
}

编辑


编辑
-我尝试通过mvn安装-X

org.apache.maven.lifecycle.LifecycleExecutionException:未能 执行目标 插件:maven编译器插件:2.3.2:编译 项目com上的(默认编译):编译失败 ../subjects/SubjectDirItemCore.java:[166,24]错误:无法访问 作用

在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:213) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) 在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) 在 org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) 在 org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) 在org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)上 org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)位于 org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)位于 org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)位于 org.apache.maven.cli.MavenCli.main(MavenCli.java:141)位于 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)位于 invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 位于java.lang.reflect.Method.invoke(Method.java:497) org.codehaus.plexus.classworlds.launcher.launcher.launchEnhanced(launcher.java:290) 在 org.codehaus.plexus.classworlds.launcher.launcher.launch(launcher.java:230) 在 org.codehaus.plexus.classworlds.launcher.launcher.mainWithExitCode(launcher.java:409) 在 org.codehaus.plexus.classworlds.launcher.launcher.main(launcher.java:352) 原因:org.apache.maven.plugin.CompilationFailureException: 编译失败/…/subjects/SubjectDirItemCore.java:[166,24] 错误:无法访问函数

在 org.apache.maven.plugin.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:656) 在 org.apache.maven.plugin.CompilerMojo.execute(CompilerMojo.java:128) 在 org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) ... 19更多[错误]


这似乎是jar版本的问题。最有可能的是,包含类PolicyFactory的较新版本的jar降低了方法清理的可见性级别。必须有一种新的方法,你应该使用,因为以前的方法受到限制。

我找到了anwser-我用了番石榴12而不是番石榴11。我选择了12,因为它是osgi捆绑包的第一个版本。

在我的例子中,这发生在工件被发布到本地
Maven
存储库时,没有适当的
pom.xml
,因此无法下载可传递的依赖项。查找未找到类所在的工件,并手动将其输入到pom.xml中,这将解决问题。

您使用什么JDK编译代码?@mkrakhin openjdk version“1.8.0-internal”openjdk运行时环境(build 1.8.0-internal-_2014_11_22_23_46-b00)openjdk 64位服务器VM(build 25.40-b18,混合模式)Ok。如果pom.xml中有番石榴,它的确切版本是什么?另外,您使用什么版本的owasp java html净化剂?看起来老番石榴和JDK8之间存在不兼容的问题。试着用JDK7编译它。@mkrakhin我在BudlePom没有番石榴。番石榴12仅用于owasp库。不过在服务器端,我有java8+gf4.1+owasp lib包,这没问题。尝试将最新的番石榴(18)添加到pom.xml中。Guava 12是在JDK 8之前发布的,而且它有一些兼容性问题。请检查您是否可以访问该类的源代码,并查看PolicyFactory类及其方法的定义。如果没有,只需执行ctrl+shift+T并搜索PolicyFactory类。打开.class文件后,可以按ctrl+O键检查该类公开的所有方法以及公共方法。PolicyFactory有这样一个方法:publicstringsanitize(@nullablestinghtml){returnsanitize(html,null,null);}您确定jar没有多个版本吗?如果方法是公共的,我想不出任何其他原因。是的,这个库不是osgi包,所以我创建了我的maven osgi项目并构建了osgi包。这个新的包被添加到依赖项中。所以正如我说的,问题是在旧版本的guava中?
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.owasp.html.PolicyFactory;
COMPILATION ERROR : 
-------------------------------------------------------------
com/subjects/SubjectDirItemCore.java:[166,24] error: cannot access Function
1 error
-------------------------------------------------------------
------------------------------------------------------------------------
BUILD FAILURE
------------------------------------------------------------------------
Total time: 1.687s
Finished at: Wed Feb 18 16:11:11 MSK 2015
Final Memory: 14M/205M