文档章节

java-cef编译测试

penngo
 penngo
发布于 2017/09/15 16:49
字数 899
阅读 1.5K
收藏 0

精选30+云产品,助力企业轻松上云!>>>

官方地址
https://bitbucket.org/chromiumembedded/java-cef

下载地址
https://bitbucket.org/chromiumembedded/java-cef/downloads/

https://github.com/chromiumembedded/java-cef

chromium各个平台编译好的版本下载地址
http://opensource.spotify.com/cefbuilds/index.html

文章发布时chromium版本:CEF 3.3163.1663.g416ffeb / Chromium 61.0.3163.79

本文参考自官方文档:https://bitbucket.org/chromiumembedded/java-cef/wiki/BranchesAndBuilding

编译代码
支持在Windows,Linux和Mac OS x下64位java下编译,32位可能可以被编译,但是未测试过。
需要安装的软件:

CMake >= 2.8.12.2版本
Git.
Java  1.7 或 1.8版本
Python >=2.6(2.x版本系列) (不支持3.x).

Windows平台:
当前版本的JCEF使用Visual Studio 2015来编译和运行,使用其它版本的开发工具可能会存在编译或运行错误。

使用Git下载

# The JCEF source code will exist at `/path/to/java-cef/src`
cd /path/to/java-cef
git clone https://bitbucket.org/chromiumembedded/java-cef.git src

编译指南
1. 编译chromium(CEF)生成本地代码(Windows下DLL,Linux下so):运行CMake生成特定平台的本地代码. 如果需要生成Release版本的jcef和jcef_helper,请设置CMaker的额外输出参数。 

Windows: 生成64位 VS2015项目工程.

# Enter the JCEF source code directory.
cd /path/to/java-cef/src

# Create and enter the `jcef_build` directory.
# The `jcef_build` directory name is required by other JCEF tooling
# and should not be changed.
mkdir jcef_build && cd jcef_build

# Windows: Generate 64-bit VS2015 project files.
cmake -G "Visual Studio 14 Win64" ..
# Open jcef.sln in Visual Studio
# - Select Build > Configuration Manager and change the "Active solution configuration" to "Release"
# - Select Build > Build Solution.
0> Failed to fetch file gs://chromium-clang-format/6ddedd571c56b8c184f30a3c1fc36984e8c10ccd for tools/buildtools/win/clang-format.exe, skipping. [Err: Traceback (most recent call last):
  File "D:\project\java\java-cef\src\tools\buildtools\gsutil.py", line 9, in <module>
    import argparse
ImportError: No module named argparse

有可能会因为网络原因出现上边的下载错误,把gs://chromium-clang-format/6ddedd571c56b8c184f30a3c1fc36984e8c10ccd改为https://storage.googleapis.com/chromium-clang-format/6ddedd571c56b8c184f30a3c1fc36984e8c10ccd,然后浏览器下载,下载完成后再把文件名改为clang-format.exe放到tools目录即可。

使用vs2015打开 jcef.sln


生成->配置管理器 ->活动解决方案配置,修改为"Release"


生成->生成解决方案

2. 编译JCEF的java代码(java调用chromium代码).

cd /path/to/java-cef/src/tools
compile.bat win64

3. 运行run.[bat|sh]命令测chromium,测试代码中带有两个例子simple(java/simple/MainFrame.java)或detailed(java/detailed/MainFrame.java),可以在命令行中添加simple或detailed参数来运行不同的例子代码

cd /path/to/java-cef/src/tools
run.bat win64 Release detailed

打包jar指南
把调用chromium的java代码生成jar包。

cd /path/to/java-cef/src/tools
make_distrib.bat win64

新建eclipse项目
把上一边生成的jar和dll相关文件放进项目中,也可以放进操作系统的库目录中。
我这里的代码目录如下:

package tests.simple;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.lang.reflect.Field;

import javax.swing.JFrame;
import javax.swing.JTextField;

import org.cef.CefApp;
import org.cef.CefApp.CefAppState;
import org.cef.CefClient;
import org.cef.CefSettings;
import org.cef.OS;
import org.cef.browser.CefBrowser;
import org.cef.handler.CefAppHandlerAdapter;

public class MainFrame extends JFrame {
    private static final long serialVersionUID = -5570653778104813836L;
    private final JTextField address_;
    private final CefApp cefApp_;
    private final CefClient client_;
    private final CefBrowser browser_;
    private final Component browerUI_;

    private MainFrame(String startURL, boolean useOSR, boolean isTransparent) {
        CefApp.addAppHandler(new CefAppHandlerAdapter(null) {
            @Override
            public void stateHasChanged(org.cef.CefApp.CefAppState state) {
                // Shutdown the app if the native CEF part is terminated
                if (state == CefAppState.TERMINATED) System.exit(0);
            }
        });
        CefSettings settings = new CefSettings();
        settings.windowless_rendering_enabled = useOSR;
        cefApp_ = CefApp.getInstance(settings);
        client_ = cefApp_.createClient();
        browser_ = client_.createBrowser(startURL, useOSR, isTransparent);
        browerUI_ = browser_.getUIComponent();

        address_ = new JTextField(startURL, 100);
        address_.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                browser_.loadURL(address_.getText());
            }
        });

        getContentPane().add(address_, BorderLayout.NORTH);
        getContentPane().add(browerUI_, BorderLayout.CENTER);
        pack();
        setSize(800, 600);
        setVisible(true);

        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                CefApp.getInstance().dispose();
                dispose();
            }
        });
    }
    
    /**
     * 添加DLL库路径
     * @param libraryPath
     */
    private static void addLibraryDir(String libraryPath){
    	try{
    		Field userPathsField = ClassLoader.class.getDeclaredField("usr_paths");  
            userPathsField.setAccessible(true);  
            String[] paths = (String[]) userPathsField.get(null);  
            StringBuilder sb = new StringBuilder();  
            for (int i = 0; i < paths.length; i++) {  
                if (libraryPath.equals(paths[i])) {  
                    continue;  
                }  
                sb.append(paths[i]).append(';');  
            }  
            sb.append(libraryPath);  
            System.setProperty("java.library.path", sb.toString());  
            final Field sysPathsField = ClassLoader.class.getDeclaredField("sys_paths");  
            sysPathsField.setAccessible(true);  
            sysPathsField.set(null, null);  
    	}
    	catch(Exception e){
    		e.printStackTrace();
    	}
    }

    public static void main(String[] args) {
    	//添加DLL库
    	MainFrame.addLibraryDir("D:\\project\\java\\javacef\\lib\\win64");
        new MainFrame("https://my.oschina.net/penngo/blog", OS.isLinux(), false);
    }
}

penngo

penngo

粉丝 84
博文 124
码字总数 73330
作品 3
广州
高级程序员
私信 提问
加载中
请先登录后再评论。
Windows下编译jcef

依赖软件参考 本文参考官方网站上的jcef编译过程 编译成功的环境如下: windows 10 64 bit JDK 1.8.0_121 64 bit Python 2.7.13 git version 2.12.1.windows.1 cmake version 3.12.0-rc1 Vis...

osc_ggrquk6k
2018/07/31
2
0
在最新的Raspberry Pi 上编译 Java-CEF

我有一个项目需要在最新的Raspberry Pi 3 Debain上运行 Java-CEF。目前Java-CEF官方提供在Linux x64 等平台运行的已经编译的程序,但ARM没有打包好的程序。如果您有时间和兴趣,我可付给你一...

steveneo
2016/08/24
487
0
怎么利用 ChromeDriver 和 Selenium对 CEF应用进行自动化测试-java实现

Overview ChromeDriver and Selenium are tools for automated testing of Chromium-based applications. The tests themselves can be written in a number of languages including Java, J......

osc_kf98pg0d
01/20
8
0
怎么利用 ChromeDriver 和 Selenium对 CEF应用进行自动化测试-java实现

Overview ChromeDriver and Selenium are tools for automated testing of Chromium-based applications. The tests themselves can be written in a number of languages including Java, J......

osc_9co6rlkn
02/08
2
0
命令行生成jar包

1.编写java代码,保存为HelloWorld.java package test;public class HelloWorld{public static void main(String[] args){System.out.println("hello,world");}} 2.执行javac HelloWorld.ja......

osc_8b50jzrj
2018/07/04
2
0

没有更多内容

加载失败,请刷新页面

加载更多

521我发誓读完本文,再也不会担心Spring配置类问题了

当大潮退去,才知道谁在裸泳。关注公众号【BAT的乌托邦】开启专栏式学习,拒绝浅尝辄止。本文 https://www.yourbatman.cn 已收录,里面一并有Spring技术栈、MyBatis、中间件等小而美的专栏供...

osc_72k9vb4y
28分钟前
27
0
微服务思考(01):什么是微服务?微服务的优势和劣势

一、单体应用 在软件开发早期阶段,大家都在一个应用系统上开发。各个业务模块之间耦合也比较紧密。软件发布也是整体发布,或者对软件进行打包发布和部署,比如java可以打包成war部署。测试也...

osc_bcvwusz2
29分钟前
16
0
Halcon一维测量1D Measuring解析

一维测量(也叫一维计量或卡尺)的概念非常直观。沿着一个预定的区域(主要是垂直于RIO感兴趣区域的方向) 边缘的位置。这里的边缘为从暗到亮或从亮到暗的过渡。 基于提取的边缘,可以测量零件...

osc_xs2d5ls9
30分钟前
19
0
U盘+grub2安装centos8实战

1. U盘准备 这里的U盘也可以换成硬盘 grub2安装一直失败,怀疑U盘坏了,下面命令修复了一下 [root@host2 ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsda ...

osc_43xj61td
30分钟前
19
0
遇见SQL(2)

SQL自学笔记 约束 1.0概念及分类 2.0非空约束 3.0 唯一约束 4.0 主键约束 自动增长 5.0 外键约束 级联操作 多表关系 三种情况概述 数据库的备份和还原 多表查询 1.0 内连接查询 隐式内连...

osc_4eht81t7
32分钟前
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部