0

我能够在 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)

我环顾四周并尝试了各种选项,但无法编译该项目,并希望得到任何指示。

4

3 回答 3

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
于 2013-03-12T00:41:46.757 回答
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 源文件的顶部正确定义。

另外,请务必检查compile.classpath我提供的 ant 构建脚本,以确保我没有拼错或代表您在问题中提供的类路径中的某些内容。

于 2013-03-12T12:48:41.623 回答
0

您必须在有一个子目录(顶级包)的源根目录中启动javac 。com这你也可以在 Windows 上测试。

您也可以部署已编译的 .class'es / jars / wars / ear。然后需要编译的目标(1.5、1.6、1.7)。

是的,ant或现在的maven可能会在 IDE 内部和独立环境中提供良好的构建基础架构。

于 2013-03-12T13:00:33.537 回答