views:

22

answers:

1

hi, 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

A: 

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
Pascal Thivent
Thanks Pascal, I got another error when I use 2.0.2 without importing o.a.w.a.BaseAction, it has error on mvn test immediate after mvn archetype command. [ERROR] Failed to execute goal org.codehaus.mojo:aspectj-maven-plugin:1.0:compile (default) on project myproject: The artifact org.springframework:spring-aspects referenced in aspectj plugin as an aspect library, is not found the project dependencies -> [Help 1] does 2.0.2 works well on your computer?
Mythox
@Mythox No, it doesn't and I don't know how I missed this problem, I tested the project before posting. Anyway... I saw a mail saying that if you're not using aspects, you can comment out the aspectj-maven-plugin section, which I did. But I then faced another issue. Honestly, appfuse is getting on my nerves now and I won't spend more time on it. Sorry for not being more helpful but I suggest to post on the appfuse mailing list. I'll remove my answer soon.
Pascal Thivent
Thanks a lot Pascal, I was actually following the book "flex on Java", I personally don't have specific interest on Appfuse but wanted to learn Flex. I think I will get another book to learn Flex in a better way, thanks again ^^
Mythox