我正在尝试编译并运行这个仓库中的一些基本Java代码:https://github.com/jasebell/mlbookexamples
例如,在Java文件夹中,有chapter2.BritneyDilemma。
我尝试使用Maven来做这件事(因为有一个pom.xml文件),但我觉得有一些事情阻碍了我。我对Maven了解不多;我的背景是C和cmake。乍一看,我能理解为什么人们讨厌Maven。这个项目的pom.xml似乎没有完全配置/看起来相当非标准:
- 它只下载了一些依赖,例如BritneyDilemma需要classifier4J,但这在pom.xml中没有提及。
- 当我执行任何简单的命令如mvn install/compile等时,输出到target的文件几乎是空的(它是一个几乎空的jar文件)。
我尝试了各种方法,例如:
- 修改pom.xml以添加maven assembly插件并运行
mvn clean compile package
。最多我能得到一个打包了pom.xml依赖的jar文件,但仍然无法编译BritneyDilemma,因为没有classifier4j(这在pom.xml中没有提及,所以我不确定Maven如何知道这是要求的/从哪里拉取)。 - 放弃Maven,下载classifer4j并通过命令行编译。运行时错误和一些侦查指出我缺少一些classifier4j依赖,我认为这是因为我放弃了Maven,否则这些依赖会通过一些递归构建来处理。
这是一个标准的构建尝试,没有做任何修改/直接使用pom.xml:
~/projects/mlbookexamples/java (master) $ mvn install[INFO] Scanning for projects...[INFO] ------------------------------------------------------------------------[INFO] Building mlbook[INFO] task-segment: [install][INFO] ------------------------------------------------------------------------[INFO] [resources:resources {execution: default-resources}][WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent![INFO] skip non existing resourceDirectory /home/alex/projects/mlbookexamples/java/src/main/resourcesDownloading: http://repo.springsource.org/libs-milestone//javax/batch/javax.batch-api/1.0/javax.batch-api-1.0.jar34K downloaded (javax.batch-api-1.0.jar)[INFO] [compiler:compile {execution: default-compile}][INFO] No sources to compile[INFO] [resources:testResources {execution: default-testResources}][WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent![INFO] skip non existing resourceDirectory /home/alex/projects/mlbookexamples/java/src/test/resources[INFO] [compiler:testCompile {execution: default-testCompile}][INFO] No sources to compile[INFO] [surefire:test {execution: default-test}][INFO] No tests to run.[INFO] Surefire report directory: /home/alex/projects/mlbookexamples/java/target/surefire-reports------------------------------------------------------- T E S T S-------------------------------------------------------Results :Tests run: 0, Failures: 0, Errors: 0, Skipped: 0[INFO] [jar:jar {execution: default-jar}][WARNING] JAR will be empty - no content was marked for inclusion![INFO] Building jar: /home/alex/projects/mlbookexamples/java/target/mlbookexamples-1.0-SNAPSHOT.jar[INFO] [install:install {execution: default-install}][INFO] Installing /home/alex/projects/mlbookexamples/java/target/mlbookexamples-1.0-SNAPSHOT.jar to /home/alex/.m2/repository/com/datasentiment/mlbook/mlbookexamples/1.0-SNAPSHOT/mlbookexamples-1.0-SNAPSHOT.jar[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESSFUL[INFO] ------------------------------------------------------------------------[INFO] Total time: 6 seconds[INFO] Finished at: Wed Mar 04 08:38:56 NZDT 2015[INFO] Final Memory: 33M/249M[INFO] ------------------------------------------------------------------------~/projects/mlbookexamples/java/target (master) $ java -jar mlbookexamples-1.0-SNAPSHOT.jar no main manifest attribute, in mlbookexamples-1.0-SNAPSHOT.jar
我使用的是Arch Linux操作系统。
回答:
编译第2章似乎不需要获取pom.xml中列出的依赖项。
你可以直接从chapter2文件夹编译BritneyDilemma(记得包含从http://sourceforge.net/projects/classifier4j/files/下载的Classifier4J依赖,这个可以保存在chapter2文件夹中)。
~/projects/mlbookexamples/java/src/chapter2 (master) $ javac -cp Classifier4J-0.6.jar BritneyDilemma.java
然后你可以进入src文件夹并运行该类,再次引用chapter2文件夹中的classifier4j jar文件。
~/projects/mlbookexamples/java/src (master) $ java -classpath .:chapter2/Classifier4J-0.6.jar chapter2.BritneyDilemma brittany spears = 0.7071067811865475brittney spears = 0.7071067811865475britany spears = 0.7071067811865475britny spears = 0.7071067811865475briteny spears = 0.7071067811865475britteny spears = 0.7071067811865475briney spears = 0.7071067811865475brittny spears = 0.7071067811865475brintey spears = 0.7071067811865475britanny spears = 0.7071067811865475britiny spears = 0.7071067811865475britnet spears = 0.7071067811865475britiney spears = 0.7071067811865475christina aguilera = 0.0britney spears = 0.9999999999999998
你可能已经有了所需的日志库,但也可以通过包管理器获取libcommons-logging-java。
或者,使用Eclipse会更简单。创建一个新的Java项目,但将工作目录从默认目录更改为仓库中的java目录。在这里创建一个新的文件夹’lib’并放入classifier4j jar文件。在Eclipse中,右键点击classifier4j并选择’添加到构建路径’。现在你可以简单地点击BritneyDilemma或任何其他源文件(在必要时添加依赖到lib并添加到构建路径),并按需运行。
祝你机器学习愉快。