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

在这个 pt, 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] ^^^^^^^^^^^^^^^^^

被截断,因为 msg 的其余部分相似

谢谢~

史蒂文

4

2 回答 2

2

我知道这个线程已经很老了,但我现在多次遇到这个错误,因此我想分享我的解决方案。我最近在以下设置中遇到了这个错误。* 有一个项目,比如 Util,它导入一个库,例如,dbcp * 另一个项目,比如 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 回答