我一直在自学Java语言,但我只是将Eclipse用作编译和运行项目的一种方法,我想看看如何仅使用命令行编译和运行以下文件结构(我不想简单地从eclipse导出.jar文件)。
文件结构如下:
src/
model/
file1.java
file2.java
app/
main.java (contains main method)
file3.java
images/
1.gif
2.gif
view/
file4.java
file5.java我也需要编译好的图像文件,因为我用它们做了几件事。我知道应该使用javac命令来构建.class文件,但是我不知道用这种文件结构(以及图像文件)编译(并运行)它的人是谁。任何帮助都将不胜感激。
注意:我正在尝试在Ubuntu 12.04上编译和运行,并且严格使用命令行。
发布于 2013-03-14 13:53:33
请尝试以下操作
javac -classpath ./lib/*.jar ./src/*/*.java如果你的java类使用3DParty库,那么给出一个合适的jar库路径。最好使用具有适当目录结构的构建工具。
发布于 2013-03-14 13:51:02
你可以说
javac src/*/*.java但是,这将是无条件的重新编译,将是恼人的更多的文件,并将打破当你有更多的文件超过命令行可以处理。
明智的做法是使用Ant或Maven (在大多数情况下,Maven更容易/更好)。您可以编写构建脚本(分别为build.xml或pom.xml )并运行构建器(ant或mvn)。
发布于 2013-03-14 14:27:45
曾几何时,我用Windows批处理文件编译Java项目。我记得每当我在项目中添加一个新的包时,我不得不回去费力地编辑它们。
有了Linux shell的强大功能,您实际上可以创建一个像样的命令行构建脚本,而不必这样做:
#!/bin/bash
set -e # quit on error
set -u # quit if we attempt to use undefined environment variable
set -x # show commands as they're executed (remove this line if done debugging)
# Run this script from the project root directory
cd src
# Create directory structure
find . -type d | xargs -n 1 -I I --verbose mkdir -p ../dist/class/I
# Use javac to compile files
find . -name "*.java" | javac @/dev/stdin -d ../dist/class
# Copy assets
find . -type f -and -not -name "*.java" | xargs -n 1 -I I --verbose cp I ../dist/class/I
# Jar command
jar cvf ../dist/$(basename $(readlink -f ..)) -C ../dist/class .您应该将其保存在项目根目录下名为"build.sh“的文件中。这个脚本缺少一些功能。有很多冗长的内容,所以你可以确切地看到发生了什么。它不能很好地处理包含空格或其他奇怪字符的文件名。如果您想要一个可运行的jar文件,则必须编写一个清单文件并将其包含在"jar“命令中。如果您的项目在Java类库之外使用了任何外部依赖项,那么您必须在javac命令行中添加一个-cp开关,或者导出CLASSPATH环境变量。
上面的脚本将把资产复制到jar文件中。假设您在运行时提取资产,这将生成一个文件分发。Stackoverflow可以告诉你更多关于How to Handle Assets in Single File within a Virtual File System in Java的信息。
或者,您可以简单地将资源从源目录复制到目标目录。
作为一个风格问题,大多数人将他们的资产放在与源代码分开的目录中。例如,您的两个.gif文件将位于assets/app/images下,而不是src/app/images下。只要你能说服你的构建系统做你想做的事情,在技术上就没有必要这样做,但我见过的大多数项目都把它们分开。
https://stackoverflow.com/questions/15402058
复制相似问题