开发工具分享
  • 首页
  • 计算科学
  • 文化旅游
  • 项目和网站
    • OSSEZ 计算技术
    • USRealEstate 社区
    • 地区文化
    • CWIKI.US
    • BUG.OSSEZ.COM
    • RSS.OSSEZ.COM
CWIKIUS.CN
一个有独立思考和温度的清新站
Confluence

Confluence 6 针对 key "cp_" 或 "cps_" 的 "Duplicate Entry" 问题解决

如果你遇到了下面的错误信息,例如: com.atlassian.confluence.importexport.ImportExportException: Unable to complete import because the data does not match the constraints in the Confluence schema. Cause: MySQLIntegrityConstraintViolationException: Duplicate entry '1475804-Edit' for key 'cps_unique_type' 上面表示在 XML 的备份文件中恢复的数据库没有正确的权限,通常是因为使用了第三方的插件的原因。这个问题在 Confluence 3.5.2 的后续版本中已经修复了,请参考 CONF-22123 中的说明。如果你的版本已经是新的版本了,你的导出文件可能需要手动进行修改来删除掉重复权限实例,或者整个记录都需要被删除。下面的 SQL 可以被用来找到这个记录。 SELECT * FROM CONTENT_PERM WHERE USERNAME IS NULL AND GROUPNAME IS NULL; SELECT cp.ID, cp.CP_TYPE, cp.USERNAME, cp.GROUPNAME, cp.CPS_ID, cp.CREATOR, cp.CREATIONDATE, cp.LASTMODIFIER, cp.LASTMODDATE FROM CONTENT_PERM cp WHERE cp.USERNAME IS NOT NULL AND cp.GROUPNAME IS NOT NULL; SELECT cps1.ID, cps1.CONTENT_ID, cps1.CONT_PERM_TYPE FROM CONTENT_PERM_SET cps1, CONTENT_PERM_SET cps2 WHERE cps1.ID <> cps2.ID AND cps1.CONTENT_ID = cps2.CONTENT_ID AND cps1.CONT_PERM_TYPE = cps2.CONT_PERM_TYPE ORDER BY cps1.CONTENT_ID, cps1.CONT_PERM_TYPE, cps1.CREATIONDATE ASC; SELECT cp.ID, cp.CP_TYPE, cps.CONTENT_ID, (SELECT scps.ID FROM CONTENT_PERM_SET scps WHERE scps.CONTENT_ID = cps.CONTENT_ID AND scps.CONT_PERM_TYPE = cp.CP_TYPE) AS suggested_cps_id FROM CONTENT_PERM cp, CONTENT_PERM_SET cps WHERE cp.CPS_ID = cps.ID AND cp.CP_TYPE <> cps.CONT_PERM_TYPE; SELECT DISTINCT cp1.ID, cp1.CP_TYPE, cp1.USERNAME, cp1.GROUPNAME, cp1.CPS_ID, cp1.CREATOR, cp1.CREATIONDATE, cp1.LASTMODIFIER, cp1.LASTMODDATE FROM CONTENT_PERM cp1, CONTENT_PERM_SET cps1, CONTENT_PERM cp2, CONTENT_PERM_SET cps2 WHERE cp1.CPS_ID = cps1.ID AND cp2.CPS_ID = cps2.ID AND cp1.ID <> cp2.ID AND cps1.CONTENT_ID = cps2.CONTENT_ID AND cp1.CP_TYPE = cp2.CP_TYPE AND cp1.USERNAME = cp2.USERNAME ORDER BY cp1.CPS_ID, cp1.CP_TYPE, cp1.USERNAME, cp1.CREATIONDATE; SELECT DISTINCT cp1.ID, cp1.CP_TYPE, cp1.USERNAME, cp1.GROUPNAME, cp1.CPS_ID, cp1.CREATOR, cp1.CREATIONDATE, cp1.LASTMODIFIER, cp1.LASTMODDATE FROM CONTENT_PERM cp1, CONTENT_PERM_SET cps1, CONTENT_PERM cp2, CONTENT_PERM_SET cps2 WHERE cp1.CPS_ID = cps1.ID AND cp2.CPS_ID = cps2.ID AND cp1.ID <> cp2.ID AND cps1.CONTENT_ID = cps2.CONTENT_ID AND cp1.CP_TYPE = cp2.CP_TYPE AND cp1.GROUPNAME = cp2.GROUPNAME ORDER BY cp1.CPS_ID, cp1.CP_TYPE, cp1.GROUPNAME, cp1.CREATIONDATE; SELECT * FROM CONTENT_PERM_SET WHERE ID NOT IN (SELECT DISTINCT CPS_ID FROM CONTENT_PERM); 删除所有找到的记录,然后尝试重新导出。   https://www.cwiki.us/display/CONFLUENCEWIKI/Troubleshooting+XML+backups+that+fail+on+restore

2018年06月26日 0Comments 1012Browse 0Like Read more
Confluence

Confluence 6 尝试从 XML 备份中恢复时解决错误

错误可能是因为数据库突然不可访问而产生。也有可能是你备份文件有问题,你需要找到你 XML 备份文件中违反数据库规定的记录修改这个记录后再创建一个新的 XML 备份: 在实例开始恢复的时候,请按照下面的指南来禁用批量更新(针对简单的问题解决),启用 SQL 日志和SQL 查询日志,通过在 Enabling Detailed SQL Logging 页面中描述的参数(with parameters)。 一旦上面 3 个修改都完成了后,重启 Confluence。 尝试另外一次恢复。 当你在恢复的时候失败了,检查你的日志文件找到不能用 XML 转换为记录的地方。针对使用 Confluence 分发包的用户,检查你 Confluence 的安装目录下的 /logs/ 目录,检查 atlassian-confluence.log 和 catalina.out 文件。正确的文件应当包含有 SQL 的调试日志输出。 滚动到文件的最下端,找到相关的错误信息,这个信息应该是与数据库有关了,例如下面的错误信息: 2006-07-13 09:32:33,372 ERROR [confluence.importexport.impl.ReverseDatabinder] endElement net.sf.hibernate.exception.ConstraintViolationException: could not insert: [com.atlassian.confluence.pages.Attachment#38] net.sf.hibernate.exception.ConstraintViolationException: could not insert: [com.atlassian.confluence.pages.Attachment#38] ... Caused by: java.sql.SQLException: ORA-01400: cannot insert NULL into ("CONFUSER"."ATTACHMENTS"."TITLE") at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288) 上面的示例标记了在你附件表中 ID = 38 的记录有一个空的标题。 进入到你服务器创建的备份文件中,你应该有你数据库使用的备份。如果你没有这个的话,使用DBA 数据库管理工具创建一个数据库备份。 打开一个 DBA 数据库管理工具,然后连接到原始的数据库实例,在数据库中找到需要的表。你需要修改这个表中的一些记录。 希望找到数据库中是哪个表的那个对象,下面对应了内容存储的表: 页面,博客页面,评论(Pages, blogposts, comments) --> CONTENT 表 附件(attachments )--> ATTACHMENTS 表 希望跟着上面示例中出现的错误,进入到附件表中,找到对象的 ID 为 38 的记录。这个记录应该是一个 null 的标题。使用其他附件中使用的标题为指南,你可能还会遇到其他的问题,请根据问题进行修改。 一旦上面的修改完成了,重新创建 XML 备份。 导入备份到新的版本中。 如果导入成功了,你需要将你 SQL 修改的日志(SQL logging)重新改回来,你可以重新启用 批量更新(针对简单的问题解决),禁用 SQL 日志和SQL 查询日志。 重启 Confluence https://www.cwiki.us/display/CONFLUENCEWIKI/Troubleshooting+XML+backups+that+fail+on+restore

2018年06月26日 0Comments 988Browse 0Like Read more
Confluence

Confluence 6 XML 备份恢复失败的问题解决

XML 站点备份仅仅针对新数据库恢复的时候是必要的。 Upgrading Confluence,Setting up a test server 或者 Production Backup Strategy 最好还是通过备份 SQL 的方法来备份。 在创建和导入备份的时候出现了错误? 在创建备份的时候出现了错误 请参考 Troubleshooting failed XML site backups 页面 在导入备份的时候出现了错误 请参考下面的策略 常见问题 希望删除和导入一个小站点: 进入  > 基本配置(General Configuration) > 备份和恢复(Backup and Restore)。 选择 选择文件(Choose File)然后在本地磁盘上浏览站点导出文件。 取消选择 重构索引(Build Index)如果你希望重构你的索引为最新的存储。 选择 上传和恢复(Upload and Restore)。 从恢复目录中导入一个站点: 拷贝你的导出文件到 <confluence-home>/restore. (如果你不能确定这个目录在那里的话,你可以进入备份和恢复(Backup and Restore)界面,会告诉你目录的存储路径) 进入  > 基本配置(General Configuration) > 备份和恢复(Backup and Restore)。 在 从 Confluence Home 目录中恢复备份(Restore a backup from the Confluence Home Directory)中选择你的导出备份文件。 取消选择 重构索引(Build Index)如果你希望重构你的索引为最新的存储。 选择 恢复(Restore)。   https://www.cwiki.us/display/CONFLUENCEWIKI/Troubleshooting+XML+backups+that+fail+on+restore

2018年06月26日 0Comments 847Browse 0Like Read more
Confluence

Confluence 6 找到在创建 XML 备份的时候出现的错误

错误可能是因为数据库突然不可访问而产生。如果你在你的日志中看到了错误  'Couldn't backup database data' ,这个指南将会帮助你更正这个错误。我们强烈推荐你备份 Confluence 数据库和 Confluence 的 home 目录这种备份方式来备份你的 Confluence 服务器。你可以使用 Restoring Data from other Backups 的方法来恢复你的备份,如果需要的话。如果你对数据库 SQL 并不熟悉的话,我们建议你联系你的数据库管理员来获得相关的帮助。 完美解决方案 Production Backup Strategy 备份方案是完美并且最有效的备份方案。如果你在备份 XML 方式遇到了问题,不管是因为内存溢出还是下面描述的问题,我们建议你使用 SQL 的备份方案为你可选的备份方案。 识别并更正问题 希望找到数据库备份的错误或者中断的原因,修改状态信息的日志,能够让你获得更多的有用的信息,然后根据日志修改每一个数据库的配置: 停止 Confluence。 如果你使用的是外部数据库,请使用数据库管理工具来创建一个手动的数据库备份。 备份你的 Confluence  home 目录。你可以使用这个数据库的 SQL 备份来恢复你的整个站点。 打开 my_confluence_install/confluence/WEB-INF/classes/log4j.properties然后在文件的后面添加下面的行,并保存。 log4j.logger.com.atlassian.confluence.importexport.impl.XMLDatabinder=DEBUG, confluencelog log4j.additivity.com.atlassian.confluence.importexport.impl.XMLDatabinder=false 找到你的 atlassian-confluence.log。移动或者删除所有已经存在的 Confluence 日志,这个能够让你更加容易找到输出的错误信息。 重启 Confluence 并且登录。 开始备份,并等待错误出现。 你必须现在就要查看你的日志文件来找到是哪一个对象没有被正确转换为 XML 格式。打开 confluence-home/logs/atlassian-confluence.log,并滚动到文件的末尾。 进行查找 'ObjectNotFoundException'。你应该能够看到类似下面的错误: 01 2005-08-24 00:00:33,743 DEBUG [DOCPRIV2:confluence.importexport.impl.XMLDatabinder] Writing object: com.atlassian.confluence.core.ContentPermission with ID: 5 to XML. 02 2005-08-24 00:00:33,743 DEBUG [DOCPRIV2:confluence.importexport.impl.XMLDatabinder] Writing property: type 03 2005-08-24 00:00:33,743 DEBUG [DOCPRIV2:confluence.importexport.impl.XMLDatabinder] Writing property: group 04 2005-08-24 00:00:33,743 DEBUG [DOCPRIV2:confluence.importexport.impl.XMLDatabinder] Writing property: expiry 05 2005-08-24 00:00:33,743 DEBUG [DOCPRIV2:confluence.importexport.impl.XMLDatabinder] Writing property: content 06 [DOCPRIV2:ERROR] LazyInitializer - Exception initializing proxy <net.sf.hibernate.ObjectNotFoundException: No row with the given identifier exists: 2535, 07 of class: com.atlassian.confluence.core.ContentEntityObject>net.sf.hibernate.ObjectNotFoundException: 08 No row with the given identifier exists: 2535, of class: com.atlassian.confluence.core.ContentEntityObject 09 at net.sf.hibernate.ObjectNotFoundException.throwIfNull(ObjectNotFoundException.java:24) 10 at net.sf.hibernate.impl.SessionImpl.immediateLoad(SessionImpl.java:1946) 11 at net.sf.hibernate.proxy.LazyInitializer.initialize(LazyInitializer.java:53) 12 at net.sf.hibernate.proxy.LazyInitializer.initializeWrapExceptions(LazyInitializer.java:60) 13 at net.sf.hibernate.proxy.LazyInitializer.getImplementation(LazyInitializer.java:164) 14 at net.sf.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:108) 15 at com.atlassian.confluence.core.ContentEntityObject$$EnhancerByCGLIB$$cc2f5557.hashCode(<generated>) 16 at java.util.HashMap.hash(HashMap.java:261) 17 at java.util.HashMap.containsKey(HashMap.java:339) 18 at com.atlassian.confluence.importexport.impl.XMLDatabinder.toGenericXML(XMLDatabinder.java:155) 打开一个数据库管理工具,例如 DbVisualizer 然后连接到你的数据库实例。找到的表名字,你需要修改这些表中的某些记录。 希望找到是哪个数据表出现了错误,打开 catalina.out,找到的异常的第一行。这里有错误说是在写入 ContentPermission id 为 5 的对象到 XML 的时候出现了错误。换句话说,这个意思就是在主键为 5 的行需要更正,这个在表 CONTENTLOCK 中。希望找到数据库中是哪个表的那个对象,下面对应了内容存储的表: 页面,博客页面,评论(Pages, blogposts, comments) --> CONTENT 表 附件(attachments )--> ATTACHMENTS 表 有关更多的信息可以在页面 schema documentation 中找到。 现在你必须找到不正确记录在表中的主键。在这个例子中,你可以看到在错误的第一行定义的主键为 5。 每一个属性都被写入到列中,因此最后写入的属性有不正确的值。当写入的时候出现了异常,抛出了 CONTENT (line 5) 的值 2535 (line 6)。现在你已经知道了列和值。值 2535 为一个一个不再存在的实体 ID。 使用数据库管理工具,登录 Confluence 数据库。找到相关的表然后更正实体。检查表中其他行的默认值,可能为 null ,0 或者 blank。使用默认的值来重写不正确的值。 重启 Confluence。 尝试继续进行备份。如果备份还是失败了,你也找不到合适的信息,请使用下面的连接 lodge a support request 提交给我们进行解决,请提供完整的日志信息。 "Duplicate Key" 相关的问题解决 如果你在备份的时候遇到了下面的错误: could not insert: [bucket.user.propertyset.BucketPropertySetItem#bucket.user.propertyset.BucketPropertySetItem@a70067d3]; SQL []; Violation of PRIMARY KEY constraint 'PK_OS_PROPERTYENTRY314D4EA8'. Cannot insert duplicate key in object 'OS_PROPERTYENTRY'.; nested exception is java.sql.SQLException: Violation of PRIMARY KEY constraint 'PKOS_PROPERTYENTRY_314D4EA8'. Cannot…

2018年06月25日 0Comments 1056Browse 0Like Read more
Confluence

Confluence 6 XML 备份失败的常见问题

是否是导出的时间超时导致了内存错误? 如果你的站点是一个大型站点,你可能需要临时的增加 Confluence 的可用内存。请查看 如何诊断内存错误并增加内存?.   https://www.cwiki.us/display/CONFLUENCEWIKI/Troubleshooting+failed+XML+site+backups

2018年06月25日 0Comments 929Browse 0Like Read more
Confluence

Confluence 6 XML 备份失败的问题解决

XML 站点备份仅仅被用于整合到一个新的数据库。设置一个测试服务器 或者 创建一个可用的备份策略 相对 XML 备份来说是更合适的策略。 相关页面: Enabling detailed SQL logging 在创建和导入备份的时候出现了错误? 在创建备份的时候出现了错误 请参考下面的策略 在导入备份的时候出现了错误 请参考 Troubleshooting XML backups that fail on restore 页面   https://www.cwiki.us/display/CONFLUENCEWIKI/Troubleshooting+failed+XML+site+backups

2018年06月25日 0Comments 1003Browse 0Like Read more
Confluence

Confluence 6 重新获得附件指南

每一个文件在恢复上传到 Confluence 的时候必须单独重命名,你可以通过下面说明的 3 个方法中选择一个进行操作: 选择 A - 通过文件名恢复附件 如果你知道你需要恢复的每一个文件名,尤其是你希望仅仅恢复一些文件: 解压备份目录然后打开 entities.xml。 搜索 entities.xml 中的文件名然后找到附件对象相关的文件名。定义页面和附件 ID。 从 entities.xml 中使用页面和附件 id,进入附件目录,通过页面 id 找到文件所在的附件 id。 从命名文件为原始的文件名然后进行测试。 针对每一个文件重复上面的步骤。 希望导入每一个文件备份到 Confluence 中,上传原始页面,通过 Confluence 关联文件。 选择 B - 通过页面恢复附件 如果你仅仅希望针对一些页面恢复附件: 解压备份目录然后打开 entities.xml。 搜索 entities.xml 中的文件名然后找到附件对象相关的文件名。定义页面 ID。 进入到附件目录,然后按照页面 ID 打开目录。附件目录中的每个文件必须要重命名。 针对附件的对象搜索 entities.xml 找到页面 ID。每一页面中的附件对象是有附件 id 和名称。 重命名文件,然后附加附件 id 到原始的文件名上然后进行测试。 针对每一个文件重复上面的步骤。 希望导入每一个文件备份到 Confluence 中,上传原始页面,通过 Confluence 关联文件。 选择 C - 恢复所有附件 如果你有小数量的备份,但是你希望恢复大部分或者所有的附件: 下面的进程仅仅用于 空间(space)的导出文件。站点 xml 备份不需要页面 id 被手动更新,基于页面 id 的选项。 解压备份目录然后打开 entities.xml。 进入到附件目录,然后按照页面 ID 打开目录。附件目录中的每个文件必须要重命名。 针对附件的对象搜索 entities.xml 找到页面 ID。每一页面中的附件对象是有附件 id 和名称。 重命名文件,然后附加附件 id 到原始的文件名上然后进行测试。 找到下一个附件 id 然后重命名。针对目录中每一个文件重复上面的操作。 一旦当前目录中的所有文件被重命名为原始文件名,在 entities.xml 中找到页面 id,例如目录名称。通过页面 id 找到页面对象和找到页面的标题。 重命名目录中的页面标题然后移动到下一个目录。针对没有重命名的目录重复操作。 希望导入每一页面到 Confluence,上传原始页面通过 Confluence 中的附件文件。   https://www.cwiki.us/display/CONF6ZH/Retrieving+File+Attachments+from+a+Backup

2018年06月24日 0Comments 829Browse 0Like Read more
Confluence

Confluence 6 如何备份存储文件和页面信息

备份的 ZIP 文件包含有 entities.xml,这个 XML 文件包含有 Confluence 的所有页面内容和存储附件的目录。 备份 Zip 文件结构 页面的附件是存储在附件存储目录中的,通过页面和附件 ID 进行识别。下面是存储的示例: Listing for test-2006033012_00_00.zip \attachments\98\10001 \attachments\98\10002 \attachments\99\10001 entities.xml 在附件存储目录中,每一个目录的数字定义了一个页面,附件的 ID 号码定义了一个附件。目录的号码为页面的 ID,同时文件的号码为附件的 ID。例如,文件 \attachments\98\10001 是一个附件,这个附件对应的页面 id 为 98 同时附件的 id 为 10001。你可以在 entities.xml 中进行读取来获得所有附件的原始附件名称。Entities.xml 同时也连接 页面 id 到页面的标题上。 Entities.xml 附件对象 下面是 XML 文件中如何描述一个附件对象的。例如 页面的 id是 98,附件是 10001 同时附件的名称为 myimportantfile.doc。有关 XML 文件中存储的其他内容可以忽略。 <object class="Attachment" package="com.atlassian.confluence.pages"> <id name="id">98</id> <property name="fileName"><![CDATA[myimportantfile.doc]]></property> ... <property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10001</id> </property> ... </object> Entities.xml 页面对象 下面是 XML 文件中如何描述一个页面的。例如页面的 id 是 98 标题是 Editing Your Files。有关 XML 文件中存储的其他内容可以忽略。 <object class="Page" package="com.atlassian.confluence.pages"> <id name="id">98</id> <property name="title"><![CDATA[Editing Your Files]]></property> ... </object>   https://www.cwiki.us/display/CONF6ZH/Retrieving+File+Attachments+from+a+Backup

2018年06月24日 0Comments 726Browse 0Like Read more
Confluence

Confluence 6 从一个备份中获得文件附件

页面中的文件附件可以从备份中获得而不需要将备份文件导入到 Confluence 中。这个在用户删掉了附件,但是你还是想恢复这个附件的时候就变得非常有用了。 自动备份和手动备份都允许你进行这个操作,但是需要 包含附件(Include attachments)选项需要被设置。如果你希望恢复页面,空间,或者站点,请参考Confluence administrator's guide 页面。 在按照下面的方法恢复附件之前,我们需要和你一起预览下备份文件中是如何存储附件和页面信息。   https://www.cwiki.us/display/CONFLUENCEWIKI/Retrieving+File+Attachments+from+a+Backup

2018年06月24日 0Comments 693Browse 0Like Read more
Confluence

Confluence 6 从其他备份中恢复数据

一般来说,Confluence 数据库可以从 Administration Console 或者 Confluence Setup Wizard 中进行恢复。 如果你在恢复压缩的 XML 备份的时候遇到了问题,你还是可以对整个站点进行恢复的,如果你能提供下面 2 个备份的话: 一个有关 home 目录的所有备份。 一个有关你数据库的备份(如果你使用的是外部数据库的话)。 有关恢复备份的方法基于你使用的是内部数据库还是外部数据库会有些不同。外部数据库主要像 Oracle, MS SQL Server, MySQL 或者 Postgres。 嵌入数据库 如果你使用的是嵌入数据库,那么这个数据位于 database 文件夹内,这个文件夹在你 Confluence 的 Home 目录中,你需要进行下面的一些操作: 获得你最近备份的 Home 文件夹备份文件。 解压 Confluence 的分发包,然后修改 confluence-init.properties 指向到这个目录。 外部数据库 如果你使用的是外部数据库,你需要进行下面的操作: 为你的 Home 目录和数据库准备备份(备份文件中最好添加备份备份的时间和日期)。这就可以了,请确定你的 home 目录能够在文件系统中被访问到,同时数据库也可以被连接。 如果你的数据库有不同的名字,或者是在一个不同的服务器上,你需要修改  confluence.cfg.xml 文件中的 JDBC URL 配置字符串,这文件在 Confluence 的 Home 目录中。变量使用的名称为 hibernate.connection.url。 解压 Confluence 的分发包,然后修改 confluence-init.properties 指向到 Home 目录。 https://www.cwiki.us/display/CONF6ZH/Restoring+Data+from+other+Backups

2018年06月22日 0Comments 1007Browse 0Like Read more
12345…9
Archives
  • June 2026
  • May 2026
  • April 2026
  • March 2026
  • February 2026
  • January 2026
  • December 2025
  • November 2025
  • October 2025
  • September 2025
  • August 2025
  • July 2025
  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021
  • May 2021
  • April 2021
  • March 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • October 2019
  • September 2019
  • August 2019
  • July 2019
  • June 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
Categories
  • Computer Science (2,367)
    • Confluence (663)
    • Gradle (12)
  • U.S. (511)
  • 文化旅游 (146)

COPYRIGHT © 2020 CWIKIUS. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

湘ICP备2020018253号-1