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
I know this thread is pretty old, but I got this error several times now, therefore I want to share my solution. I recently got this error in the following setting. * There is project, say Util, that imports a library, e.g., dbcp * Another project, say App, depends on Util and aspects are to be applied to that project. * I added a new class to App, that uses a transitive dependency, e.g., the new class C implements some abstract class from dbcp. Because App depends on Util, dbcp is visible in eclipse and everything is fine. However, when I compile my project on the command line using mvn install, the aspectj plugin fails with stating that the import from dbcp could not be resolved. * Including a direct dependency from App to dbcp solves the problem (for me).
So aspectj does not use transitive dependencies while the java compiler plugin does. Probably, the position of the new class C is not the "optimal" one, it should be moved to the Util project but that is a different issue.
Hope that helps anyone coming to this thread.
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
精彩评论