1

http://appfuse.org/display/APF/Using+Struts+2のガイドに従って単純な appfuse サイトを作成していましたが、Maven でコンパイル中にエラーが発生し、org.appfuse.webapp.action が報告されました。 BaseAction が存在しません。

私は運が悪いので、グーグルからたくさん検索しました。誰かが私にヒントを与えてくれますか、助け、アイデア、またはアドバイスに感謝します。ありがとうございました

Maven 2.2.1 と 3 の両方で同じエラーが発生しました: using 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

この時点で、mvn test または jetty:run-war はエラーを発生させていません。

ただし、以下のように 2 つのクラス (PersonActionTest と PersonAction) を追加すると、コンパイルに失敗します。

PersonActionTest: 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);
    }
}

PersonAction: 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] ^^^^^^^^^^^^^^^^^

メッセージの残りの部分は類似しているため、切り捨てられます

ありがとう〜

スティーブン

4

2 に答える 2

2

このスレッドがかなり古いことは知っていますが、このエラーが数回発生したため、解決策を共有したいと思います。最近、次の設定でこのエラーが発生しました。* dbcp などのライブラリをインポートする Util などのプロジェクトがあります。 * App などの別のプロジェクトは Util に依存し、そのプロジェクトにアスペクトが適用されます。*推移的な依存関係を使用する新しいクラスを App に追加しました。たとえば、新しいクラス C は dbcp からの抽象クラスを実装します。App は Util に依存するため、dbcp は Eclipse で表示され、すべて問題ありません。ただし、mvn install を使用してコマンド ラインでプロジェクトをコンパイルすると、aspectj プラグインが失敗し、dbcp からのインポートを解決できないというメッセージが表示されます。* App から dbcp への直接の依存関係を含めると、問題が解決します (私にとっては)。

したがって、aspectj は推移的な依存関係を使用しませんが、Java コンパイラ プラグインは使用します。おそらく、新しいクラス C の位置は「最適な」位置ではなく、Util プロジェクトに移動する必要がありますが、それは別の問題です。

このスレッドに来る人に役立つことを願っています。

于 2012-12-06T13:30:23.380 に答える
0

私は Appfuse の専門家ではありません (つまり、変更の詳細や既存の問題をすべて認識しているわけではありません) が、アーキタイプのバージョン 2.1.0-M1 を使用して生成されたプロジェクトにはappfuse-strutsアーティファクトがありません (これにより、o.a.w.a.BaseAction)。

手動で追加しようとしましたが、他のアーティファクト解決の問題 (推移的な依存関係が見つからない) に遭遇し、あきらめました。

ただし、アーキタイプの以前のバージョン(つまり、バージョン 2.0.2) を使用して得られるプロジェクトは問題ないように見えるので、代わりにこのバージョンを使用することをお勧めします。

mvn archetype:generate -B -DarchetypeGroupId=org.appfuse.archetypes \
    -DarchetypeArtifactId=appfuse-basic-struts \
    -DarchetypeVersion=2.0.2 \
    -DgroupId=com.mycompany \
    -DartifactId=myproject
于 2010-10-22T01:11:38.110 に答える