TL; DR
Tôi Looking for the javac
API plugin mà sẽ cho phép tôi ghi lại tất cả các lớp học cần thiết bởi trình biên dịch Java cho một tập tin nguồn cụ thể.Bảng liệt kê tất cả các lớp trình biên dịch java cần trong biên soạn
Nhiều bối cảnh:
Tôi đang viết một công cụ để di chuyển từ Maven
để Bazel
và là một trong những thách thức (và cơ hội) có là Bazel
cho phép, và hưởng lợi từ một granularity hạt mịn hơn nhiều "module ". Ngoài ra phụ thuộc không phải là transitive đối với biên dịch classpath.
Tôi đang cố gắng tạo biểu đồ phụ thuộc của mã và đã sử dụng mã byte cộng với chẩn đoán trên mã nguồn (cho hằng số, nhập khẩu, v.v.) nhưng đã tình cờ gặp trường hợp cạnh mà tôi sợ, chỉ có thể được giải quyết bằng cách sử dụng một plugin trình biên dịch.
Cho một phương pháp Foo
trong lớp Concrete
mà chấp nhận một giao diện SomeInterface
kéo dài ParentInterface
sau đó javac
nhu cầu cả SomeInterface
và ParentInterface
trong classpath biên dịch mặc dù ParentInterface
không xuất hiện trong các bytecode hoặc trong mã nguồn.
này được giải quyết trong Maven
vì sự phụ thuộc là bắc cầu liên quan đến lập classpath nhưng tôi muốn tránh điều đó vì đây được mở rộng đáng kể classpath (chủ yếu là thú vị đối với dependnecies nguồn và xây dựng gây ra với).
Tôi đang cố gắng xem liệu tôi có thể sử dụng compiler plugins để xác định tất cả các lớp mà trình biên dịch cần cho một tệp nguồn đã cho hay không. Điều này sẽ giúp tôi kể từ khi tôi có thể chạy maven của tôi xây dựng một lần để thu thập thông tin và sau đó tạo ra các đồ thị từ thông tin này. Vấn đề là tôi bị mất một chút so với các API.
Cảm ơn!
Bạn có thể kiểm tra SomeInterface để xem nó cần một ParentInterface. Bạn có thể sử dụng phân tích phản chiếu hoặc mã byte. Nếu điều đó nghe có vẻ quá khó, tôi có thể đảm bảo với bạn rằng việc cố gắng sử dụng trình biên dịch để có được thông tin này là gấp 10 lần. –
@PeterLawrey Cảm ơn!Phản ánh có lẽ sẽ không giúp tôi vì tôi quan tâm đến thời gian xây dựng nhưng mã byte có thể hoạt động. Vấn đề là chỉ trong một số trường hợp tôi cần cha mẹ và cách tiếp cận của bạn bắt buộc phải học tất cả các trường hợp cạnh này hoặc mở rộng phạm vi cho tất cả các loại phụ trợ và tổ tiên của chúng (và điều này tất nhiên có thể là bên thứ ba làm phức tạp nó hơn nữa) ... – Ittai
có. Bạn cũng sẽ cần bất kỳ lớp nào thu được thông qua sự phản chiếu trong thời gian chạy mà có thể khó xác định hơn. –