2012-06-05 97 views
2

我在Eclipse中創建了一個Java項目,並在我的Windows PC上直接從Eclipse成功執行它。現在我必須在Linux服務器上運行相同的Java程序。如何將Eclipse Java項目移植到另一臺PC並從Shell進行編譯?

我試圖從我的電腦複製.class文件到服務器並運行它,但它沒有工作。從那以後,我複製了殼整個項目和運行javac MyProject.java並返回以下錯誤:

RecordImportBatch.java:2: error: package org.apache.commons.io does not exist 
import org.apache.commons.io.FileUtils; 

... 

RecordImportBatch.java:3: error: package org.neo4j.graphdb does not exist 
import org.neo4j.graphdb.RelationshipType; 

我的猜測所引起,因爲我不包括編譯命令jar文件。

有很多jar文件包含在這個項目中,並且作爲一個Java新手到目前爲止我還沒有找到方法來編譯從Eclipse在Eclipse中工作的項目。

有誰知道是否有方法直接從Eclipse獲取相應的編譯命令,並將其粘貼到Shell或者是否必須手動添加所有jar?如果是這樣的話,有沒有人知道如何包含所有的jar文件,放在與MyProject.java位於同一文件夾中的lib目錄中?

謝謝!

回答

1

如果您剛剛瞭解java,這個建議可能會遇到一些挑戰,但是您可以使用maven來構建項目,這需要重新組織源文件和目錄。然後使用assembly插件創建一個包含所有依賴關係的zip文件。然後運行您的程序,你就這樣做:

unzip myapp.zip 
cd myapp 
java -cp "lib/*" com.blah.MyApp 

(你可能需要調整/ *部分的語法,使用單引號,或移除取決於你的shell引號)

這裏是程序集插件的一個片段(通用...除了版本以外,沒有任何硬編碼,以及遵循約定的路徑)。這正好在pom.xml中:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.2</version> 
    <configuration> 
     <descriptors> 
      <descriptor>src/main/assembly/distribution.xml</descriptor> 
     </descriptors> 
     <appendAssemblyId>false</appendAssemblyId> 
    </configuration> 
    <executions> 
     <execution> 
      <id>make-assembly</id> 
      <!-- this is used for inheritance merges --> 
      <phase>package</phase> 
      <!-- append to the packaging phase. --> 
      <goals> 
       <goal>single</goal> 
       <!-- goals == mojos --> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

這裏是一個例子組件文件(該/主/組件/ distribution.xml相對於pom.xml的推移在SRC):

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd" 
> 
    <id>${artifact.version}</id> 
    <formats> 
     <format>zip</format> 
    </formats> 

    <files> 
     <file> 
      <!-- an example script instead of using "java -cp ..." each time --> 
      <source>${project.basedir}/src/main/bin/run.sh</source> 
      <outputDirectory>.</outputDirectory> 
      <destName>run.sh</destName> 
      <fileMode>0754</fileMode> 
     </file> 
    </files> 

    <fileSets> 
     <fileSet> 
      <directory>${project.basedir}/src/main/resources/</directory> 
      <outputDirectory>/res/</outputDirectory> 
      <includes> 
       <!-- just examples... --> 
       <include>*.sql</include> 
       <include>*.properties</include> 
      </includes> 
     </fileSet> 
     <fileSet> 
      <directory>config/</directory> 
      <outputDirectory>/config/</outputDirectory> 
     </fileSet> 
    </fileSets> 

    <dependencySets> 
     <dependencySet> 
      <outputDirectory>/lib</outputDirectory> 
      <excludes> 
       <!-- add redundant/useless files here --> 
      </excludes> 
     </dependencySet> 
    </dependencySets> 
</assembly> 

另外, eclipse在gui中有一個「jar packager」實用程序,但是幾年前我發現它不太好。我不認爲它處理依賴關係,所以你需要拿上面的「-cp」參數,然後添加所有的jar,或者把它們放到lib目錄中。

也有這http://fjep.sourceforge.net/,但我從來沒有使用過....我現在只是快速查找日食jar打包機。在他的教程中,他的最後一行(顯示運行它)是這樣的:

> java -jar demorun_fat.jar 
Hello 
+0

什麼是適當的pom.xml片段是什麼? –

+0

我添加了一個片段,並assembly.xml – Peter

-1

我會強烈建議使用任何類型的構建工具,在事實上標準AntMaven,但你可以找到several alternatives。他們兩人對於一個較小的項目都是相當簡單的,並且使用它們也是小菜一碟(請注意,Eclipse也可以生成一個基本的Ant文件)。

例如,它可能是一個命令來運行整個項目:

> ant run 
Buildfile: build.xml 

clean: 

compile: 
    [mkdir] Created dir: ... 
    [javac] Compiling N source file to ... 

run: 
    [java] Running application... 

main: 

BUILD SUCCESSFUL 
1

如果你需要做的,是編譯和您的PC上運行在Eclipse程序,並傳送已編譯結果Linux機器,然後使用文件 - >導出 - > Java - > Runnable Jar文件並選擇最適合您的包裝。

技術最簡單的方法是使用「複製所需的庫到一個子文件夾旁邊的罐子」你需要將文件壓縮和解一起分發但隨後,並解壓縮他們在Linux中。

+0

謝謝!你的建議節省了很多時間。 –

相關問題