我能够在Eclipse中编译我的Main.java文件而没有任何问题。
在Main.java里面我有
package com.selenium.zLoadProfilerPkg;
在其他3个文件中我也有
package com.selenium.zLoadProfilerPkg;
然而,当我将整个结构上传到linux,并且我尝试编译它时,我得到错误:
[sgalkov@zpub zLoadProfilerPkg]$ pwd
/home/sgalkov/zpp_tech_git_checkout/profiler/zLoadProfiler/zLoadProfiler/src/com/selenium/zLoadProfilerPkg
[sgalkov@zpub zLoadProfilerPkg]$ cd /home/sgalkov/zpp_tech_git_checkout/profiler/zLoadProfiler/zLoadProfiler/src/com/selenium/zLoadProfilerPkg/; javac -cp ".:/home/sgalkov/zpp_tech_git_checkout/profiler/selenium-2.30.0/selenium-java-2.30.0.jar:/home/sgalkov/zpp_tech_git_checkout/profiler/selenium-2.30.0/libs/*:/home/sgalkov/zpp_tech_git_checkout/profiler/selenium-2.30.0/selenium-server-standalone-2.30.0.jar:/home/sgalkov/zpp_tech_git_checkout/profiler/browsermob-proxy-2.0-beta-7/browsermob-proxy-2.0-beta-7-sources.jar:/home/sgalkov/zpp_tech_git_checkout/profiler/browsermob-proxy-2.0-beta-7/lib/*:/home/sgalkov/zpp_tech_git_checkout/profiler/zLoadProfiler/zLoadProfiler/src/com/selenium/zLoadProfilerPkg" Main.java
Main.java:54: error: cannot find symbol
BrowsermobProxy bmp = new BrowsermobProxy(PROXY_API_HOST, PROXY_API_PORT);
^
symbol: class BrowsermobProxy
location: class Main
Main.java:54: error: cannot find symbol
BrowsermobProxy bmp = new BrowsermobProxy(PROXY_API_HOST, PROXY_API_PORT);
^
symbol: class BrowsermobProxy
location: class Main
Main.java:310: error: cannot find symbol
HarStorage hs = new HarStorage(HARSTORAGE_HOST, HARSTORAGE_PORT);
^
symbol: class HarStorage
location: class Main
Main.java:310: error: cannot find symbol
HarStorage hs = new HarStorage(HARSTORAGE_HOST, HARSTORAGE_PORT);
^
symbol: class HarStorage
location: class Main
4 errors
[sgalkov@zpub zLoadProfilerPkg]$
如果我发表评论“package com.selenium.zLoadProfilerPkg;”在4个文件中的每个文件中逐个编译它们,一切正常。
另外,如果我尝试以这种方式编译它:
cd /home/sgalkov/zpp_tech_git_checkout/profiler/zLoadProfiler/zLoadProfiler/src/com/selenium/zLoadProfilerPkg/;
javac -cp ".\
:/home/sgalkov/zpp_tech_git_checkout/profiler/selenium-2.30.0/selenium-java-2.30.0.jar\
:/home/sgalkov/zpp_tech_git_checkout/profiler/selenium-2.30.0/libs/*\
:/home/sgalkov/zpp_tech_git_checkout/profiler/selenium-2.30.0/selenium-server-standalone-2.30.0.jar\
:/home/sgalkov/zpp_tech_git_checkout/profiler/browsermob-proxy-2.0-beta-7/browsermob-proxy-2.0-beta-7-sources.jar\
:/home/sgalkov/zpp_tech_git_checkout/profiler/browsermob-proxy-2.0-beta-7/lib/*\
:/home/sgalkov/zpp_tech_git_checkout/profiler/zLoadProfiler/zLoadProfiler/src/com/selenium/zLoadProfilerPkg" \
BrowsermobProxy.java HarStorage.java HttpRequest.java Main.java
它确实编译但我为Main.java增加了一个类
rw-r--r-- 1 sgalkov users 1422 Mar 11 20:30 Main$1.class
rw-r--r-- 1 sgalkov users 8264 Mar 11 20:30 Main.class
rw-r--r-- 1 sgalkov users 14864 Mar 11 19:32 Main.java
我无法运行该程序,我收到错误:
Exception in thread "main" java.lang.NoClassDefFoundError: Main (wrong name: com/selenium/zLoadProfilerPkg/Main)
at java.lang.ClassLoader.defineClass1(Native Method)
我环顾四周并尝试了各种选项,但无法让这个项目进行编译,并会感激任何指针。
答案 0 :(得分:1)
dir=/home/sgalkov/zpp_tech_git_checkout/profiler
cd "$dir/zLoadProfiler/zLoadProfiler/src/"
javac -cp ".\
:$dir/selenium-2.30.0/selenium-java-2.30.0.jar\
:$dir/selenium-2.30.0/libs/*\
:$dir/selenium-2.30.0/selenium-server-standalone-2.30.0.jar\
:$dir/browsermob-proxy-2.0-beta-7/browsermob-proxy-2.0-beta-7-sources.jar\
:$dir/browsermob-proxy-2.0-beta-7/lib/*\
:$dir/zLoadProfiler/zLoadProfiler/src/" \
com/selenium/zLoadProfilerPkg/*.java
答案 1 :(得分:0)
如果要在IDE之外编译应用程序,则应使用Apache Ant。这是一个示例build.xml文件,您可以使用它来使用Ant编译应用程序。
<?xml version="1.0" encoding="UTF-8"?>
<project basedir="/home/sgalkov/zpp_tech_git_checkout/profiler/zLoadProfiler/zLoadProfiler"
default="compile">
<property name="dir.prefix" value="/home/sgalkov/zpp_tech_git_checkout/profiler"/>
<path id="compile.classpath">
<pathelement location="classes"/>
<fileset dir="${dir.prefix}/selenium-2.30.0">
<include name="selenium-java-2.30.0.jar"/>
<include name="libs/*"/>
<include name="selenium-server-standalone-2.30.0.jar"/>
</fileset>
<fileset dir="${dir.prefix}/browsermob-proxy-2.0-beta-7">
<include name="browsermob-proxy-2.0-beta-7-sources.jar"/>
<include name="lib/*"/>
</fileset>
</path>
<property name="compile.classpath" refid="compile.classpath"/>
<target name="compile">
<mkdir dir="classes"/>
<javac failonerror="true" srcdir="src" debug="yes"
includes="**/*.java" destdir="classes"
classpath="${compile.classpath}">
</javac>
</target>
<target name="clean">
<delete dir="classes"/>
</target>
</project>
所有类都将以名为classes
的文件夹结尾,其结构反映源包层次结构。要执行您的应用程序,您只需将classes
文件夹放在类路径中,并将主类称为com.selenium.zLoadProfilerPkg.Main
。在ant中有一些很好的功能,比如在jar文件中打包你的类等等。检查一下。
就Main$1.class
而言,请确保在每个java源文件的顶部正确定义了包定义。
此外,请务必检查我提供的ant构建脚本中的compile.classpath
,以确保我没有错误地或代表您在问题中提供的类路径中的内容。
答案 2 :(得分:0)
您必须在源根目录中启动 javac ,其中有一个子目录com
(顶层包)。这也可以在Windows上进行测试。
您也可以部署已编译的.class&#39; es / jars / wars / ear。然后需要编译目标(1.5,1.6,1.7)。
是的, ant 或现在 maven 可能会在IDE内部和独立版本中提供良好的构建基础架构。