使用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;
    }
}
    
已邀请:
        通过添加空的
META-INF/beans.xml
和ѭ4solved解决了问题。空文件意味着默认配置,其中包括让Glassfish知道应查找@Inject所需的类,而缺少文件则不需要。     
        从错误消息来看,这似乎是CDI的问题。尝试初始化LoginFilter时,无法找到类型为\'Authentication \'的正确实现。检查JAR文件中是否有类型为'Authentication \'的实现类。 就像@Mike提到的那样,您应该将依赖项作为JAR文件放入lib文件夹中,所以这不应该成为问题。我想这不是Maven的问题。     
        使用EAR打包EJB罐和WAR。     

要回复问题请先登录注册