0

我正在尝试让 51Degrees.mobi 与我的 Maven、JSF 和 Java 项目一起工作,但是到目前为止我还没有运气。我已经从http://51degrees.mobi/Support/Documentation/Java.aspx下载了 2 个 jars并按照说明进行操作。我现在有一个看起来像这样的过滤器

    import fiftyone.mobile.detection.BaseDeviceInfo;
    import fiftyone.mobile.detection.Provider;
    import fiftyone.mobile.detection.binary.BinaryException;
    import fiftyone.mobile.detection.binary.Reader; 

     public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {

    HttpServletRequest httpRequest = (HttpServletRequest) request;
    String s = httpRequest.getHeader("user-agent");

    //Create a Provider object
      Provider p;
    try {
        p = Reader.create();


    } catch (BinaryException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


    //Provider p = Reader.create(PATH_TO_PREMIUM_DATA);


      //Read in a HttpServletRequest or User Agent String
      BaseDeviceInfo b = p.getDeviceInfo(s);

      //Get the value of a property
      String result = b.getFirstPropertyValue("IsMobile");

      //Check the property value
      if(result.equals("True")){
        System.out.println("This is mobile");
      }

      if(result.equals("False")){
        System.out.println("This is not mobile");
      }

      //Before exiting your application, ensure you dispose of the Provide to
      //release it's resources such as it's thread pool
       p.destroy();
   }   

那不会引发任何错误。从网上看,我发现了我必须添加到 pom 文件中的依赖关系,我拥有它

     <dependency><!-- Start 51Degrees.mobi dependencies -->
        <groupId>mobi.51degrees</groupId>
        <artifactId>detection</artifactId>
        <version>2.1.15.1</version>
    </dependency><!-- End 51Degrees.mobi dependencies -->

文件本身再次没有引发错误,但是当我在目录中使用 mvn clean install 时,出现以下错误

     [ERROR] COMPILATION ERROR :
     [INFO] -------------------------------------------------------------
     [ERROR] \ea\portals\redirectionportal\src\main\java\com\filters\MyFilter.java:[18,32]          error: package fiftyone.mobile.detection does not exist

     [ERROR] \ea\portals\redirectionportal\src\main\java\com\filters\MyFilter.java:[19,32] error: package fiftyone.mobile.detection does not exist

     [ERROR] \ea\portals\redirectionportal\src\main\java\com\filters\MyFilter.java:[20,39] error: package fiftyone.mobile.detection.binary does not exist

     [ERROR] \ea\portals\redirectionportal\src\main\java\com\filters\MyFilter.java:[21,39] error: package fiftyone.mobile.detection.binary does not exist

     [ERROR] \ea\portals\redirectionportal\src\main\java\com\filters\MyFilter.java:[45,4] error: cannot find symbol

     [ERROR] \ea\portals\redirectionportal\src\main\java\com\filters\MyFilter.java:[47,7] error: cannot find symbol

     [ERROR] \ea\portals\redirectionportal\src\main\java\com\filters\MyFilter.java:[50,11] error: cannot find symbol

     [ERROR] \ea\portals\redirectionportal\src\main\java\com\filters\MyFilter.java:[60,4] error: cannot find symbol

     [INFO] 8 errors
     [INFO] -------------------------------------------------------------
     [INFO] ------------------------------------------------------------------------
     [INFO] BUILD FAILURE
     [INFO] ------------------------------------------------------------------------
     [INFO] Total time: 3.730s
     [INFO] Finished at: Wed Nov 14 12:45:35 GMT 2012
     [INFO] Final Memory: 16M/39M
     [INFO] ------------------------------------------------------------------------
     [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.1:compile (default-         compile) on project redirectionportal: Compilation failure: Compilation failure:
     [ERROR] \ea\portals\redirectionportal\src\main\java\com\filters\MyFilter.java:[18,32]          error: package fiftyone.mobile.detection does not exist
     [ERROR]
     [ERROR] \ea\portals\redirectionportal\src\main\java\com\filters\MyFilter.java:[19,32] error: package fiftyone.mobile.detection does not exist
     [ERROR]
     [ERROR] \ea\portals\redirectionportal\src\main\java\com\filters\MyFilter.java:[20,39] error: package fiftyone.mobile.detection.binary does not exist
     [ERROR]
     [ERROR] \ea\portals\redirectionportal\src\main\java\com\filters\MyFilter.java:[21,39] error: package fiftyone.mobile.detection.binary does not exist
     [ERROR]
     [ERROR] \ea\portals\redirectionportal\src\main\java\com\filters\MyFilter.java:[45,4] error: cannot find symbol
     [ERROR]
     [ERROR] \ea\portals\redirectionportal\src\main\java\com\filters\MyFilter.java:[47,7] error: cannot find symbol
     [ERROR]
     [ERROR] \ea\portals\redirectionportal\src\main\java\com\filters\MyFilter.java:[50,11] error: cannot find symbol
     [ERROR]
     [ERROR] \ea\portals\redirectionportal\src\main\java\com\filters\MyFilter.java:[60,4] error: cannot find symbol
     [ERROR] -> [Help 1]
     [ERROR]
     [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
     [ERROR] Re-run Maven using the -X switch to enable full debug logging.
     [ERROR]
     [ERROR] For more information about the errors and possible solutions, please read the following articles:
     [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

有人有想法么?

4

3 回答 3

2

根据规则,我声明我在 51Degrees.mobi 作为一名 Java 开发人员工作。如果您解决了您的问题,我不确定此时查看页面?所以我想我会添加更多信息。

首先,如果您有两个 Jar 文件,那么您使用的是 2.1.16.1 而不是 2.1.15.1,尽管这不会直接影响您的问题,但我想我会说清楚:)。

此外,在发布当前答案后,最近通过 maven 中央存储库提供了 51Degrees.mobi 的 2.1.16.1 版解决方案。所以现在你要做的就是把这个依赖添加到你的 pom 中:

 <dependency><!-- Start 51Degrees.mobi dependencies -->
    <groupId>net.sourceforge.fiftyone-java</groupId>
    <artifactId>51Degrees.mobi.detection.core</artifactId>
    <version>2.1.16.1</version>
</dependency><!-- End 51Degrees.mobi dependencies -->

如果您希望使用我们的第二个 jar,只需将“core”替换为“webapp”即可。

于 2012-11-30T11:37:53.220 回答
1

确保您51Degrees.mobi的存储库中有(本地或远程)。我在 Maven 公共存储库中进行了快速搜索,但找不到它。

如果 jar 在您的本地文件夹中的某个位置。您可以使用

mvn install:install-file -Dfile=your-artifact-1.0.jar \
                         [-DpomFile=your-pom.xml] \
                         [-Dsources=src.jar] \
                         [-Djavadoc=apidocs.jar] \
                         [-DgroupId=org.some.group] \
                         [-DartifactId=your-artifact] \
                         [-Dversion=1.0] \
                         [-Dpackaging=jar] \
                         [-Dclassifier=sources] \
                         [-DgeneratePom=true] \
                         [-DcreateChecksum=true]

检查链接Maven 安装插件

于 2012-11-14T12:59:39.143 回答
1

尝试在您的存储库中找到该 jar:该 jar 应位于此处:

~/.m2/repository/mobi/51degrees/detection/2.1.15.1/

如果在那里找到它,请检查它是否包含包下的类

fiftyone.mobile.detection

- 更新 -

如果您没有找到这个 jar,您可以使用以下选项之一:

  1. 使用“系统”范围依赖——它使你的构建平台/环境依赖,所以我不推荐它,尽管它是最简单的方法。

  2. 使用mvn install:install-file它会将您的 jar 放入您的本地 maven 存储库。它比第一种方法好得多,但是您仍然需要在每个本地环境中运行 maven 之前使用此命令/您的本地存储库被清除...

  3. 在服务器上的某处维护您自己的 maven 存储库,映射 maven 以使用此存储库。这是迄今为止我所知道的最好的方法。最好的办法是使用存储库代理,如“Nexus”或“Artifactory”。在最坏的情况下,您可以将存储库创建为普通文件系统,并使其可以通过 Web 服务器(如 apache)访问。在此存储库中,您将能够存储公共 maven 存储库中不存在的第三方 jar、您自己的工件,或者可能不是免费/开源的工件,因此无法在公共 maven 存储库中维护(例如您可以使用的商业软件)。

希望这可以帮助

于 2012-11-14T13:08:00.570 回答