使用Maven,如何根据J2EE / JPA JAR正确部署WAR?
|
我正在创建一个模块化的Maven项目。项目已在Glassfish 3.1上部署。项目(webapp)包含三个模块:
\“ Common \”,由JAR内置的核心功能(持久性,身份验证逻辑等)组成
内置到WAR中的\“ User \”(取决于Common)
\“ Admin \”,也取决于Common和Warred
两种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;
}
}
没有找到相关结果
已邀请:
3 个回复
苏髓骗撩
和ѭ4solved解决了问题。空文件意味着默认配置,其中包括让Glassfish知道应查找@Inject所需的类,而缺少文件则不需要。
疼嘶桐
阀傻