Unix 스크립트에서 Java 프로그램을 실행하는 방법은 무엇입니까?

Unix 스크립트에서 Java 프로그램을 실행하는 방법은 무엇입니까?

Linux 스크립트에서 Java 프로젝트를 컴파일하려고 합니다. run_nmc_engine.sh문제는 시작할 때 오류가 발생한다는 것입니다.

Error: Could not find or load main class caos.aaai.CaosNMCEngine

스크립트에서 내가 실행하는 명령은 대략 다음과 같습니다.

java -Xmx${MAXMEM} -cp .:${TOP}/build:${JCHEM}/lib/jchem.jar caos.aaai.CaosNMCEngine blablabla ...

오류가 명령의 첫 번째 부분과 관련된 것 같아서 모두 추가하지 않았습니다. 어디인지는 모르겠지만 JCHEM거기인 건 알아요

화학적 표현, 검색, 저장, 정형 및 비정형 데이터 관리 기능 구현.~에서ChemAxon 웹사이트

CaosNMCEngine.java 파일이 어디에 있는지 찾을 수 없는 것 같습니다. 그러나 폴더에 잘 배치되어 있다고 생각합니다.

여기에 이미지 설명을 입력하세요.

전체 프로젝트는 다음에서 찾을 수 있습니다.GitHub의 프로젝트 웹페이지. Readme를 완성하기 위해 추가 정보가 필요한 경우 알려 주시기 바랍니다. 아마도 스크립트를 다음 스크립트와 비교하는 것이 더 나을 것입니다.원본 프로젝트.

전체 스크립트는 다음과 같습니다:

JCHEM=/Applications/ChemAxon/JChem-5.7.0
MAXMEM="2G"
if [[ `uname -a | grep Linux` ]] ;
then
JCHEM=/gpfs/home/aheifets/opt/jchem-5.7.1
MAXMEM="8G"
fi

TOP=`cd $(dirname $0)/../..; pwd -P`
PATH=$PATH:${JCHEM}/bin

# rm ReactorDemo.class
# javac -cp .:/Applications/ChemAxon/JChem-5.7.0/lib/jchem.jar -Xlint:unchecked ReactorDemo.java
# java -cp .:/Applications/ChemAxon/JChem-5.7.0/lib/jchem.jar ReactorDemo $1 $2 $3 #| tee /dev/stderr | mview - &

#rm RetroTests.class
#javac -cp .:/Applications/ChemAxon/JChem-5.7.0/lib/jchem.jar -Xlint:unchecked RetroTests.java
#java -cp .:/Applications/ChemAxon/JChem-5.7.0/lib/jchem.jar RetroTests $1 $2 $3 #| tee /dev/stderr | mview - &

date
#java -Xmx2G -cp .:${TOP}/build:${JCHEM}/lib/jchem.jar caos.aaai.CaosEngine ${TOP}/data/cleaned_reaction_library_JChem_5.7.0_DISABLED  ${TOP}/data/SML ${TOP}/data/33.smiles 8000 0 ${TOP}/data/BENCHMARK/PROBLEMS/GlobalRXNs ${TOP}/data/BENCHMARK/PROBLEMS/GlobalSML

#java -Xmx2G -cp .:${TOP}/build:${JCHEM}/lib/jchem.jar caos.aaai.CaosEngine ${TOP}/data/BENCHMARK/PROBLEMS/3/RXNs  ${TOP}/data/BENCHMARK/PROBLEMS/3/SML ${TOP}/data/BENCHMARK/PROBLEMS/3/goal_d3.smarts 1 0 ${TOP}/data/BENCHMARK/PROBLEMS/GlobalRXNs ${TOP}/data/BENCHMARK/PROBLEMS/GlobalSML

#PROBLEM=16
# for PROBLEM in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 18.1 19 20
#for PROBLEM in 11  #8 10 11 12 #1 12 14 15 16 #15 #11 12 14 16 18 19 8 9
for PROBLEM in 2
do
OUTDIR=rxndebug #exhaust #
mkdir -p ${TOP}/out/${OUTDIR}/${PROBLEM}
LOG=${TOP}/out/${OUTDIR}/${PROBLEM}/log
ERR=${TOP}/out/${OUTDIR}/${PROBLEM}/err

echo "==================================PROBLEM ${PROBLEM}=================================="
echo "==================================PROBLEM ${PROBLEM}==================================" > ${LOG}
echo "==================================PROBLEM ${PROBLEM}==================================" > ${ERR}
date
date > ${ERR}
#java -Xmx${MAXMEM} -cp .:${TOP}/build:${JCHEM}/lib/jchem.jar test.ReactorDemo2 $*
#java -Xmx${MAXMEM} -cp .:${TOP}/build:${JCHEM}/lib/jchem.jar caos.aaai.OperatorLibrary

#java -Xmx${MAXMEM} -cp .:${TOP}/build:${JCHEM}/lib/jchem.jar caos.aaai.CaosEngine ${TOP}/data/BENCHMARK/PROBLEMS/${PROBLEM}/RXNs  ${TOP}/data/BENCHMARK/PROBLEMS/${PROBLEM}/SML ${TOP}/data/BENCHMARK/PROBLEMS/${PROBLEM}/goal.smiles 10000 0 ${TOP}/data/BENCHMARK/PROBLEMS/GlobalRXNs_DISABLED ${TOP}/data/BENCHMARK/PROBLEMS/GlobalSML >${LOG} 2>${ERR}

java -Xmx${MAXMEM} -cp .:${TOP}/build:${JCHEM}/lib/jchem.jar caos.aaai.CaosNMCEngine ${TOP}/data/BENCHMARK/PROBLEMS/${PROBLEM}/RXNs_DISABLED  ${TOP}/data/BENCHMARK/PROBLEMS/${PROBLEM}/SML ${TOP}/data/BENCHMARK/PROBLEMS/${PROBLEM}/goal.smiles 10000 0 ${TOP}/data/BENCHMARK/PROBLEMS/GlobalRXNs ${TOP}/data/BENCHMARK/PROBLEMS/GlobalSML >${LOG} 2>${ERR}

#java -Xmx${MAXMEM} -cp .:${TOP}/build:${JCHEM}/lib/jchem.jar caos.aaai.CaosEngine ${TOP}/data/BENCHMARK/PROBLEMS/${PROBLEM}/RXNs  ${TOP}/data/BENCHMARK/PROBLEMS/${PROBLEM}/SML ${TOP}/data/BENCHMARK/PROBLEMS/${PROBLEM}/goal.smiles 5 0 ${TOP}/data/BENCHMARK/PROBLEMS/GlobalRXNs ${TOP}/data/BENCHMARK/PROBLEMS/GlobalSML EXHAUSTIVE >${LOG} 2>>${ERR}

#java -Xmx${MAXMEM} -cp .:${TOP}/build:${JCHEM}/lib/jchem.jar caos.aaai.CaosEngine ${TOP}/data/BENCHMARK/PROBLEMS/${PROBLEM}/RXNs  ${TOP}/data/BENCHMARK/PROBLEMS/${PROBLEM}/SML ${TOP}/data/BENCHMARK/PROBLEMS/${PROBLEM}/subgoals/goal_c.smiles 100 0 ${TOP}/data/BENCHMARK/PROBLEMS/GlobalRXNs ${TOP}/data/BENCHMARK/PROBLEMS/GlobalSML
#java -Xmx${MAXMEM} -cp .:${TOP}/build:${JCHEM}/lib/jchem.jar caos.aaai.CaosEngine ${TOP}/data/BENCHMARK/PROBLEMS/${PROBLEM}/RXNs  ${TOP}/data/BENCHMARK/PROBLEMS/${PROBLEM}/SML ${TOP}/data/BENCHMARK/PROBLEMS/${PROBLEM}/subgoals/solution_B.smiles 100 0 ${TOP}/data/BENCHMARK/PROBLEMS/GlobalRXNs ${TOP}/data/BENCHMARK/PROBLEMS/GlobalSML
diff -b $LOG ${TOP}/data/BENCHMARK/PROBLEMS/${PROBLEM}/SOLUTION.txt

date
date >> ${ERR}
echo ${LOG}
done

답변1

1) 그 당시 java우리는 실제로 가 아니라 를 찾고 있었습니다..class.java

2) 가지고 있는 .class의 이름이 지정된 경우 caos.aaai.CaosEngine클래스 경로에 추가된 모든 디렉토리 또는 JAR java(즉, 두 디렉토리 아래)을 살펴보십시오.caos/aaai/CaosEngine.class

일반적으로 모든 클래스를 JAR로 패키징하고 JAR의 MANIFEST.MF 파일에 클래스를 Main-Class: classname가리키는 항목을 포함시킨 main()후 다음 명령을 사용하여 애플리케이션을 시작하는 것이 더 간단합니다.java -jar {the_jar}

관련 정보