Java 如何使用其他项目扩展/自定义WAR
我们的项目有以下情况:Java 如何使用其他项目扩展/自定义WAR,java,eclipse,spring,jsp,maven-2,Java,Eclipse,Spring,Jsp,Maven 2,我们的项目有以下情况: 核心web应用程序打包为 war文件(称为核心项目) 需要“定制”或“扩展”核心应用程序 每个客户(称之为客户项目)。这主要包括 新的bean定义(我们正在使用 弹簧),即更换服务 core.war中的实现 特定于客户的实现 我们希望独立开发核心和客户项目 开发客户项目时,我们需要能够在Eclipse(在Tomcat上)中以核心项目作为依赖项运行/调试它 构建客户项目时,生成的war文件“包括”核心项目和客户项目。因此,这个.war是该应用程序的特定于客户的版本 我正
- 核心web应用程序打包为 war文件(称为核心项目)李>
- 需要“定制”或“扩展”核心应用程序 每个客户(称之为客户项目)。这主要包括 新的bean定义(我们正在使用 弹簧),即更换服务 core.war中的实现 特定于客户的实现
- 我们希望独立开发核心和客户项目
- 开发客户项目时,我们需要能够在Eclipse(在Tomcat上)中以核心项目作为依赖项运行/调试它
- 构建客户项目时,生成的war文件“包括”核心项目和客户项目。因此,这个.war是该应用程序的特定于客户的版本
谢谢 听起来Maven做了你想做的事。这有点复杂,但在高层,我们做得如下。我们根据功能(登录ui、目录管理ui等)将核心平台ui划分为多个war模块。这些核心模块中的每一个都可以由面向客户的团队定制
我们在构建期间将所有这些模块合并为一个war模块。合并规则基于maven的汇编插件。通常从Java源代码开始
WAR
s不包括Java源代码,只包括WEB-INF/classes
下的编译类或WEB-INF/libs下的JAR
s
我要做的是使用Maven并用它启动一个全新的空webapp项目:
获得新的空项目结构后,将Java源代码复制到它(src/main/Java
),并在pom.xml
中填写依赖项列表
完成所有这些工作后,您可以使用mvn clean package
创建一个标准的WAR
文件,以便部署到Tomcat。您可能需要考虑基于接口设计具有可插拔功能的核心应用程序
例如,假设您的核心应用程序有一些用户
对象的概念,需要为基于用户的常见任务提供支持。创建UserStore
界面
public interface UserStore
{
public User validateUser(String username, String password) throws InvalidUserException;
public User getUser(String username);
public void addUser(User user);
public void deleteUser(User user);
public void updateUser(User user);
public List<User> listUsers();
}
这允许您根据特定客户的需求定制或扩展核心应用程序。如果客户希望将核心应用程序与其Active Directory服务器集成,请编写一个LDAPUserStore
类,该类使用LDAP实现UserStore
接口。将其配置为Springbean,并将自定义类打包为从属jar
你剩下的是一个每个人都使用的核心应用程序,以及一组特定于客户的扩展,你可以分别提供和销售;见鬼,您甚至可以让客户编写自己的扩展。在Eclipse中,有一种“本机”WTP方法可以做到这一点。它主要使用链接文件夹和.settings/org.eclipse.wst.common.component文件中的一些hack。您可以在“将Web模块划分为多个项目”一章中阅读相关文章。这样做的问题是链接的文件夹必须是相对于可以在窗口/首选项/常规/工作区/链接的资源选项卡中定义的某些文件夹的。否则,链接文件夹定义(可在项目根目录的.project文件中找到)将包含工作站特定路径。路径变量实际上应该是工作区根。此解决方案与WTP、deploy和其他一切都能很好地配合使用
第二种解决方案是使用ant。算了吧。你会后悔的
第三种解决方案是使用maven。如果你不做一些技巧,你可能会忘记WTP出版的舒适性。像其他人建议的那样使用战争覆盖层。确保同时安装m2eclipse和m2eclipse附加组件。最近发布了一个扩展插件,可以帮助您。描述见。我没有试过,但看起来还可以。无论如何,Maven与链接文件夹没有任何关系,因此我认为即使是第一个解决方案和这个Maven覆盖也可以在必要时共存
对于无头构建,您可以将其用于第一个解决方案。它现在已经死了,但仍然有效:)。如果您使用maven overlay+eclipse的东西,maven将涵盖无头构建。maximdim我一直在尝试使用WAR overlays,但使用它,我无法在父项目上热部署修改。当我修改父项目上的类或静态文件(.js、.css)时,它不会反映在已部署的应用程序上。我正在使用netbeans。你知道怎么做吗?这严重阻碍了发展。
<bean id="userStore" class="com.mycorp.auth.DatabaseUserStore">
<constructor-arg ref="usersDataSource"/>
</bean>