RedmineのAPIであるtaskadapterを使用し、チケットCSV出力プログラムを作成しましたが、
redmineMgr = RedmineManagerFactory.createWithApiKey(url, apiAccessKey);の部分で
NoClassDefFoundErrorが発生しました。
原因がわからず困っています。
お分かりの方いらっしゃいましたら、ご指摘ください。
下記、ソースです。
package CSV;
import java.util.List;
import java.util.Optional;
import com.taskadapter.redmineapi.IssueManager;
import com.taskadapter.redmineapi.RedmineException;
import com.taskadapter.redmineapi.RedmineManager;
import com.taskadapter.redmineapi.RedmineManagerFactory;
import com.taskadapter.redmineapi.bean.Issue;
import com.taskadapter.redmineapi.bean.IssueFactory;
import com.taskadapter.redmineapi.bean.Project;
import com.taskadapter.redmineapi.bean.ProjectFactory;
import com.taskadapter.redmineapi.bean.Tracker;
import com.taskadapter.redmineapi.bean.TrackerFactory;
import com.taskadapter.redmineapi.bean.User;
public class TicketClient {
private static final String BUG = "バグ"; private static final String FUNCTION = "機能"; private static final String SUPPORT = "サポート"; private RedmineManager redmineMgr = null; private IssueManager issueMgr = null; private List<User> userList = null; private boolean flg = false; public void setup(String url, String apiAccessKey) throws Throwable { System.out.println("【接続先】" + url); redmineMgr = RedmineManagerFactory.createWithApiKey(url, apiAccessKey); issueMgr = redmineMgr.getIssueManager(); userList = redmineMgr.getUserManager().getUsers(); flg = true; } private void flgChk() { if (!flg) { System.err.println("TicketClient#setup(String, String)を先に実行してください。"); System.exit(1); } } public void putIssue(String projectKey, String trackerName, String subject, String description) throws RedmineException { flgChk(); System.out.println("■■■チケットを1件登録します。■■■"); // チケット名重複チェック if(chkSubject(projectKey, subject)){ System.out.println("題名が重複する場合、チケットは発行しません。題名 :" + subject); }else { // Issue(1チケット)生成 Issue issue = IssueFactory.create(null); // プロジェクト setProjectInfo(issue, projectKey); // 題名 issue.setSubject(subject); // 説明 issue.setDescription(description); // トラッカー setTrackerInfo(issue, trackerName); // 1チケット登録 Issue newIssue = issueMgr.createIssue(issue); issueMgr.update(newIssue); System.out.println("チケットを登録しました。題名 :" + subject); } } private void setProjectInfo(Issue issue, String projectKey) throws RedmineException { int intProjectKey = redmineMgr.getProjectManager().getProjectByKey(projectKey).getId(); Project project = ProjectFactory.create(intProjectKey); issue.setProject(project); } private void setTrackerInfo(Issue issue, String trackerName) { int trackerId = getTrackerId(trackerName); Tracker tracker = TrackerFactory.create(trackerId, null); // 第二引数はなくてもよい issue.setTracker(tracker); } private boolean chkSubject(String projectKey, String subject) throws RedmineException { List<Issue> issues = issueMgr.getIssues(projectKey, null); // 第二引数はなくてもよい? boolean contains = issues.stream().anyMatch(a -> { if(subject.equals(a.getSubject())){ return true; } return false; }); return contains; } private int getTrackerId(String trackerName) { switch (trackerName) { case BUG: return 1; case FUNCTION: return 2; case SUPPORT: return 3; default: return 1; } } public List<Issue> getAllIssues(String projectKey) throws RedmineException { flgChk(); System.out.println("■■■チケットを全件取得します。■■■"); List<Issue> issues = issueMgr.getIssues(projectKey, null); // 第二引数はなくてもよい? System.out.println("チケットの件数 : " + issues.size()); issues.stream().forEach(is -> { System.out.println("【案件番号】" + is.getSubject()); }); return issues; } public Issue getOneIssue(String projectKey, String subject) throws RedmineException { flgChk(); System.out.println("■■■チケットを1件取得します。■■■"); List<Issue> issues = issueMgr.getIssues(projectKey, null); // 第二引数はなくてもよい? // チケットの探索(無かったらnull) Optional<Issue> is = issues.stream().filter(i ->(i.getSubject().equals(subject))).findAny(); if(is.isPresent()){ System.out.println("【題名】" + is.get().getSubject()); return is.get(); } System.out.println("チケットは取得できませんでした。" ); return null; } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/01 08:59
2016/03/01 09:32
2016/03/01 09:32
2016/03/01 09:39
2016/03/01 09:54
2016/03/01 10:04