Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用其他项目扩展/自定义WAR_Java_Eclipse_Spring_Jsp_Maven 2 - Fatal编程技术网

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是该应用程序的特定于客户的版本
我正在寻找关于在工具和项目配置方面实现这一点的最佳方法的建议

我们目前正在使用Ant,但希望避免被更多的Ant掩埋。有人对Maven这样做过吗

我看过很多关于如何构建依赖于java应用程序的web应用程序的文章,但是对于依赖于另一个web应用程序的web应用程序却没有看到任何文章


谢谢

听起来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>