这里我们展示了两个项目结构。
我们想组装由多个项目组成的单个项目。我们的要求是通过java程序动态地从不同位置加载它的依赖,如类,资源, jars 。不添加类路径条目的jar MANIFEST.MF 。
您可以在运行时添加java选项以识别类路径,但我们更倾向于通过java程序动态加载。
/opt/java/chorke/multiple/projects/home/
├─ bin/
│ ├─ mspn/
│ │ ├─ lib/
│ │ │ ├─ chorke-mspn-utlity-2.0.00-SNAPSHOT.jar
│ │ │ └─ chorke-mspn-webapp-2.0.00-SNAPSHOT.jar
│ │ ├─ chorke-mspn-server-2.0.00-SNAPSHOT.jar [executable jar]
│ │ ├─ README.md
│ │ └─ LICENSE
│ ├─ mllp/
│ │ ├─ lib/
│ │ │ ├─ chorke-mllp-utlity-2.0.00-SNAPSHOT.jar
│ │ │ └─ chorke-mllp-webapp-2.0.00-SNAPSHOT.jar
│ │ ├─ chorke-mllp-server-2.0.00-SNAPSHOT.jar [executable jar]
│ │ ├─ README.md
│ │ └─ LICENSE
│ └─ itis/
│ ├─ lib/
│ │ ├─ chorke-itis-utlity-2.0.00-SNAPSHOT.jar
│ │ └─ chorke-itis-webapp-2.0.00-SNAPSHOT.jar
│ ├─ chorke-itis-server-2.0.00-SNAPSHOT.jar [executable jar]
│ ├─ README.md
│ └─ LICENSE
├─ lib/
│ ├─ commons-lang3-3.3.2.jar
│ ├─ ...more...hidden...jars...here.jar
│ ├─ slf4j-log4j12-1.7.12.jar
├─ opt/
│ ├─ org.eclipse.swt.gtk.linux.x86-4.4.2.jar
│ ├─ org.eclipse.swt.cocoa.macosx.x86-4.4.2.jar
│ ├─ ...more...optional...hidden...jars...here.jar
│ └─ org.eclipse.swt.win32.win32.x86_64-4.4.2.jar
└─ etc/
├─ mspn/
│ ├─ application.properties
│ ├─ application.yml
│ └─ log4j.xml
├─ mllp/
│ ├─ application.properties
│ ├─ application.yml
│ └─ log4j.xml
└─ itis/
├─ application.properties
├─ application.yml
└─ log4j.xml
在这里,我们将多个项目结构拆分为单个项目,供您考虑。
/opt/java/chorke/single/project/home/
├─ bin/
│ └─ itis/
│ ├─ lib/
│ │ ├─ chorke-itis-utlity-2.0.00-SNAPSHOT.jar
│ │ └─ chorke-itis-webapp-2.0.00-SNAPSHOT.jar
│ ├─ chorke-itis-server-2.0.00-SNAPSHOT.jar [executable jar]
│ ├─ README.md
│ └─ LICENSE
├─ lib/
│ ├─ commons-lang3-3.3.2.jar
│ ├─ ...more...hidden...jars...here.jar
│ ├─ slf4j-log4j12-1.7.12.jar
├─ opt/
│ ├─ org.eclipse.swt.gtk.linux.x86-4.4.2.jar
│ ├─ org.eclipse.swt.cocoa.macosx.x86-4.4.2.jar
│ ├─ ...more...optional...hidden...jars...here.jar
│ └─ org.eclipse.swt.win32.win32.x86_64-4.4.2.jar
└─ etc/
└─ itis/
├─ application.properties
├─ application.yml
└─ log4j.xml
假设我们希望通过
运行chorke-itis-server-2.0.00-SNAPSHOT.jar
java -jar ./bin/itis/chorke-itis-server-2.0.00-SNAPSHOT.jar
命令但它不会因为缺少类路径中的依赖性而执行,例如: -
./bin/itis/lib/*.jar
./lib/*.jar
./opt/*.jar
./etc/itis/*.*
这些依赖项不会像通常的那样加载。我们应该做更多的事情来认识这些阶级路径。它将通过提供类路径参数从命令行传递或通过java程序动态传递。
请帮助我们通过帮助核心java或任何类型的开源框架来构建动态类加载器?
答案 0 :(得分:1)
以下是您需求的单个示例项目结构,而int main()
{
int ar[4] = {1,2,3,0};
double result;
int gtr = 0;
result = calculate(ar,4,>r);
printf("%lf\n",result );
printf("gtr : %d\n",gtr);
return 0;
}
double calculate(int ar[], int npts, int *gtr)
{
double total = 0 , average;
int i = 0;
for(i=0; i<npts; i++)
{
total = total + ar[i];
}
average = total / npts;
for( i = 0 ; i < npts ; i++ )
{
if(average < ar[i])
{
*gtr += 1;
}
}
return average;
}
是执行Java应用程序的BootstrapMainApplication
包内的主要类: -
com.chorke.boot
考虑到这个项目结构,您可以编写名为 launch.bat 的 bat 或 shell 脚本以及 launch.sh 适用于Windows以及Linux平台。
/opt/java/chorke/itis/project/home/
├─ bin/
│ └─ itis/
│ ├─ lib/
│ │ ├─ chorke-itis-utlity-2.0.00-SNAPSHOT.jar
│ │ └─ chorke-itis-webapp-2.0.00-SNAPSHOT.jar
│ ├─ chorke-itis-server-2.0.00-SNAPSHOT.jar [executable jar]
│ ├─ classes/
│ ├─ README.md
│ └─ LICENSE
├─ lib/
│ ├─ usr/
│ │ ├─ chorke-amqp-client-2.0.00-SNAPSHOT.jar
│ │ └─ chorke-comn-spring-2.0.00-SNAPSHOT.jar
│ └─ gpl/
│ ├─ activemq-broker-5.10.2
│ ├─ commons-lang3-3.3.2.jar
│ ├─ ..more...and..more..jar
│ └─ slf4j-log4j12-1.7.12.jar
├─ etc/
│ └─ itis/
│ ├─ application.properties
│ ├─ application.yml
│ └─ log4j.xml
├─ launch.bat
└─ launch.sh
对于使用此shell脚本的Linux平台,可以正常工作
goto launch
:launch
SET CKI_HOME=.
SET BIN_PATH=%CKI_HOME%\bin
SET LIB_PATH=%CKI_HOME%\lib
SET ETC_PATH=%CKI_HOME%\etc
SET ITI_HOME=%BIN_PATH%\itis
SET CLS_PATH=%ETC_PATH%\itis\;%ITI_HOME%\classes\
SET CLS_PATH=%CLS_PATH%;%LIB_PATH%\gpl\*;%LIB_PATH%\usr\*;%ITI_HOME%\lib\*;%ITI_HOME%\*
@REM SET CMD_EXCE=java -cp %CLS_PATH% com.chorke.boot.BootstrapMainApplication
SET CMD_EXCE=java -classpath %CLS_PATH% com.chorke.boot.BootstrapMainApplication
%CMD_EXCE%
我想这些脚本有助于构建您自己的应用程序生态系统/结构,以及能够从不同位置加载类/配置/库。