JAVA 生物信息软件 Flux Simulator、Astalavista、Flux Capacitor 源码临时修复及编译

今天分享一套依赖破坏的开源 JAVA 生物信息软件 Barna 项目的临时修复及编译。这套软件包括:Flux Simulator、Astalavista、Flux Capacitor,主页地址:https://confluence.sammeth.net/。在我接触到这套软件的2021年底,这套软件的源代码还可以通过一定的变通方法从 git 仓库下载到。不过却根本无法编译通过,因为其依赖的网络上的各种包和文件链接失效。但是,我发现现在已经无法从 git 仓库下载源码了。所幸,我当初下载的源码还在。于是,我将原来下载的源码和修复上传到 github( https://github.com/learndiary/barna-df )。这里,借此软件的修复,小结一下 JAVA Gradle 编译软件依赖包的修复。视频演示地址:https://www.bilibili.com/video/BV12V4y1p7Ec?share_source=copy_web&vd_source=d1925b070926f23b2b6676137251e9ea

Continue reading "JAVA 生物信息软件 Flux Simulator、Astalavista、Flux Capacitor 源码临时修复及编译"

Java入门实例classpath及package详解(转帖)

转自:Java入门实例classpath及package详解:url=http://www.programbbs.com/doc/437.htm

转载者注: 这是我在网上碰到的一篇step by step式的J2se第一步的文章,讲解详细具体,初学者照着操作一定会成功运行您的第一个“Hello, world!”Java程序。特转载于此,与大家分享。并向本文的原作者表示敬意。

转载正文:
Continue reading "Java入门实例classpath及package详解(转帖)"

(1) 环境的搭建

因为打算使用 JSP + Struts + JavaBean 做一个项目,所以下载如下一些工具:

① JDK 1.6

② Tomcat 5.5

③ struts 1.2.7



环境的配置如下:

① JDK的配置

JAVA_HOME        D:\jdk1.6

CLASSPATH        .;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\jre\lib\rt.jar

Path             ;%JAVA_HOME%\bin;

② Tomcat的配置

地址栏输入 http://localhost:8080/ 出现 TOMCAT猫猫 即可

③ struts的配置

把下载的 struts 1.2.7 包里的 webapps 下的 struts-examples.war 放在 Tomcat 下的webapps里,地址栏输入 http://localhost:8080/struts-examples 出现 Struts Examples 画面即可

temptation之JAVA学习档案

temptation,程序员,外包2年,会VB,有J2SE、OOP、数据库基础;

JAVA学习目标:

1、一年内学会Jsp + Servlet + Javabean;

2、两年内学会Hibernate, Spring等

JAVA学习日记的咨询建议:

1、因为您是程序员,需要实际的动手能力,所以学习策略建议以作出一个实际的程序为目标

,围绕这个目标进行相关知识的学习和加强;

2、找一本Jsp + Servlet + Javabean的书,边看书边实现您的目标程序的相关部分,先不管

写得好不好,能运行、实现了相应的功能就行;

3、建议在学Jsp + Servlet + Javabean之前,先用Jsp + Struts + Javabean实现您的程序。

理由,struts的表现层和框架降低您实现系统的难度;struts的结构分明,便于理解;

4、把用Struts实现了的系统用Jsp + Servlet + Javabean重构;

5、反复对您的系统进行重构,在重构的过程中加强您的J2SE基础和有意识的使用您的OOP知识

6、如果时间许可,建议从头至尾把一本关于J2SE的书精读一遍;

7、有什么心得,疑问,建议您在本站的目标下记成学习日记,我好跟踪您的学习情况,为您

提出相应的建议。

8、建议在您实现这个用于学习的系统时,尽量使用文本编辑器,不用IDE开发环境;

以上建议仅供参考,祝顺利达成您的JAVA学习目标。

                                       JAVA学习日记     孟大兴(littlebat, admin)

(20070530)先从网上搜些相关资料看看

1、由于还得一段时间单位才配笔记本,(约半个多月),因此我暂无法上机。

2、我刚到北京一周,JAVA基础的书未带,需要过一段时间回家去拿(坐8个小时车回家,再坐8个小时回来)。

因此目前情况,我先从网上找些相关的资料看看。

flying之JAVA学习档案

本学习档案的用于记录针对flying的JAVA学习目标的咨询进度。我将在本档案的后续评论中添加阶段性的咨询进度和方案调整。

flying,善于学习,无任何JAVA基础,只有BASIC基础,97年通过全国计算机等级考试二级——Basic语言。。(亦无C、VB基础),稍了解一些VBSCRIPT。

JAVA学习目标暂定为第一步:通过全国计算机等级考试二级——JAVA语言

本站提供JAVA学习方案建议(摘自邮件):


我会尽自己的力量帮您实现 :通过全国计算机等级考试二级——JAVA语言的目标的。

建议:

1、这个目标的驱动力是通过考试。那么书上阶段性的测试题就是您的一个个里程碑。

2、为对JAVA增加感觉和兴趣,第一步完成“Hello, world!”程序。完成了这个程序,您对JAVA的环境设置和运行原理应该有基本的认识。

3、按照您的书本学习,其中可能要补一些类c的知识,补一些oop的观念。

4、我也不知道您这个考试的大纲,而且你是一个善于学习的人,该学些什么您应该比较清楚。

5、有什么心得,疑问,建议您在本站的目标下记成学习日记,我好跟踪您的学习情况,为您提出相应的建议。

6、建议用记事本之类的文本编辑器写程序,用java相关命令行编译执行程序。理由见我的咨询相关材料:JAVA学习入门之我见。

good luck!

                                            JAVA学习日记     孟大兴(littlebat, admin) 

关于JAVA学习入门咨询方法-兴趣点拓展法的一点想法

所谓的“兴趣点拓展法”就是:基于知识都是相通的原理,以当前被咨询者最愿意解决的问题为出发点构建知识体系。兴趣是学习的良好动力。

我有一个叔叔,五十多岁,当年初中没有毕业,前段时间开始学电脑,他的目的是用电脑刻录光盘。所以,他对刻录软件非常有兴趣,他现在连字也不会打,但却把我给他安装的Nero刻录软件的文档看了一个遍,还有windows media player里面的刻录功能也点出来看,并提出一个我也不知道的问题。我答应帮助他学会电脑,于是,我从打字的基础、操作系统等传统的学习路线出发教他,他却因背不了字根表而中断了打字的学习(他的拼音也不会)。我想,对这位叔叔,我不能以一般的路线教他学电脑,他对刻录感兴趣,我可以以此为拓展点构建整个电脑操作的知识体系。这样,他学起来比较有兴趣。

还有,我的老婆对电脑也没有兴趣,但她认为自己应该掌握电脑技能,但对一步一步的照书本学习觉得烦,用她的话说就是“从你那里学现成的就比看书快多了”。不过,老婆现在喜欢聊天,我如果从聊天软件出发引导她自觉的构建整个电脑基础知识系统,应该是比较有效的。

一位老师在邮件中说:


我们如果能将知识的讲授变成"能让他立刻变成一个小小产品",就可以增强知识的吸引力,增加"成就感"。

这个成就,一般要让学习者自己能够做出来个什么东西,而且不能时间太长,否则他会在"挫折"的面前失去信心和兴趣。你首先让大家看到的是"出错信息"(littlebat注,这位老师说的是我在借如何编译learndiaryV0.9源码说说javac命令的基本用法的写作上的问题),这个方法从《The Secret》(littlebat注:这位老师说的是大秘密:成功一定要“艰苦努力”吗?还是另有蹊径?前所未有的影片)来说,是"负面取向",呵呵。

我觉得这位老师说得很有道理。要让学习者保持JAVA学习的信心和兴趣,这是第一重要的咨询技巧。我将在以后的咨询实践中贯彻这个道理。

总之,总是以被咨询者当前最有兴趣、最迫切希望解决和学习的知识点出发来构建他的知识体系。

这个兴趣点就是他这门知识入门的切入点和契机。

借如何编译learndiaryV0.9源码说说javac命令的基本用法

前两天,一位朋友在QQ上向我问一个问题,他说他下载了一个人力资源管理系统,可是不知道怎么编译它?

我答:一般的源码都有Readme文件或ant脚本,可以照此编译。。。

他回复说:里面的说明只有3行:数据库文件在data中,用户名**,密码**;其余什么都没有?

我答:您看它是用什么IDE开发的,最简单的方法是导入开发它的IDE环境中,如果没有,那就只有用javac命令手工编译了。。。

看到这,我给这个人力资源系统下了一个大概的结论,没有详细的文档,没有自动编译脚本,初学者难以把它编译成功。

恰好,我的"学习日记V0.9"也是这样一个“初学都难以编译成功”的程序。它是我初学JAVA完成的第一个成形的程序,可以运行,但是正由于是初学的实习之作。毛病不少。其中一个毛病就是源代码组织不合理,没有详细的文档,没有自动编译脚本。

于是,我们就只有用javac命令来手工编译这些程序了,关于javac命令,您用javac -help在线帮助可以看到全部的用法,只不过初学者可能对其中的含义不是很明白。我也是一个入门级的水平,对其中的全部用法也不是都用过和明白。所以,与其说我开展的是JAVA学习日记网站免费提供JAVA学习入门咨询服务,还不如说是借此机会和大家聊聊JAVA学习,共同交流、共同进步。下面我就借怎样编译成功learndiaryV0.9源码说说javac命令的基本用法,包括:-classpath -cp -sourcepath -d 各个选项。也算是对那位朋友的一个详细的解答。

1、您下载了learndiaryV0.9.rar并解开后,会看到以下文件清单:

  learndairydbV0.9.sql,数据库文件;learndiaryV0.9.war,编译好的程序文件;src,源代码文件目录;readme.html,使用说明。

  您按照里面readme.html文件的步骤应该能把这个程序运行起来(如果您不知道怎样导入数据库,请参考一下这篇日记:mysql数据库的导出和导入)。但是,初学者想修改src里面的源文件并编译运行只能用javac命令手工编译。而且,因为这个程序是用ultraedit手工写的,您想把它导入一个集成开发环境也不太容易。所以,我就用编译src里面的源码为例说说javac命令的基本用法;

2、我们把编译好的类文件放在哪里呢?

跟源文件放在一起肯定不是一个好办法,那么,在解开的目录中建一个名为build的文件夹,与src文件夹在同一目录下。build文件夹用于保存编译好的class文件;

3、让我们来初步试一试编译src里的源文件吧。(我用的是ubuntu 6.06 linux平台+jdk1.5,在windows平台下的路径表示有所不同,您需要改一下

learndiaryV0.9源码没有按包结构存放,如:src文件夹下面包含4个文件夹:action  actionform  dao  model  util,其中的一个类文件:LearnDiaryDB.java就直接放在dao文件夹下面,而LearnDiaryDB.java中的包结构是: package com.learndiary.website.dao;

标准的存放位置是./src/com/learndiary/website/dao。但是,这不妨害我们把源文件编译成类文件。

进入src文件夹所在的目录:


mdx@ubuntu:~/mdxhome/learndiaryV0.9.rar_FILES$ dir

build  learndiarydbV0.9.sql  learndiaryV0.9.war  readme.html  src

用javac命令编译src文件夹下的源文件到build文件夹下面:


mdx@ubuntu:~/mdxhome/learndiaryV0.9.rar_FILES$ javac -d ./build ./src/*/*.java ./src/*/*/*.java

结果如何呢?

长长的报错和警告,片断如下:


...(略)

./src/dao/LearnDiaryDB.java:290: 警告:编码 UTF8 的不可映射字符

      userInfo.setUserName("�ο�");

                            ^

...(略)

./src/actionform/ForbidForm.java:7: 软件包 org.apache.struts.action 不存在

import org.apache.struts.action.ActionErrors;

                                ^

./src/actionform/ForbidForm.java:23: 找不到符号

符号: 类 ActionForm

public class ForbidForm extends ActionForm {

                                ^

...(略)

./src/action/account/LoginAction.java:42: 找不到符号

符号: 类 ServletException

位置: 类 com.learndiary.website.action.account.LoginAction

                throws IOException, ServletException {

                                    ^

./src/action/account/LogoutAction.java:5: 软件包 javax.servlet 不存在

import javax.servlet.ServletException;

                     ^

...(略)

“警告:编码 UTF8 的不可映射字符”是怎么一回事呢?

原来learndiaryV0.9源程序里面有硬编码的中文字符,我用的是gb2312编码,而我现在的编译环境(ubuntu 6.06 linux)的默认编码是utf8,于是,需要指定encoding选项为: -encoding gb2312

而后面那些“找不到符号”、“软件包***不存在”的提示就是没有指定源码中引用到的其它类的路径了,这需要在classpath选项中指定,根据出错信息,我们为了方便,我们在当前目录下建一个名为compilelib的文件夹,把编译需要的库文件拷贝到这个文件夹下面,compilelib与src目录是同级的。确认编译需要的库文件可能不是一次尝试就能全部找出的,有时您需要根据出错信息从网上搜索,以判断是需要哪个库文件,一般来说,这些库文件在我下面说的两个地方都应该找得到,即:程序的WEB-INF/lib目录下面和web程序容器的通用库目录(如tomcat5.0是common/lib)下面。

到哪里去找哪些需要的库文件呢?

1)、用解压软件解开当前目录下面那个learndiaryV0.9.war文件,进入里面的那个WEB-INF/lib目录,把里面的activation.jar, mail.jar, struts.jar库文件拷贝到compilelib目录中;

2)、把您使用的tomcat(我用的是5.0版)安装目录下面common/lib下面的servlet-api.jar也拷贝到compilelib目录中;

于是,compilelib目录下面有如下库文件:


mdx@ubuntu:~/mdxhome/learndiaryV0.9.rar_FILES/compilelib$ dir

activation.jar  mail.jar  servlet-api.jar  struts.jar

然后,执行:


mdx@ubuntu:~/mdxhome/learndiaryV0.9.rar_FILES$ javac -classpath ./compilelib/struts.jar:./compilelib/servlet-api.jar:./compilelib/mail.jar:./compilelib/activation.jar -d ./build -encoding gb2312 ./src/*/*.java ./src/*/*/*.java

(windows下面的classpath分隔符是分号; ,而不是这里linux下面的冒号: )

再解释一下"./src/*/*.java"通配符,它表示编译src目录下面第一层所有目录中的所有java文件,而“./src/*/*/*.java”则表示编译src目录下面第二层所有目录中的所有java文件,learndiaryV0.9的源码只有两层深,如果碰到有的程序的源码有多层深,那您就多添几层了,我还没有找到手工用javac命令把一个目录下面所有目录层次的java文件在一句里面指定好一次全部编译的方法,有谁知道提示一下,谢谢:)

于是,按package组织好的类文件就被编译好放在build目录了,它的组织结构是这样的: ./build/com/learndiary/website/action/...

然后,您就可以把这些编译好的类拷贝到程序的WEB-INF/classes目录下面了。

按理说,我们已经成功的编译了learndiaryV0.9,那还需要我们做什么呢?

我们这里的目的是借编译learndiaryV0.9说说javac命令的用法,所以,我还得继续把字打下去:)

4、您会发现上面的-classpath的选项里没有当前目录. (点号),难道不需要当前目录吗?在javac命令里的-sourcepath选项与-classpath选项有什么区别呢?这两个问题我们以只编译./src/action/disgoal/DisGoalContentAction.java这个文件来说明。

首先,我们把整个源码根据包结构重新组织好,即在src目录下面建一个./src/com/learndiary/website/的目录结构(据个人经验,这样才能单独编译成功DisGoalContentAction.java),再把原来src目录下的那些文件夹移到website文件夹下面去,这样DisGoalContentAction.java的路径就是:./src/com/learndiary/website/action/disgoal/DisGoalContentAction.java

然后,我们回到src目录的上层目录,执行javac命令如下:


mdx@ubuntu:~/mdxhome/learndiaryV0.9.rar_FILES$ javac -classpath ./compilelib/struts.jar:./compilelib/servlet-api.jar:./compilelib/mail.jar:./compilelib/activation.jar -d ./build -encoding gb2312 ./src/com/learndiary/website/action/disgoal/DisGoalContentAction.java

但是,您会发现报错如下:


...(略)

./src/com/learndiary/website/action/disgoal/DisGoalContentAction.java:4: 软件包 com.learndiary.website.dao 不存在

import com.learndiary.website.dao.LearnDiaryDB;

                                  ^

./src/com/learndiary/website/action/disgoal/DisGoalContentAction.java:47: 找不到符号

符号: 类 LearnDiaryDB

...(略)

这是因为DisGoalContentAction.java中引用的用户源文件找不到,这时,我们的-sourcepath选项出场了,添加这个选项的命令如下:


mdx@ubuntu:~/mdxhome/learndiaryV0.9.rar_FILES$ javac -classpath ./compilelib/struts.jar:./compilelib/servlet-api.jar:./compilelib/mail.jar:./compilelib/activation.jar -sourcepath ./src -d ./build -encoding gb2312 ./src/com/learndiary/website/action/disgoal/DisGoalContentAction.java

一切OK了,并且,DisGoalContentAction.java引用到的几个源文件同时被编译进build目录了。

其中,“-sourcepath ./src”的作用是告诉javac到这个目录下面去找它要的东西。

实际上,-sourcepath这个选项完全可以被-classpath代替,只不过classpath除了可以找源文件,还可以找类文件,而sourcepath却只可以找源文件。也就是说,下面这个命令与上面的命令是等效的:


mdx@ubuntu:~/mdxhome/learndiaryV0.9.rar_FILES$ javac -classpath ./compilelib/struts.jar:./compilelib/servlet-api.jar:./compilelib/mail.jar:./compilelib/activation.jar:./src -d ./build -encoding gb2312 ./src/com/learndiary/website/action/disgoal/DisGoalContentAction.java

但是,反过来,用-sourcepath代替-classpath却不行,如下面的命令是不会执行成功的:


mdx@ubuntu:~/mdxhome/learndiaryV0.9.rar_FILES$ javac -sourcepath ./compilelib/struts.jar:./compilelib/servlet-api.jar:./compilelib/mail.jar:./compilelib/activation.jar:./src -d ./build -encoding gb2312 ./src/com/learndiary/website/action/disgoal/DisGoalContentAction.java

于是,我们再来说说classpath中当前路径 .  的作用。

假如您在当前目录下建了一个目录mypackage,再在mypackage下面写了一个Hello.java文件,并以mypackage为包,即它的头部有一句 package mypackage;

然后,您在当前目录(mypackage的父目录)下执行 javac ./mypackage/Hello.java,编译成功。在mypackage目录生成类文件Hello.class,然后,您在当前目录下执行:java -classpath test mypackage.Hello ,其中test是一个不存在的目录,目的是屏蔽系统的classpath中环境变量中定义的当前路径。您会发现类似下面的报错:


mdx@ubuntu:~$ java -classpath test mypackage.Hello

Exception in thread "main" java.lang.NoClassDefFoundError: mypackage/Hello

改过来,使当前路径生效:java -classpath . mypackage.Hello

执行结果就正常了。

所以,classpath当前路径 . 的作用就是告诉java从当前路径开始找它要的东西。

另外,javac中选项 -cp是选项-classpath的缩写,是完全等效的。

以上用编译learndiaryV0.9来说了javac命令的基本用法包括:-classpath -cp -sourcepath -d 各个选项。javac命令还有其它的选项,您用javac -help在线帮助可以看到,不过不常用,我也没有用过,就不写了。

5、一个疑问:

在我们编译DisGoalContentAction.java这一个java源文件的时候为什么必须要告诉它引用的其它源文件的搜索路径(用选项 -sourcepath ./src 告知),而前面编译learndiaryV0.9中src目录中全部源文件时却不用告诉它们彼此引用的其它源文件的搜索路径呢?而且,上面编译全部源文件时还并没有按包的结构组织源代码。大家可以探讨一下这是为什么?

今天就写到这里了。如您要转载本文请注明原始出处为:借如何编译learndiaryV0.9源码说说javac命令的基本用法: http://java.learndiary.com/diaries/3262.jsp 和作者信息: littlebat。我会在本文的原始出处随时对本文进行修定或补充。由于本人水平有限,错漏之处在所难免,欢迎您的批评指正和交流。谢谢。

                   JAVA学习日记  孟大兴

                                        

                                                         2007年5月28日早上初稿