使用Maven,如何根据J2EE / JPA JAR正确部署WAR?
我正在创建一个模块化的Maven项目。项目已在Glassfish 3.1上部署。项目(webapp)包含三个模块:
- JAR内置的“公共”由核心功能(持久性,身份验证逻辑等)组成
- 内置到WAR中的“用户”(取决于Common)
- “管理员”,也取决于“常见”和“警告”
两种WAR都使用来自Common的带重注释的(@ Entity,@ Inject,@ EJB等)类。当前Common是一个JAR,但这不是必需的。问题是:
如何正确部署此类项目?
根据我目前(受google和stackoverflow影响)的知识:
-
通用不能为JAR,因为.jar文件已放入JAR内的WEB-INF \ lib目录中。这将进行部署时初始化,因为Glassfish需要.classes并产生“不满意的依赖关系”错误,从而导致部署失败。
-
普通的不能是WAR,因为在构建后会发生WAR覆盖复制-导致构建取决于自身…
编辑
正如Mike Decks的评论表明安装可以,我认为提供完整的错误消息将非常有用:
Deployment Error for module: User: Error occurred during deployment:
Exception while loading the app : WELD-001408 Unsatisfied dependencies
for type [Authentication] with qualifiers [@Default] at injection point
[[field] @Inject xxx.xxx.servlets.LoginFilter.authentication].
那是什么意思? 可能是什么原因?
编辑2
我附上了相关的类(修剪了一下,即没有获取/设置方法,导入等)。
public class LoginFilter implements Filter {
@Inject
Authentication authentication;
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
LoginBean login = (LoginBean) httpRequest.getSession().getAttribute("loginBean");
if((login == null || !login.isAuthenticated())) {
HttpServletResponse httpResponse = (HttpServletResponse) response;
String requestUrl = httpRequest.getRequestURI().toString();
authentication.setNavigateAfterLogin(requestUrl);
httpResponse.sendRedirect("./../login.html");
}
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig fConfig) throws ServletException {}
@Override
public void destroy() {}
}
和:
@SessionScoped
public class Authentication implements Serializable {
@Inject
private UserDatabaseController userDb;
private ShopUser user;
private String navigateAfterLogin;
private String login;
private String password;
public boolean doLogin(String username, String password) {
List<ShopUser> users = userDb.getUsers();
for(ShopUser shopUser : users) {
if(shopUser.getLogin().equals(username) && shopUser.getPassword().equals(password)) {
setUser(shopUser);
return true;
}
}
return false;
}
public void doLogout() {
setUser(null);
}
public boolean isAuthenticated() {
return getUser() != null;
}
}
-
通过添加 空
META-INF/beans.xml
和来解决问题META-INF/faces- config.xml
。空文件意味着默认配置,除其他外,它还使Glassfish知道它应查找@Inject所需的类,而缺少它们则不需要。
-
Maven:如何将jar(JR实例中没有的jar)包含到J2EE项目中?
2021-01-31 关注 0 浏览78 1答案
-
你要创建、打包和部署J2EE应用。你已启动了此J2EE服务器。你将使用(&...
2022-03-03 关注 0 浏览47 1答案
-
使用J2EE进行会话跟踪
2021-02-01 关注 0 浏览78 1答案
-
J2EE和( )语言绑定。
2022-05-11 关注 0 浏览17 1答案
-
Java EE / J2EE与J2SE / JDK版本之间的关联
2021-01-31 关注 0 浏览96 1答案
-
J2EE:显示“错误”页面时出错
2021-02-01 关注 0 浏览86 1答案
-
如何使用Maven将WAR部署到Tomcat?
2021-02-01 关注 0 浏览87 1答案
-
最终的Java版本表(J2EE,Java EE,Servlet,JSP,JSTL)
2021-02-01 关注 0 浏览96 1答案
-
在J2EE中属于Web层的组件有:
2020-12-25 关注 0 浏览82 1答案
-
J2EE中的容器到底是什么?它有什么帮助?
2021-01-29 关注 0 浏览90 1答案