Import org.appfuse.webapp.action.baseactionは解決できません
質問
私はガイドをフォローしていました http://appfuse.org/display/apf/using+struts+2 簡単なAppFuseサイトを作成するには、Mavenとのコンパイル中にエラーが発生しました。
Googleから運がなくて多くのことを検索しました。誰も私にヒントを与えたり、助けたり、考えたり、アドバイスしたりすることができますか。ありがとうございました
Maven 2.2.1と3の両方が同じエラーを生成しました:Archetypeの使用:AppFuse-Basic-struts-archetype、v.2.1.0-M1
Mavenコマンド:
mvn archetype:generate -B -DarchetypeGroupId=org.appfuse.archetypes -
DarchetypeArtifactId=appfuse-basic-struts-archetype -DarchetypeVersion=2.1.0-M1
-DgroupId=com.mycompany -DartifactId=myproject
このPTでは、MVNテストまたはJetty:Run-warでエラーが発生していません。
ただし、以下のように2つのクラス(PersonactionTestとPersonaction)を追加すると、コンパイルできません
personceTest: src test java com mycompany webapp webapp action
package com.mycompany.webapp.action;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.ServletActionContext;
import org.appfuse.service.GenericManager;
import org.appfuse.tutorial.model.Person; \\this fails to compile
import org.appfuse.webapp.action.BaseActionTestCase; \\this fails to compile
import org.springframework.mock.web.MockHttpServletRequest;
public class PersonActionTest extends BaseActionTestCase {
private PersonAction action;
@Override
protected void onSetUpBeforeTransaction() throws Exception {
super.onSetUpBeforeTransaction();
action = new PersonAction();
GenericManager personManager = (GenericManager) applicationContext
.getBean("personManager");
action.setPersonManager(personManager);
// add a test person to the database
Person person = new Person();
person.setFirstName("Jack");
person.setLastName("Raible");
personManager.save(person);
}
public void testSearch() throws Exception {
assertEquals(action.list(), ActionSupport.SUCCESS);
assertTrue(action.getPersons().size() >= 1);
}
}
人物: src main java com mycompany webapp webapp action
package com.mycompany.webapp.action;
import org.appfuse.webapp.action.BaseAction; \\this fails to compile
import org.appfuse.tutorial.model.Person; \\this fails to compile
import org.appfuse.service.GenericManager;
import java.util.List;
public class PersonAction extends BaseAction {
private GenericManager<Person, Long> personManager;
private List persons;
public void setPersonManager(GenericManager<Person, Long> personManager) {
this.personManager = personManager;
}
public List getPersons() {
return persons;
}
public String list() {
persons = personManager.getAll();
return SUCCESS;
}
}
エラーメッセージ:
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building AppFuse Struts 2 Application 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- aspectj-maven-plugin:1.2:compile (default) @ realtest ---
[ERROR] The import org.appfuse.webapp cannot be resolved
[ERROR] The import org.appfuse.tutorial cannot be resolved
[ERROR] Person cannot be resolved to a type
[ERROR] Person cannot be resolved to a type
[ERROR] personManager cannot be resolved or is not a field
[ERROR] personManager cannot be resolved
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.285s
[INFO] Finished at: Thu Oct 21 09:35:56 CST 2010
[INFO] Final Memory: 6M/27M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:aspectj-maven-plugin:1.2:compil
e (default) on project realtest: Compiler errors :
[ERROR] error at import org.appfuse.webapp.action.BaseAction;
[ERROR] ^^^^^^^^^^^^^^^^^
MSGの残りの部分が類似しているように切り捨てられます
ありがとう〜
スティーブン
解決
私はAppFuseの専門家ではありません(これにより、変更や既存の問題のすべての詳細を認識していないことを意味します)が、Archetypeのバージョン2.1.0-M1を使用して生成されたプロジェクトは見逃しています。 appfuse-struts
アーティファクト(提供します o.a.w.a.BaseAction
).
手動で追加しようとしましたが、他のアーティファクト解像度の問題に遭遇し(依存依存関係が見つかりません)、あきらめました。
ただし、使用するプロジェクト 前のバージョン Archetype(IEバージョン2.0.2)は大丈夫に見え、私の推奨事項は代わりにこのバージョンを使用することです。
mvn archetype:generate -B -DarchetypeGroupId=org.appfuse.archetypes \
-DarchetypeArtifactId=appfuse-basic-struts \
-DarchetypeVersion=2.0.2 \
-DgroupId=com.mycompany \
-DartifactId=myproject
他のヒント
このスレッドはかなり古いことはわかっていますが、今はこのエラーが数回発生したため、ソリューションを共有したいと思います。最近、次の設定でこのエラーが発生しました。 * UTILなどのプロジェクトがあります。たとえば、DBCP *別のプロジェクト、たとえばアプリ、UTILに依存し、そのプロジェクトに適用されるプロジェクトがあります。 *アプリに新しいクラスを追加しました。 推移的 依存関係、たとえば、新しいクラスCは、DBCPからいくつかの抽象クラスを実装しています。 APPはUTILに依存するため、DBCPはEclipseで表示され、すべてが問題ありません。ただし、MVNインストールを使用してコマンドラインでプロジェクトをコンパイルすると、DBCPからのインポートを解決できないと述べていても、AspectJプラグインが失敗します。 *アプリからDBCPへの直接的な依存関係を含めると、問題は解決します(私にとって)。
したがって、Javaコンパイラプラグインが行う間、AspectJは推移的依存関係を使用しません。おそらく、新しいクラスCの位置は「最適な」ものではなく、UTILプロジェクトに移動する必要がありますが、それは別の問題です。
誰もがこのスレッドに来るのに役立つことを願っています。