<o:p> </o:p>
使用 AppFuse2.0,你需要对 maven有一些基本的了解,比如什么叫 target、什么是 pom.xml 以及如何运行 maven,等等。如果你现在还不知道 maven是什么,就需要找些相关资料学习一下。下表列出了本文中用到的也是较为常用的 AppFuse 的 命令:<o:p></o:p>
命令 <o:p></o:p> | 说明<o:p></o:p> |
mvn eclipse:eclipse<o:p></o:p> | 生成eclipse的项目的配置文件,用户可以直接把项目导入到eclipse中<o:p></o:p> |
mvn jetty:run-war<o:p></o:p> | 打包并且发布你的应用程序到Jetty, 查看在 http://localhost:8080<o:p></o:p> |
<o:p> </o:p> | <o:p> </o:p> |
<o:p> </o:p> | <o:p> </o:p> |
mvn appfuse:gen<o:p></o:p> | 根据pojo生成dao manger action 页面及他们的test。<o:p></o:p> |
mvn appfuse:install<o:p></o:p> | 把生成的源代码及配置文件写入到src中<o:p></o:p> |
mvn integration-test<o:p></o:p> | Runs UI tests in Tomcat using Cargo<o:p></o:p> |
<o:p> </o:p>mvn <o:p>appfuse:full-source</o:p> | <o:p> </o:p>Converts AppFuse basic projects to full-source with no AppFuse dependencies. Currently does not work with modular archetypes. |
<o:p> mvn appfuse:gen-model | <o:p> </o:p>Generates Java classes from database tables. |
<o:p> </o:p>
<o:p></o:p>
<o:p> </o:p>
本文的示例实现对部门信息的增删查改等基本功能。用 struts 实现表示层,用 Hibernate 开发持久层,用 Spring 提供事务控制等跨模块服务,并用 Acegi 进行安全管理。本示例只用到一个域模型:department,下面是它的 UML 图。<o:p></o:p>
图 1. Department UML 图
在Appfuse 2.0简单开始和源码的下载中,我简单说明了appfuse2.0的生成<o:p></o:p>
现在我们来生成一个简单的模块 <o:p></o:p>
首先,还是进入dos命令行<o:p></o:p>
在进入myproject里,执行mvn eclipse:eclipse<o:p></o:p>
这是可以在eclipse中import导入appfuse的项目—myproject
在src.main.java.org.appfuse.model中新建一个deparment类
- Department.java
- package org.appfuse.model;
- import java.io.Serializable;
- import javax.persistence.Column;
- import javax.persistence.Entity;
- import javax.persistence.GeneratedValue;
- import javax.persistence.GenerationType;
- import javax.persistence.Id;
- import javax.persistence.Table;
- @Entity
- @Table(name="department")
- public class Department extends BaseObject implements Serializable {
- /**
- *
- */
- private static final long serialVersionUID = 831759222476769186L;
- private Long id;
- private String name;
- private String description;
- @Id @GeneratedValue(strategy=GenerationType.AUTO)
- public Long getId() {
- return id;
- }
- public void setId(Long id) {
- this.id = id;
- }
- @Column(name="name",nullable=false,length=100)
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- @Column(name="description",nullable=false,length=100)
- public String getDescription() {
- return description;
- }
- public void setDescription(String description) {
- this.description = description;
- }
- @Override
- public boolean equals(Object o) {
- // TODO Auto-generated method stub
- return false;
- }
- @Override
- public int hashCode() {
- // TODO Auto-generated method stub
- return 0;
- }
- @Override
- public String toString() {
- // TODO Auto-generated method stub
- return null;
- }
- }
<o:p></o:p>
我们现在用appfuse提供的appfuse:gen来生成模块<o:p></o:p>
AppFuse 制作了一个代码生成工具 ,他生成的代码位于 \target\appfuse\ 目录下面generated-sources内。代码生成工具可以生成绝大部分我们需要的代码,比如 dao 类,service 类,菜单、增删改的 web 页面、配置文件、样本数据,等等。
如果你希望appfuses生成 dao 和 service 类,就在项目根目录下的pom.xml中,把genericCore属性设为false。
xml 代码
- <project>
- ...
- <build>
- <plugins>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>appfuse-maven-plugin</artifactId>
- <version>2.0</version>
- <configuration>
- <genericCore>true</genericCore> <!-- Set to false if you want Java files generated for your DAOs and Managers -->
- <fullSource>false</fullSource> <!-- Set to true if you've "full-sourced" your project and changed org.appfuse to your package name -->
- </configuration>
- <dependencies>
- <dependency>
- <groupId>${jdbc.groupId}</groupId>
- <artifactId>${jdbc.artifactId}</artifactId>
- <version>${jdbc.version}</version>
- </dependency>
- </dependencies>
- </plugin>
- </plugins>
- </build>
- ...
- </project>
否则就用 ture ,它可以帮你搞定一切。下面就让我们来运行 “mvn appfuse:gen” 生成代码。
<o:p> </o:p>
[input] What is the name of you like to generate code from POJO (i.e. person)?<o:p></o:p>
Department<o:p></o:p>
<o:p> </o:p>
在target\appfuse\generated-sources下会生成部门的代码<o:p></o:p>
我们需要接着执行mvn appfuse:install<o:p></o:p>
把生成的代码写入源程序中<o:p></o:p>
<o:p> </o:p>
接着执行mvn jetty:run-war,在 http://localhost:8080就可以看到程序了<o:p></o:p>
<o:p> </o:p>
appfuse的初始界面<o:p> </o:p>