当前位置: 首页 > 面试题库 >

使用Maven,如何根据J2EE / JPA JAR正确部署WAR?

谭桐
2023-03-14
问题内容

我正在创建一个模块化的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所需的类,而缺少它们则不需要。



 类似资料:
  • 我在Eclipse中使用Maven。是否可以构建项目,然后将构建的WAR文件部署到Tomcat服务器? 我使用Windows。我可以构建文件,也可以手动部署在服务器上。但是我想在构建操作后自动部署文件,它不起作用。我是Maven的新手。 我应该在运行配置中设置一些内容吗?我设定了安装价值的目标。 pom。xml 此外,我更改了设置。路径中的xml文件。平方米/设置。xml。 设置。xml

  • 21:30:01 Gradle build完成,但在34秒内出现2个错误 错误:打包APK/home/daniela/androidstudioprojects/conectasp/app/build/outputs/APK/app-debug-unaligne期间文件重复。APK错误:任务“:app:packagedebug”执行失败。 APK meta-inf/license.txt文件1:/

  • 我从原型io开始。fabric8:camel cxf代码是第一个原型,但我无法使用以下maven命令进行部署,因为没有定义fabric8。mvn-P!Spring Boot清理编译-X fabric8:deploy-DskipTests=true-Dfabric8。upload=true-Dfabric8。约洛基亚尔=http://10.191.231.12:8181/jolokia 然后我修改了

  • 我正在使用Spring 4.0.0. RELEASE,Spring数据共享1.7.0. M1,Spring Hateoas 0.8.0. RELEASE 我的资源是一个简单的POJO: 我的资源汇编程序将User对象转换为UserResources对象: 在我的UserController我想检索

  • 我按照下一页上的说明将primefaces jar库转换为OSGi插件,并将其添加为OSGi捆绑包中必需的插件之一。http://www.vogella.com/tutorials/EclipseJarToPlugin/article.html#jar-files-without-osgi-meta-data 然而,当我部署OSGi捆绑包,我<有限公司 这是我得到的堆栈跟踪,以防错误是由于其他原因

  • 问题内容: 我只想检索UserAccount类中的某些列,所以我有以下代码: 我得到了空值作为回报。但是,如果我注释掉setProjections,我将获得具有所有属性的用户。在这种情况下,如何正确使用setProjection? 问题答案: 它返回一个Object数组,因此代码应为: