Java 找不到符号RunAction2
现在我正在努力为詹金斯学习插件编程。我从Hello World教程开始,可以找到 基本的Hello World插件对我来说很好,但在最后添加一个侧面板时,只要我尝试Java 找不到符号RunAction2,java,maven,jenkins,plugins,Java,Maven,Jenkins,Plugins,现在我正在努力为詹金斯学习插件编程。我从Hello World教程开始,可以找到 基本的Hello World插件对我来说很好,但在最后添加一个侧面板时,只要我尝试mvn验证,就会出现以下错误: [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 17.570 s [INFO] Finished at: 201
mvn验证
,就会出现以下错误:
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 17.570 s
[INFO] Finished at: 2018-02-06T08:34:41+01:00
[INFO] Final Memory: 48M/892M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.
6.1:compile (default-compile) on project demo: Compilation failure: Compilation
failure:
[ERROR] /C:/Users/jschoene/demo/src/main/java/org/jenkinsci/plugins/sample/Hello
WorldAction.java:[5,20] cannot find symbol
[ERROR] symbol: class RunAction2
[ERROR] location: package hudson.model
[ERROR] /C:/Users/jschoene/demo/src/main/java/org/jenkinsci/plugins/sample/Hello
WorldAction.java:[7,42] cannot find symbol
[ERROR] symbol: class RunAction2
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e swit
ch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please rea
d the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureExc
eption
下面我列出了我的代码
HelloWorldAction.java
package org.jenkinsci.plugins.sample;
import hudson.model.Action;
import hudson.model.Run;
import hudson.model.RunAction2;
public class HelloWorldAction implements RunAction2 {
private String name;
private transient Run run;
public HelloWorldAction(String Name) {
this.name = Name;
}
public String getName() {
return name;
}
@Override
public String getIconFileName() {
return "document.png";
}
@Override
public String getDisplayName() {
return "Greeting";
}
@Override
public String getUrlName() {
return "greeting";
}
@Override
public void onAttached(Run<?, ?> run) {
this.run = run;
}
@Override
public void onLoad(Run<?, ?> run) {
this.run = run;
}
public Run getRun() {
return run;
}
}
package org.jenkinsci.plugins.sample;
import hudson.Launcher;
import hudson.Extension;
import hudson.FilePath;
import hudson.util.FormValidation;
import hudson.model.AbstractProject;
import hudson.model.Run;
import hudson.model.TaskListener;
import hudson.tasks.Builder;
import hudson.tasks.BuildStepDescriptor;
import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.QueryParameter;
import javax.servlet.ServletException;
import java.io.IOException;
import jenkins.tasks.SimpleBuildStep;
import org.jenkinsci.Symbol;
import org.kohsuke.stapler.DataBoundSetter;
public class HelloWorldBuilder extends Builder implements SimpleBuildStep {
private final String name;
private boolean useFrench;
@DataBoundConstructor
public HelloWorldBuilder(String name) {
this.name = name;
}
public String getName() {
return name;
}
public boolean isUseFrench() {
return useFrench;
}
@DataBoundSetter
public void setUseFrench(boolean useFrench) {
this.useFrench = useFrench;
}
@Override
public void perform(Run<?, ?> run, FilePath workspace, Launcher launcher, TaskListener listener) throws InterruptedException, IOException {
run.addAction(new HelloWorldAction(name));
if (useFrench) {
listener.getLogger().println("Bonjour, " + name + "!");
} else {
listener.getLogger().println("Hello, " + name + "!");
}
}
@Symbol("greet")
@Extension
public static final class DescriptorImpl extends BuildStepDescriptor<Builder> {
public FormValidation doCheckName(@QueryParameter String value, @QueryParameter boolean useFrench)
throws IOException, ServletException {
if (value.length() == 0)
return FormValidation.error(Messages.HelloWorldBuilder_DescriptorImpl_errors_missingName());
if (value.length() < 4)
return FormValidation.warning(Messages.HelloWorldBuilder_DescriptorImpl_warnings_tooShort());
if (!useFrench && value.matches(".*[éáàç].*")) {
return FormValidation.warning(Messages.HelloWorldBuilder_DescriptorImpl_warnings_reallyFrench());
}
return FormValidation.ok();
}
@Override
public boolean isApplicable(Class<? extends AbstractProject> aClass) {
return true;
}
@Override
public String getDisplayName() {
return Messages.HelloWorldBuilder_DescriptorImpl_DisplayName();
}
}
}
package org.jenkinsci.plugins.sample;
导入hudson.model.Action;
导入hudson.model.Run;
导入hudson.model.RunAction2;
公共类HelloWorldAction实现RunAction2{
私有字符串名称;
私人临时运行;
公共HelloWorldAction(字符串名称){
this.name=名称;
}
公共字符串getName(){
返回名称;
}
@凌驾
公共字符串getIconFileName(){
返回“document.png”;
}
@凌驾
公共字符串getDisplayName(){
回复“问候”;
}
@凌驾
公共字符串getUrlName(){
回复“问候”;
}
@凌驾
已连接的公共void(运行){
this.run=run;
}
@凌驾
公共void onLoad(运行){
this.run=run;
}
公共运行getRun(){
回程;
}
}
HelloWorldBuilder.java
package org.jenkinsci.plugins.sample;
import hudson.model.Action;
import hudson.model.Run;
import hudson.model.RunAction2;
public class HelloWorldAction implements RunAction2 {
private String name;
private transient Run run;
public HelloWorldAction(String Name) {
this.name = Name;
}
public String getName() {
return name;
}
@Override
public String getIconFileName() {
return "document.png";
}
@Override
public String getDisplayName() {
return "Greeting";
}
@Override
public String getUrlName() {
return "greeting";
}
@Override
public void onAttached(Run<?, ?> run) {
this.run = run;
}
@Override
public void onLoad(Run<?, ?> run) {
this.run = run;
}
public Run getRun() {
return run;
}
}
package org.jenkinsci.plugins.sample;
import hudson.Launcher;
import hudson.Extension;
import hudson.FilePath;
import hudson.util.FormValidation;
import hudson.model.AbstractProject;
import hudson.model.Run;
import hudson.model.TaskListener;
import hudson.tasks.Builder;
import hudson.tasks.BuildStepDescriptor;
import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.QueryParameter;
import javax.servlet.ServletException;
import java.io.IOException;
import jenkins.tasks.SimpleBuildStep;
import org.jenkinsci.Symbol;
import org.kohsuke.stapler.DataBoundSetter;
public class HelloWorldBuilder extends Builder implements SimpleBuildStep {
private final String name;
private boolean useFrench;
@DataBoundConstructor
public HelloWorldBuilder(String name) {
this.name = name;
}
public String getName() {
return name;
}
public boolean isUseFrench() {
return useFrench;
}
@DataBoundSetter
public void setUseFrench(boolean useFrench) {
this.useFrench = useFrench;
}
@Override
public void perform(Run<?, ?> run, FilePath workspace, Launcher launcher, TaskListener listener) throws InterruptedException, IOException {
run.addAction(new HelloWorldAction(name));
if (useFrench) {
listener.getLogger().println("Bonjour, " + name + "!");
} else {
listener.getLogger().println("Hello, " + name + "!");
}
}
@Symbol("greet")
@Extension
public static final class DescriptorImpl extends BuildStepDescriptor<Builder> {
public FormValidation doCheckName(@QueryParameter String value, @QueryParameter boolean useFrench)
throws IOException, ServletException {
if (value.length() == 0)
return FormValidation.error(Messages.HelloWorldBuilder_DescriptorImpl_errors_missingName());
if (value.length() < 4)
return FormValidation.warning(Messages.HelloWorldBuilder_DescriptorImpl_warnings_tooShort());
if (!useFrench && value.matches(".*[éáàç].*")) {
return FormValidation.warning(Messages.HelloWorldBuilder_DescriptorImpl_warnings_reallyFrench());
}
return FormValidation.ok();
}
@Override
public boolean isApplicable(Class<? extends AbstractProject> aClass) {
return true;
}
@Override
public String getDisplayName() {
return Messages.HelloWorldBuilder_DescriptorImpl_DisplayName();
}
}
}
package org.jenkinsci.plugins.sample;
进口哈德逊发射器;
导入哈德逊扩展;
导入hudson.FilePath;
导入hudson.util.FormValidation;
导入hudson.model.AbstractProject;
导入hudson.model.Run;
导入hudson.model.TaskListener;
导入hudson.tasks.Builder;
导入hudson.tasks.BuildStepDescriptor;
导入org.kohsuke.stapper.DataBoundConstructor;
导入org.kohsuke.stapper.QueryParameter;
导入javax.servlet.ServletException;
导入java.io.IOException;
导入jenkins.tasks.SimpleBuildStep;
导入org.jenkinsci.Symbol;
导入org.kohsuke.stapper.DataBoundSetter;
公共类HelloWorldBuilder扩展生成器实现SimpleBuildStep{
私有最终字符串名;
私用法语;
@数据边界构造函数
公共HelloWorldBuilder(字符串名称){
this.name=名称;
}
公共字符串getName(){
返回名称;
}
公共布尔值isUseFrench(){
返回使用法语;
}
@数据边界设置器
public void setUseFrench(布尔值useFrench){
this.usefrence=usefrence;
}
@凌驾
public void perform(运行、文件路径工作区、启动器启动器、TaskListener侦听器)抛出InterruptedException、IOException{
run.addAction(新HelloWorldAction(名称));
如果(使用法语){
listener.getLogger().println(“你好,+name+”!”;
}否则{
listener.getLogger().println(“你好,“+name+”!”);
}
}
@符号(“问候”)
@延伸
公共静态最终类描述符RIMPL扩展了BuildStepDescriptor{
公共表单验证doCheckName(@QueryParameter字符串值,@QueryParameter布尔值useFrench)
抛出IOException、ServletException{
如果(value.length()==0)
返回FormValidation.error(Messages.HelloWorldBuilder_DescriptorImpl_errors_missingName());
if(value.length()<4)
返回FormValidation.warning(Messages.HelloWorldBuilder_descriptoripl_warnings_tooShort());
如果(!useFrench&&value.matches(“.[\\\\ç].*)){
返回FormValidation.warning(Messages.HelloWorldBuilder_DescriptorImpl_warnings_reallyFrench());
}
返回FormValidation.ok();
}
@凌驾
公共布尔值不适用(类
TODO插件
待办事项
https://wiki.jenkins-ci.org/display/JENKINS/TODO+插件
麻省理工学院执照
http://opensource.org/licenses/MIT
org.jenkins-ci.plugins
结构
1.7
org.jenkins-ci.plugins.workflow
工作流步骤api
2.12
测试
org.jenkins-ci.plugins.workflow
工作流cps
2.39
测试
org.jenkins-ci.plugins.workflow
工作流作业
2.11.2
测试
org.jenkins-ci.plugins.workflow
工作流基本步骤
2.6
测试
org.jenkins-ci.plugins.workflow
工作流持久任务步骤
2.13
测试
org.jenkins-ci.plugins.workflow
工作流api
2.20
测试
org.jenkins-ci.plugins.workflow
工作流支持
2.14
测试
repo.jenkins-ci.org
https://repo.jenkins-ci.org/public/
repo.jenkins-ci.org
https://repo.jenkins-ci.org/public/
index.jelly
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:l="/lib/layout" xmlns:st="jelly:stapler">
<l:layout title="Greeting">
<l:side-panel>
<st:include page="sideplay.jelly" it="${it.run}" optional="true" />
</l:side-panel>
<l:main-panel>
<h1>
Name: ${it.name}
</h1>
</l:main-panel>
</l:layout>
</j:jelly>
名称:${it.Name}
我检查了stackoverflow上的一些其他线程,模式是找不到symbol,据我所知,类RunAction2不知怎么丢失了。但是我从jenkins教程中知道mvn verify
应该下载所有丢失的依赖项,所以我不知道如何修复这个问题
我还尝试将pom.xml
文件中的JDK版本更改为我的实际版本,这也没有帮助
我想这是一个很小的错误,但作为一个该死的初学者,我被困在这里。希望有人能给我指出正确的方向
提前感谢如评论中所述,这里是解决方案: 您需要导入jenkins.model.runaction 2;而不是导入hudson.model.RunActio