Search code examples
javastruts2mavenappfuse

import org.appfuse.webapp.action.BaseAction cannot resolve


i was following the guide http://appfuse.org/display/APF/Using+Struts+2 to make a simple appfuse site, but i got an error while compiling with Maven, which is reporting org.appfuse.webapp.action.BaseAction does not exist.

I searched a lot from the google with no luck, can anyone give me a hints, appreciate for any help, idea or advise. Thankyou

both maven 2.2.1 and 3 produced same error: using archetype: appfuse-basic-struts-archetype, v.2.1.0-M1

maven command:

mvn archetype:generate -B -DarchetypeGroupId=org.appfuse.archetypes -
DarchetypeArtifactId=appfuse-basic-struts-archetype -DarchetypeVersion=2.1.0-M1 
-DgroupId=com.mycompany -DartifactId=myproject

at this pt, mvn test or jetty:run-war have not raise a error.

however, when i add 2 classes (PersonActionTest and PersonAction) as below, it fail to compile

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;
    }
}

Error Message:

[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] ^^^^^^^^^^^^^^^^^

truncated as the rest of msg is similar

Thanks~

steven


Solution

  • I'm not an Appfuse expert (by this, I mean that I'm not aware of all the details of changes and existing issues) but the project generated using the version 2.1.0-M1 of the archetype misses the appfuse-struts artifact (which provides o.a.w.a.BaseAction).

    I tried to add it manually but then ran into some other artifact resolution issue (a transitive dependency not found) and just gave up.

    However, the project you'd get using the previous version of the archetype (i.e. version 2.0.2) looks ok and my recommendation would be to use this version instead:

    mvn archetype:generate -B -DarchetypeGroupId=org.appfuse.archetypes \
        -DarchetypeArtifactId=appfuse-basic-struts \
        -DarchetypeVersion=2.0.2 \
        -DgroupId=com.mycompany \
        -DartifactId=myproject